diff --git a/.github/workflows/tact-docs-test.yml b/.github/workflows/tact-docs-test.yml
index 94cf132fe..188c971e6 100644
--- a/.github/workflows/tact-docs-test.yml
+++ b/.github/workflows/tact-docs-test.yml
@@ -14,8 +14,8 @@ on:
"review_requested",
]
branches: ["main"]
- # Only start the workflow if anything inside the docs has changed
- paths: ["docs/**"]
+ # Only start the workflow if anything inside the docs or std/internal has changed
+ paths: ["docs/**", "src/stdlib/stdlib/std/internal/**"]
# Allows to run this workflow manually from the Actions tab
workflow_dispatch:
@@ -67,6 +67,25 @@ jobs:
fail: true
failIfEmpty: false
+ # That way, when building the docs in the next step,
+ # their link checker will be able to validate the links in stdlib
+ - name: Save a file with all the links in stdlib
+ if: runner.os == 'Linux'
+ run: |
+ stdlib_path="src/stdlib/stdlib/std/internal"
+ linkfile='std-internal-link-test.mdx'
+ pushd "$stdlib_path"
+ echo -e '---\ntitle: "std/internal link test"\n---\n' > "$linkfile"
+ grep 'https://docs.tact.*$' *.tact >> "$linkfile"
+ # remove possible brackets, since they can interfere
+ sed -E 's|(\[\|\])||g' -i "$linkfile"
+ # remove some punctuation characters after the links
+ sed -E 's|(https://docs.tact-lang.org.*)[.,;]$|\1|g' -i "$linkfile"
+ # proceed with replacements
+ sed -E 's|https://docs.tact-lang.org(.*)$|[link](\1)|g' -i "$linkfile"
+ popd
+ mv "${stdlib_path}/${linkfile}" docs/src/content/docs/
+
- name: Build the site
working-directory: docs
run: yarn build
diff --git a/cspell.json b/cspell.json
index b12aacc58..706684194 100644
--- a/cspell.json
+++ b/cspell.json
@@ -21,7 +21,8 @@
"\\b[xB]\\{[a-fA-F0-9]*_?\\}", // binary literals in Fift-asm
"\\b0[xX][a-fA-F0-9_]*\\b", // hexadecimal numbers
"\\b(?:address|crc32|cell|slice|rawSlice)\\(\".+?\"\\)", // some comptime functions
- "ince Tact " // regex in RELEASE.md
+ "ince Tact ", // regex in RELEASE.md
+ "core-contextstate"
],
"flagWords": [],
"ignorePaths": [
diff --git a/dev-docs/CHANGELOG.md b/dev-docs/CHANGELOG.md
index 70174dfc9..c6a63d3a0 100644
--- a/dev-docs/CHANGELOG.md
+++ b/dev-docs/CHANGELOG.md
@@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Docs
- Removed the "gas-expensive" badge from `checkSignature()` and `checkDataSignature()` functions and added a caution note when they do become expensive (from 11th call): PR [#2380](https://github.com/tact-lang/tact/pull/2380)
+- Fixed descriptions of `Slice.asString()` and `String.asSlice()` functions: PR [#2391](https://github.com/tact-lang/tact/pull/2391)
+- Split Core libraries in the reference: `core-common` and `core-advanced` were removed, and their contents distributed across other libraries; `core-crypto`, `core-contextstate`, `core-send`, `core-gas`, and `core-addresses` were introduced: PR [#2391](https://github.com/tact-lang/tact/pull/2391)
### Release contributors
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 4ca348075..c309bd964 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -256,14 +256,17 @@ export default defineConfig({
link: 'ref/core-base#',
},
{ slug: 'ref/core-base' },
- { slug: 'ref/core-common' },
+ { slug: 'ref/core-send' },
+ { slug: 'ref/core-contextstate' },
{ slug: 'ref/core-comptime' },
+ { slug: 'ref/core-cells' },
+ { slug: 'ref/core-addresses' },
+ { slug: 'ref/core-strings' },
{ slug: 'ref/core-debug' },
- { slug: 'ref/core-random' },
+ { slug: 'ref/core-gas' },
+ { slug: 'ref/core-crypto' },
{ slug: 'ref/core-math' },
- { slug: 'ref/core-strings' },
- { slug: 'ref/core-cells' },
- { slug: 'ref/core-advanced' },
+ { slug: 'ref/core-random' },
{
label: 'Standard libraries',
translations: { 'zh-CN': '标准库' },
@@ -322,5 +325,7 @@ export default defineConfig({
'/ecosystem/tools/jetbrains': '/ecosystem/jetbrains',
'/ecosystem/tools/vscode': '/ecosystem/vscode',
'/ecosystem/tools/misti': '/ecosystem/misti',
+ '/ref/core-common': '/ref/core-send',
+ '/ref/core-advanced': '/ref/core-contextstate',
},
});
diff --git a/docs/src/content/docs/book/assembly-functions.mdx b/docs/src/content/docs/book/assembly-functions.mdx
index 3225f6807..e0699de96 100644
--- a/docs/src/content/docs/book/assembly-functions.mdx
+++ b/docs/src/content/docs/book/assembly-functions.mdx
@@ -426,7 +426,7 @@ The [TVM][tvm] places a couple of values onto its stack upon initialization, and
:::
-Therefore, to access details such as the amount of [nanoToncoins](/book/integers#nanotoncoin) in a message or the [`Address{:tact}`][p] of the sender, it's strongly recommended to call the [`context(){:tact}`](/ref/core-common#context) or [`sender(){:tact}`](/ref/core-common#sender) functions instead of attempting to look for those values on the stack.
+Therefore, to access details such as the amount of [nanoToncoins](/book/integers#nanotoncoin) in a message or the [`Address{:tact}`][p] of the sender, it's strongly recommended to call the [`context(){:tact}`](/ref/core-contextstate#context) or [`sender(){:tact}`](/ref/core-contextstate#sender) functions instead of attempting to look for those values on the stack.
### Don't rely on the order of fields in structures in the standard library {#caveats-stdlib-structures}
diff --git a/docs/src/content/docs/book/debug.mdx b/docs/src/content/docs/book/debug.mdx
index 76ca12d6a..f870d78d4 100644
--- a/docs/src/content/docs/book/debug.mdx
+++ b/docs/src/content/docs/book/debug.mdx
@@ -630,13 +630,13 @@ it('your test clause title', async () => {
## Logging via `emit` {#logging}
-A [global static function](/book/functions#global-static-functions) [`emit(){:tact}`](/ref/core-common#emit) sends a message to the outer world — it doesn't have a specific recipient.
+A [global static function](/book/functions#global-static-functions) [`emit(){:tact}`](/ref/core-send#emit) sends a message to the outer world — it doesn't have a specific recipient.
This function is very handy for logging and analyzing data off-chain — one just has to look at [external messages](/book/external) produced by the contract.
### Logs in local Sandbox tests {#logging-local}
-When deploying in the [Sandbox][sb], you may call [`emit(){:tact}`](/ref/core-common#emit) from a [receiver function](/book/contracts#receiver-functions) and then observe the list of sent [external messages](/book/external):
+When deploying in the [Sandbox][sb], you may call [`emit(){:tact}`](/ref/core-send#emit) from a [receiver function](/book/contracts#receiver-functions) and then observe the list of sent [external messages](/book/external):
```typescript {9-10}
it('emits', async () => {
@@ -656,7 +656,7 @@ it('emits', async () => {
Every transaction on TON Blockchain [contains `out_msgs`](https://docs.ton.org/develop/data-formats/transaction-layout#transaction) — a dictionary that holds the list of outgoing messages created during the transaction execution.
-To see logs from [`emit(){:tact}`](/ref/core-common#emit) in that dictionary, look for external messages without a recipient. In various TON Blockchain explorers, such transactions will be marked as `external-out` with the destination specified as `-` or `empty`.
+To see logs from [`emit(){:tact}`](/ref/core-send#emit) in that dictionary, look for external messages without a recipient. In various TON Blockchain explorers, such transactions will be marked as `external-out` with the destination specified as `-` or `empty`.
Note that some explorers deserialize the message body sent for you, while others don't. However, you can always [parse it yourself](#logging-parsing) locally.
@@ -697,7 +697,7 @@ it('emits', async () => {
});
```
-Here, the `res` object would contain the list of sent [external messages](/book/external) as its `externals` field. Let's access it to parse the first message sent via a call to [`emit(){:tact}`](/ref/core-common#emit) in Tact code (or _emitted_ for short):
+Here, the `res` object would contain the list of sent [external messages](/book/external) as its `externals` field. Let's access it to parse the first message sent via a call to [`emit(){:tact}`](/ref/core-send#emit) in Tact code (or _emitted_ for short):
```typescript /body/
it('emits', async () => {
diff --git a/docs/src/content/docs/book/exit-codes.mdx b/docs/src/content/docs/book/exit-codes.mdx
index bd34c9e20..425c83343 100644
--- a/docs/src/content/docs/book/exit-codes.mdx
+++ b/docs/src/content/docs/book/exit-codes.mdx
@@ -617,7 +617,7 @@ Here are some of the functions in Tact which can throw an error with this exit c
1. [`Int.toFloatString(digits){:tact}`](/ref/core-strings#inttofloatstring): if `digits` is not in the interval $0 < digits < 78$.
-2. [`String.fromBase64(){:tact}`](/ref/core-strings#stringfrombase64) and [`Slice.fromBase64(){:tact}`](/ref/core-strings#slicefrombase64): if the given [`String{:tact}`][p] or [`Slice{:tact}`][slice] contains non-Base64 characters.
+2. [`String.fromBase64(){:tact}`](/ref/core-strings#stringfrombase64) and [`Slice.fromBase64(){:tact}`](/ref/core-cells#slicefrombase64): if the given [`String{:tact}`][p] or [`Slice{:tact}`][slice] contains non-Base64 characters.
```tact
try {
@@ -680,7 +680,7 @@ try {
The value of type [`Address{:tact}`][p] belongs to a basechain, when its [chain ID](https://docs.ton.org/learn/overviews/addresses#workchain-id) is equal to 0.
-Such check is currently only performed in the [`forceBasechain(){:tact}`](/ref/core-advanced#forcebasechain) function. If the address does not belong to a basechain, i.e., its chain ID isn't 0, the function throws an error with exit code 138: `Not a basechain address`.
+Such check is currently only performed in the [`forceBasechain(){:tact}`](/ref/core-addresses#forcebasechain) function. If the address does not belong to a basechain, i.e., its chain ID isn't 0, the function throws an error with exit code 138: `Not a basechain address`.
```tact
let someBasechainAddress: Address =
diff --git a/docs/src/content/docs/book/expressions.mdx b/docs/src/content/docs/book/expressions.mdx
index 8ebb074b8..402cac00d 100644
--- a/docs/src/content/docs/book/expressions.mdx
+++ b/docs/src/content/docs/book/expressions.mdx
@@ -282,7 +282,7 @@ Field | Type | Description
:::note
- For workchain 0, the [`Address{:tact}`][p] of the current contract obtained by calling the [`myAddress(){:tact}`](/ref/core-common#myaddress) function is identical to the one that can be obtained by calling the [`contractAddress(){:tact}`](/ref/core-common#contractaddress) function with the initial state of the current contract computed via `initOf{:tact}`:
+ For workchain 0, the [`Address{:tact}`][p] of the current contract obtained by calling the [`myAddress(){:tact}`](/ref/core-contextstate#myaddress) function is identical to the one that can be obtained by calling the [`contractAddress(){:tact}`](/ref/core-addresses#contractaddress) function with the initial state of the current contract computed via `initOf{:tact}`:
```tact {6}
contract TheKingPrawn {
@@ -295,7 +295,7 @@ Field | Type | Description
}
```
- However, if you only need the address of the current contract at runtime and not its `StateInit{:tact}`, use the [`myAddress(){:tact}`](/ref/core-common#myaddress) function, as it consumes **significantly** less gas.
+ However, if you only need the address of the current contract at runtime and not its `StateInit{:tact}`, use the [`myAddress(){:tact}`](/ref/core-contextstate#myaddress) function, as it consumes **significantly** less gas.
:::
@@ -314,7 +314,7 @@ codeOf ExampleContract; // a Cell with ExampleContract code
// name of the contract
```
-If `codeOf{:tact}` is used for the current contract, its result is equivalent to calling [`myCode(){:tact}`](/ref/core-advanced#mycode).
+If `codeOf{:tact}` is used for the current contract, its result is equivalent to calling [`myCode(){:tact}`](/ref/core-contextstate#mycode).
```tact
contract ExampleContract {
diff --git a/docs/src/content/docs/book/gas-best-practices.mdx b/docs/src/content/docs/book/gas-best-practices.mdx
index aaf62c4d1..4c68694eb 100644
--- a/docs/src/content/docs/book/gas-best-practices.mdx
+++ b/docs/src/content/docs/book/gas-best-practices.mdx
@@ -161,9 +161,9 @@ If your contract method does not access any of its persistent state variables, m
### Use `sender()` over `context().sender`
-When you receive an internal message, you can obtain the address of the contract that has sent it. This can be done by calling the [`sender()`](/ref/core-common#sender) function or by accessing the `.sender` field of the `Context{:tact}` [struct][struct] after calling the [`context()`](/ref/core-common#context) function.
+When you receive an internal message, you can obtain the address of the contract that has sent it. This can be done by calling the [`sender()`](/ref/core-contextstate#sender) function or by accessing the `.sender` field of the `Context{:tact}` [struct][struct] after calling the [`context()`](/ref/core-contextstate#context) function.
-If you only need the sender's address and no additional context on the incoming message that is contained in the `Context{:tact}` struct, then use the [`sender()`](/ref/core-common#sender) function as it is less gas-consuming.
+If you only need the sender's address and no additional context on the incoming message that is contained in the `Context{:tact}` struct, then use the [`sender()`](/ref/core-contextstate#sender) function as it is less gas-consuming.
```tact /sender\\(\\)/
message(MessageParameters{
@@ -194,9 +194,9 @@ fun example() {
Every [contract](/book/contracts) in Tact implicitly [inherits](/book/contracts#traits) the `BaseTrait{:tact}` trait, which contains a number of [internal functions](/book/contracts#internal-functions) for any contract. Those internal functions are gas-expensive for the same reasons as stated earlier.
-Calls to `self.forward(){:tact}`, `self.reply(){:tact}` and `self.notify(){:tact}` can be replaced with respective calls to the [`send(){:tact}`](/ref/core-common#send) or [`message(){:tact}`](/ref/core-common#message) functions with suitable values.
+Calls to `self.forward(){:tact}`, `self.reply(){:tact}` and `self.notify(){:tact}` can be replaced with respective calls to the [`send(){:tact}`](/ref/core-send#send) or [`message(){:tact}`](/ref/core-send#message) functions with suitable values.
-Moreover, if all you want is to forward the remaining value back to the sender, it is best to use the [`cashback(){:tact}`](/ref/core-common#cashback) function instead of `self.notify(){:tact}` function.
+Moreover, if all you want is to forward the remaining value back to the sender, it is best to use the [`cashback(){:tact}`](/ref/core-send#cashback) function instead of `self.notify(){:tact}` function.
```tact
// This
@@ -234,7 +234,7 @@ cashback(sender());
### Use `deploy()` function for on-chain deployments
-There are many [message-sending functions](/book/send#message-sending-functions), and the [`deploy(){:tact}`](/ref/core-common#deploy) function is optimized for cheaper on-chain deployments compared to the [`send(){:tact}`](/ref/core-common#send) function.
+There are many [message-sending functions](/book/send#message-sending-functions), and the [`deploy(){:tact}`](/ref/core-send#deploy) function is optimized for cheaper on-chain deployments compared to the [`send(){:tact}`](/ref/core-send#send) function.
```tact
deploy(DeployParameters{
@@ -247,7 +247,7 @@ deploy(DeployParameters{
### Use `message()` function for non-deployment messages
-There are many [message-sending functions](/book/send#message-sending-functions), and the [`message(){:tact}`](/ref/core-common#message) function is optimized for cheaper non-deployment regular messages compared to the [`send(){:tact}`](/ref/core-common#send) function.
+There are many [message-sending functions](/book/send#message-sending-functions), and the [`message(){:tact}`](/ref/core-send#message) function is optimized for cheaper non-deployment regular messages compared to the [`send(){:tact}`](/ref/core-send#send) function.
```tact
message(MessageParameters{
diff --git a/docs/src/content/docs/book/message-mode.mdx b/docs/src/content/docs/book/message-mode.mdx
index a16046776..5016b93a0 100644
--- a/docs/src/content/docs/book/message-mode.mdx
+++ b/docs/src/content/docs/book/message-mode.mdx
@@ -5,7 +5,7 @@ description: "Messages are sent with the mode param of the struct SendParameters
import { Badge } from '@astrojs/starlight/components';
-As previously mentioned, messages sent via the [`send(){:tact}`](/ref/core-common#send) function utilize the `mode` parameter of the `SendParameters{:tact}` structure. The `mode` is an [`Int{:tact}`][int] value, which is combined from base modes and optional flags, which are also [`Int{:tact}`][int] values.
+As previously mentioned, messages sent via the [`send(){:tact}`](/ref/core-send#send) function utilize the `mode` parameter of the `SendParameters{:tact}` structure. The `mode` is an [`Int{:tact}`][int] value, which is combined from base modes and optional flags, which are also [`Int{:tact}`][int] values.
It's possible to use raw [`Int{:tact}`][int] values and manually provide them for the `mode`, but for your convenience there is a set of constants you may use to easily construct the compound `mode`. Take a look at the following tables for more information on base modes and optional flags.
@@ -68,7 +68,7 @@ Note that there can be only **one** [base mode](#base-modes), but the number of
Some [message-sending functions](/book/send#message-sending-functions) do not allow setting a mode by passing an argument. This is because their internal logic requires a specific fixed set of modes to be used instead:
-* [`emit(){:tact}`](/ref/core-common#emit) sends a message with the `SendDefaultMode{:tact}` ($0$).
+* [`emit(){:tact}`](/ref/core-send#emit) sends a message with the `SendDefaultMode{:tact}` ($0$).
* [`self.reply(){:tact}`](/ref/core-base#self-reply), [`self.notify(){:tact}`](/ref/core-base#self-notify), and [`self.forward(){:tact}`](/ref/core-base#self-forward) all use the `SendRemainingValue{:tact}` mode unless the [`self.storageReserve{:tact}`](/ref/core-base#self-storagereserve) constant is overridden to be greater than $0$, in which case they attempt to use the `SendRemainingBalance{:tact}` mode.
[int]: /book/integers
diff --git a/docs/src/content/docs/book/security-best-practices.mdx b/docs/src/content/docs/book/security-best-practices.mdx
index 678141862..a68581c83 100644
--- a/docs/src/content/docs/book/security-best-practices.mdx
+++ b/docs/src/content/docs/book/security-best-practices.mdx
@@ -299,7 +299,7 @@ A message cascade can be processed over many blocks. Assume that while one messa
## Handle/Send bounced messages
-Send messages with the bounce flag set to `true{:tact}`, which is the default for the [`send(){:tact}`](/ref/core-common#send) function. Messages bounce when the execution of a contract fails. You may want to handle this by rolling back the state of the contract using [`try...catch{:tact}`](/book/statements#try-catch) statements and performing additional processing depending on your logic.
+Send messages with the bounce flag set to `true{:tact}`, which is the default for the [`send(){:tact}`](/ref/core-send#send) function. Messages bounce when the execution of a contract fails. You may want to handle this by rolling back the state of the contract using [`try...catch{:tact}`](/book/statements#try-catch) statements and performing additional processing depending on your logic.
##### Do's ✅
@@ -356,7 +356,7 @@ From the [Sending messages page](/book/send#outbound-message-processing) of the
> Each transaction on TON Blockchain consists of multiple phases. Outbound messages are evaluated in the compute phase but are **not** sent in that phase. Instead, they're queued in order of appearance for the action phase, where all actions listed in the compute phase, such as outbound messages or reserve requests, are executed.
-Hence, if the compute phase fails, [registers](https://docs.ton.org/v3/documentation/tvm/tvm-overview#control-registers) `c4` (persistent data) and `c5` (actions) won't be updated. However, it is possible to manually save their state using the [`commit(){:tact}`](/ref/core-advanced/#commit) function.
+Hence, if the compute phase fails, [registers](https://docs.ton.org/v3/documentation/tvm/tvm-overview#control-registers) `c4` (persistent data) and `c5` (actions) won't be updated. However, it is possible to manually save their state using the [`commit(){:tact}`](/ref/core-contextstate#commit) function.
## Return gas excesses carefully
diff --git a/docs/src/content/docs/book/send.mdx b/docs/src/content/docs/book/send.mdx
index 4e9c5bcba..92d96a853 100644
--- a/docs/src/content/docs/book/send.mdx
+++ b/docs/src/content/docs/book/send.mdx
@@ -103,7 +103,7 @@ send(SendParameters{
-For cheaper on-chain deployments, prefer using the [`deploy(){:tact}`](/ref/core-common#deploy) function instead. It computes the address of the contract based on its initial code and data and efficiently composes the resulting message:
+For cheaper on-chain deployments, prefer using the [`deploy(){:tact}`](/ref/core-send#deploy) function instead. It computes the address of the contract based on its initial code and data and efficiently composes the resulting message:
```tact
deploy(DeployParameters{
@@ -160,9 +160,9 @@ There, the second message will not actually be sent:
* Thus, an error with [exit code 37](/book/exit-codes#37) is thrown: `Not enough Toncoin`.
-Note that such failures are not exclusive to the [`send(){:tact}`](/ref/core-common#send) function and may also occur when using other [message-sending functions](#message-sending-functions).
+Note that such failures are not exclusive to the [`send(){:tact}`](/ref/core-send#send) function and may also occur when using other [message-sending functions](#message-sending-functions).
-For instance, let us replace the first call to the [`send(){:tact}`](/ref/core-common#send) function in the previous example with the [`emit(){:tact}`](/ref/core-common#emit) function. The latter queues the message using the default mode, i.e. 0, and spends some [nanoToncoins][nano] to pay the [forward fees][fwdfee].
+For instance, let us replace the first call to the [`send(){:tact}`](/ref/core-send#send) function in the previous example with the [`emit(){:tact}`](/ref/core-send#emit) function. The latter queues the message using the default mode, i.e. 0, and spends some [nanoToncoins][nano] to pay the [forward fees][fwdfee].
If a subsequent message is then sent with a [`SendRemainingValue{:tact}`](/book/message-mode#base-modes) base mode, it will cause the same error as before:
@@ -196,9 +196,9 @@ contract IfItDiesItDies {
:::
-The previous examples discussed a case where the contract has 0 [nanoToncoins][nano] on the balance, which is rather rare—in most real-world scenarios, some funds would be present. As such, it is usually better to use the [`SendRemainingBalance{:tact}`](/book/message-mode#base-modes) base mode, paired with the _necessary_ call to the [`nativeReserve(){:tact}`](/ref/core-advanced#nativereserve) function.
+The previous examples discussed a case where the contract has 0 [nanoToncoins][nano] on the balance, which is rather rare—in most real-world scenarios, some funds would be present. As such, it is usually better to use the [`SendRemainingBalance{:tact}`](/book/message-mode#base-modes) base mode, paired with the _necessary_ call to the [`nativeReserve(){:tact}`](/ref/core-contextstate#nativereserve) function.
-Like outbound messages, [reserve requests](/ref/core-advanced#nativereserve) are queued during the [compute phase][compute] and executed during the [action phase][phases].
+Like outbound messages, [reserve requests](/ref/core-contextstate#nativereserve) are queued during the [compute phase][compute] and executed during the [action phase][phases].
```tact
// This contract has some Toncoins on the balance, e.g., 0.2 or more
@@ -253,16 +253,16 @@ Attempts to queue more throw an exception with an [exit code 33](/book/exit-code
Read more about all message-sending functions in the Reference:
-* [`send(){:tact}`](/ref/core-common#send)
-* [`message(){:tact}`](/ref/core-common#message)
-* [`deploy(){:tact}`](/ref/core-common#deploy)
-* [`emit(){:tact}`](/ref/core-common#emit)
-* [`cashback(){:tact}`](/ref/core-common#cashback)
+* [`send(){:tact}`](/ref/core-send#send)
+* [`message(){:tact}`](/ref/core-send#message)
+* [`deploy(){:tact}`](/ref/core-send#deploy)
+* [`emit(){:tact}`](/ref/core-send#emit)
+* [`cashback(){:tact}`](/ref/core-send#cashback)
* [`self.notify(){:tact}`](/ref/core-base#self-notify)
* [`self.reply(){:tact}`](/ref/core-base#self-reply)
* [`self.forward(){:tact}`](/ref/core-base#self-forward)
-* [`nativeSendMessage(){:tact}`](/ref/core-advanced#nativesendmessage)
-* [`nativeSendMessageReturnForwardFee(){:tact}`](/ref/core-advanced#nativesendmessagereturnforwardfee)
+* [`nativeSendMessage(){:tact}`](/ref/core-send#nativesendmessage)
+* [`nativeSendMessageReturnForwardFee(){:tact}`](/ref/core-send#nativesendmessagereturnforwardfee)
[p]: /book/types#primitive-types
[int]: /book/integers
diff --git a/docs/src/content/docs/cookbook/jettons.mdx b/docs/src/content/docs/cookbook/jettons.mdx
index d2c35791e..564f7bedf 100644
--- a/docs/src/content/docs/cookbook/jettons.mdx
+++ b/docs/src/content/docs/cookbook/jettons.mdx
@@ -76,11 +76,11 @@ Validation is performed using the Jetton address from the contract:
3. After successfully accepting the transfer, the contract's Jetton wallet sends a transfer notification to its owner contract.
4. The contract validates the Jetton message.
-You may obtain the contract's Jetton wallet address using the [`contractAddress(){:tact}`](/ref/core-common#contractaddress) function or calculating this address offchain.
+You may obtain the contract's Jetton wallet address using the [`contractAddress(){:tact}`](/ref/core-addresses#contractaddress) function or calculating this address offchain.
To obtain the Jetton wallet's state init, you need the wallet's data and code. While there is a common structure for the initial data layout, it may differ in some cases, such as with [USDT](#usdt-jetton-operations).
-Since notifications originate from your contract's Jetton wallet, the function [`myAddress(){:tact}`](/ref/core-common#myaddress) should be used in the `ownerAddress` field.
+Since notifications originate from your contract's Jetton wallet, the function [`myAddress(){:tact}`](/ref/core-contextstate#myaddress) should be used in the `ownerAddress` field.
:::caution
diff --git a/docs/src/content/docs/cookbook/time.mdx b/docs/src/content/docs/cookbook/time.mdx
index 40bec6687..e25f6acc4 100644
--- a/docs/src/content/docs/cookbook/time.mdx
+++ b/docs/src/content/docs/cookbook/time.mdx
@@ -19,7 +19,7 @@ if (currentTime > 1672080143) {
:::note[Useful links:]
- [`now(){:tact}` in Core library](/ref/core-common#now)\
+ [`now(){:tact}` in Core library](/ref/core-contextstate#now)\
["Current Time" in Tact-By-Example](https://tact-by-example.org/04-current-time)
:::
diff --git a/docs/src/content/docs/ref/core-addresses.mdx b/docs/src/content/docs/ref/core-addresses.mdx
new file mode 100644
index 000000000..9238d8e67
--- /dev/null
+++ b/docs/src/content/docs/ref/core-addresses.mdx
@@ -0,0 +1,350 @@
+---
+title: Addresses
+description: "Various Address functions from the Core library of Tact"
+---
+
+import { Badge } from '@astrojs/starlight/components';
+
+`Address{:tact}` represents a standard [smart contract address](https://docs.ton.org/v3/concepts/dive-into-ton/ton-blockchain/smart-contract-addresses#address-of-smart-contract) on TON Blockchain.
+
+See also: [`myAddress(){:tact}` function in the context and state reference](/ref/core-contextstate#myaddress).
+
+## newAddress
+
+
+
+```tact
+fun newAddress(chain: Int, hash: Int): Address;
+```
+
+Creates a new [`Address{:tact}`][p] based on the [`chain` ID][workchain-id] and the [SHA-256](/ref/core-crypto#sha256) encoded [`hash` value (account ID)][account-id].
+
+This function tries to resolve constant values at [compile-time](/ref/core-comptime) whenever possible.
+
+Attempts to specify an invalid `chain` ID (not -1 or 0) detectable at [compile-time](/ref/core-comptime) will result in a compilation error.
+
+Usage example:
+
+```tact
+let oldTonFoundationAddr: Address =
+ newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
+ // ↑ ↑
+ // | SHA-256 hash of contract's init package (StateInit)
+ // chain ID: 0 is a workchain, -1 is a masterchain
+```
+
+:::caution
+
+ Make sure you specify only supported workchain IDs: 0 for the basechain and -1 for the masterchain.
+
+:::
+
+:::note[Useful links:]
+
+ [`chain` (Workchain ID) in TON Docs][workchain-id]\
+ [`hash` (Account ID) in TON Docs][account-id]\
+ [Contract's init package (`StateInit{:tact}`)](/book/expressions#initof)
+
+:::
+
+## contractAddress
+
+
+
+```tact
+fun contractAddress(s: StateInit): Address;
+```
+
+Computes the smart contract's [`Address{:tact}`][p] in the workchain ID 0 (basechain) using the [`StateInit{:tact}`][initpkg] `s` of the contract. An alias to `contractAddressExt(0, s.code, s.data){:tact}`.
+
+Usage example:
+
+```tact
+let s: StateInit = initOf SomeContract();
+let foundMeSome: Address = contractAddress(s);
+let andSomeMore: Address = contractAddressExt(0, s.code, s.data);
+
+foundMeSome == andSomeMore; // true
+```
+
+## contractAddressExt
+
+
+
+```tact
+fun contractAddressExt(chain: Int, code: Cell, data: Cell): Address;
+```
+
+Computes the smart contract's [`Address{:tact}`][p] in the given `chain` ID using the contract's `code` and its initial state `data`. Use the [`initOf{:tact}`][initpkg] expression to obtain the initial `code` and initial `data` of a given contract.
+
+This function tries to resolve constant values at [compile-time](/ref/core-comptime) whenever possible.
+
+Attempts to specify an invalid `chain` ID (not -1 or 0) that can be detected at [compile-time](/ref/core-comptime) will result in a compilation error.
+
+Usage example:
+
+```tact
+let initPkg: StateInit = initOf SomeContract();
+let hereBeDragons: Address = contractAddressExt(0, initPkg.code, initPkg.data);
+```
+
+## contractHash
+
+
+
+```tact
+fun contractHash(code: Cell, data: Cell): Int;
+```
+
+Computes and returns an [`Int{:tact}`][int] value of the [SHA-256](/ref/core-crypto#sha256) hash of the `code` and `data` of the given contract. To assemble the `code` and `data` cells together for hashing, the [standard `Cell{:tact}` representation](/book/cells#cells-representation) is used.
+
+This hash is commonly called the [account ID][account-id]. Together with the [workchain ID][workchain-id], it deterministically forms the address of the contract on TON Blockchain.
+
+Usage example:
+
+```tact
+let initPkg: StateInit = initOf SomeContract();
+let accountId: Int = contractHash(initPkg.code, initPkg.data);
+let basechainAddr: Address = newAddress(0, accountId);
+let basechainAddr2: Address = contractAddressExt(0, initPkg.code, initPkg.data);
+
+basechainAddr == basechainAddr2; // true
+```
+
+:::note[Useful links:]
+
+ [`chain` (Workchain ID) in TON Docs][workchain-id]\
+ [`hash` (Account ID) in TON Docs][account-id]\
+ [Contract's init package (`StateInit{:tact}`)][initpkg]\
+ [Standard `Cell{:tact}` representation](/book/cells#cells-representation)
+
+:::
+
+## forceBasechain
+
+
+
+```tact
+fun forceBasechain(address: Address);
+```
+
+Checks whether the `address` is in the basechain, i.e., its [chain ID](https://docs.ton.org/learn/overviews/addresses#workchain-id) is 0. If it is not, throws an exception with [exit code 138](/book/exit-codes#9): `Not a basechain address`.
+
+Usage examples:
+
+```tact
+let someBasechainAddress: Address =
+ newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
+
+let someMasterchainAddress: Address =
+ newAddress(-1, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
+
+// Does not throw because the chain ID is 0
+forceBasechain(someBasechainAddress);
+
+try {
+ // Throws because the chain ID is -1 (masterchain)
+ forceBasechain(someMasterchainAddress);
+} catch (exitCode) {
+ // exitCode is 138
+}
+```
+
+## forceWorkchain
+
+
+
+```tact
+fun forceWorkchain(address: Address, workchain: Int, errorCode: Int);
+```
+
+Parameterized version of [`forceBasechain(){:tact}`](#forcebasechain).
+
+Checks whether the `address` is in the `workchain`, i.e., its [chain ID](https://docs.ton.org/learn/overviews/addresses#workchain-id) is equal to `workchain`. If it is not, throws an exception with exit code `errorCode`.
+
+Usage examples:
+
+```tact
+let someBasechainAddress: Address =
+ newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
+
+let someMasterchainAddress: Address =
+ newAddress(-1, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
+
+// Does not throw because the chain ID matches workchain parameter
+forceWorkchain(someBasechainAddress, 0, 593);
+forceWorkchain(someMasterchainAddress, -1, 593);
+
+try {
+ // Throws because the chain ID is 0 which doesn't match the workchain parameter, -1
+ forceWorkchain(someBasechainAddress, -1, 593);
+} catch (exitCode) {
+ // exitCode is 593
+}
+```
+
+## parseStdAddress
+
+
+
+```tact
+fun parseStdAddress(slice: Slice): StdAddress;
+```
+
+Converts a `slice` containing an address into the `StdAddress{:tact}` [struct][struct] and returns it.
+
+The `StdAddress{:tact}` is a built-in struct that consists of:
+
+Field | Type | Description
+:---------- | :----------------------------- | :----------
+`workchain` | [`Int as int8{:tact}`][int] | Workchain ID of the address, usually $0$ (basechain) or $-1$ (masterchain)
+`address` | [`Int as uint256{:tact}`][int] | Address in the specified `workchain`
+
+Attempts to pass a [`Slice{:tact}`][slice] with a layout different from the `StdAddress{:tact}` or to load more data than the given [`Slice{:tact}`][slice] contains throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
+
+Usage example:
+
+```tact
+let addr = address("EQDtFpEwcFAEcRe5mLVh2N6C0x-_hJEM7W61_JLnSF74p4q2");
+let parsedAddr = parseStdAddress(addr.asSlice());
+
+parsedAddr.workchain; // 0
+parsedAddr.address; // 107...lots of digits...287
+
+// Using newAddress() function with the contents of StdAddress will yield the initial Address:
+let addr2: Address = newAddress(parsedAddr.workchain, parsedAddr.address);
+addr2 == addr; // true
+```
+
+:::note
+
+ For parsing addresses of variable length, see the [`parseVarAddress(){:tact}`](#parsevaraddress) function.
+
+:::
+
+## parseVarAddress
+
+
+
+```tact
+fun parseVarAddress(slice: Slice): VarAddress;
+```
+
+Converts a `slice` containing an address of variable length into the `VarAddress{:tact}` [struct][struct] and returns it.
+
+The `VarAddress{:tact}` is a built-in struct consisting of:
+
+Field | Type | Description
+:---------- | :--------------------------- | :----------
+`workchain` | [`Int as int32{:tact}`][int] | Workchain ID of the variable-length address
+`address` | [`Slice{:tact}`][slice] | Address in the specified `workchain`
+
+Attempts to pass a [`Slice{:tact}`][slice] with a layout different from the `VarAddress{:tact}` or to load more data than the given [`Slice{:tact}`][slice] contains throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
+
+Usage example:
+
+```tact
+let varAddrSlice = beginCell()
+ .storeUint(6, 3) // to recognize the following as a VarAddress
+ .storeUint(123, 9) // make address occupy 123 bits
+ .storeUint(234, 32) // specify workchain ID of 234
+ .storeUint(345, 123) // specify address of 345
+ .asSlice();
+let parsedVarAddr = parseVarAddress(varAddrSlice);
+
+parsedVarAddr.workchain; // 234
+parsedVarAddr.address; // CS{Cell{002...2b3} bits: 44..167; refs: 0..0}
+parsedVarAddr.address.loadUint(123); // 345
+```
+
+:::caution
+
+ Variable-length addresses are intended for future extensions, and while validators must be ready to accept them in inbound messages, the standard (non-variable) addresses are used whenever possible.
+
+:::
+
+## StateInit.hasSameBasechainAddress
+
+
+
+```tact
+extends fun hasSameBasechainAddress(self: StateInit, sender: Address): Bool;
+```
+
+Extension function for the [`StateInit{:tact}`][initpkg] [struct][struct].
+
+Efficiently compares whether the given address matches the basechain address of the contract. Returns true if the addresses are the same; false otherwise.
+
+```tact
+fun example() {
+ let init = initOf SomeContract();
+ init.hasSameBasechainAddress(sender()); // returns true if sender matches contract's basechain address
+}
+```
+
+This function provides a gas-optimized implementation compared to direct address comparison:
+
+```tact
+fun example() {
+ let init = initOf SomeContract();
+ sender() == contractAddress(sender()); // less efficient approach
+}
+```
+
+:::note
+ This function works only for basechain addresses!
+:::
+
+## Address.asSlice
+
+```tact
+extends fun asSlice(self: Address): Slice;
+```
+
+Extension function for the [`Address{:tact}`][p] type.
+
+Casts the [`Address{:tact}`][p] back to the underlying [`Slice{:tact}`][slice] and returns it. The inverse of [`Slice.asAddressUnsafe(){:tact}`](/ref/core-cells#sliceasaddressunsafe).
+
+Usage example:
+
+```tact
+let a: Address = myAddress();
+let fizz: Slice = beginCell().storeAddress(a).asSlice();
+let buzz: Slice = a.asSlice(); // cheap, unlike the previous statement
+
+fizz == buzz; // true
+```
+
+## Address.toString
+
+
+
+```tact
+extends fun toString(self: Address): String;
+```
+
+Extension function for the [`Address{:tact}`][p] type.
+
+Returns a [`String{:tact}`][p] from an [`Address{:tact}`][p].
+
+Usage example:
+
+```tact
+let community: Address = address("UQDpXLZKrkHsOuE_C1aS69C697wE568vTnqSeRfBXZfvmVOo");
+let fizz: String = community.toString();
+```
+
+[p]: /book/types#primitive-types
+[bool]: /book/types#booleans
+[int]: /book/integers
+[nano]: /book/integers#nanotoncoin
+[cell]: /book/cells#cells
+[slice]: /book/cells#slices
+[struct]: /book/structs-and-messages#structs
+[opt]: /book/optionals
+
+[initpkg]: /book/expressions#initof
+
+[fwdfee]: https://docs.ton.org/develop/howto/fees-low-level#forward-fees
+[workchain-id]: https://docs.ton.org/learn/overviews/addresses#workchain-id
+[account-id]: https://docs.ton.org/learn/overviews/addresses#account-id
diff --git a/docs/src/content/docs/ref/core-advanced.mdx b/docs/src/content/docs/ref/core-advanced.mdx
deleted file mode 100644
index 404eb5fe2..000000000
--- a/docs/src/content/docs/ref/core-advanced.mdx
+++ /dev/null
@@ -1,837 +0,0 @@
----
-title: Advanced
-description: "Advanced, niche, or dangerous functions from the Core library of Tact"
----
-
-import { Badge } from '@astrojs/starlight/components';
-
-Various niche, dangerous, or unstable features which can produce unexpected results and are meant to be used by more experienced users.
-
-:::caution
-
- Proceed with caution.
-
-:::
-
-## gasConsumed
-
-
-
-```tact
-fun gasConsumed(): Int;
-```
-
-Returns the [nanoToncoin][nanotoncoin] [`Int{:tact}`][int] amount of [gas][gas] consumed by [TVM][tvm] in the current transaction so far. The resulting value includes the cost of calling this function.
-
-Usage example:
-
-```tact
-let gas: Int = gasConsumed();
-```
-
-:::note[Useful links:]
-
- [Gas in TON Docs][gas]
-
-:::
-
-## myStorageDue
-
-
-
-```tact
-fun myStorageDue(): Int;
-```
-
-Returns the [nanoToncoin][nanotoncoin] [`Int{:tact}`][int] amount of the accumulated [storage fee][storage-fee] debt. Storage fees are deducted from the incoming message value before the new contract balance is calculated.
-
-Usage example:
-
-```tact
-let debt: Int = myStorageDue();
-```
-
-:::note[Useful links:]
-
- [Storage fee in TON Docs][storage-fee]\
- [Storage fee calculation in TON Docs][storage-fee-calc]
-
-:::
-
-## getStorageFee
-
-
-
-```tact
-fun getStorageFee(cells: Int, bits: Int, seconds: Int, isMasterchain: Bool): Int;
-```
-
-Calculates and returns the [storage fee][storage-fee] in [nanoToncoin][nanotoncoin] [`Int{:tact}`][int] for storing a contract with a given number of `cells` and `bits` for a number of `seconds`. Uses the prices of the [masterchain][masterchain] if `isMasterchain` is `true{:tact}`, otherwise the prices of the [basechain][basechain]. The current prices are obtained from [config param 18 of TON Blockchain](https://docs.ton.org/develop/howto/blockchain-configs#param-18).
-
-Note that specifying values of `cells` and `bits` higher than their maximum values listed in [account state limits (`max_acc_state_cells` and `max_acc_state_bits`)](/book/exit-codes#50) will have the same result as specifying the exact limits. In addition, make sure you take into account the [deduplication of cells with the same hash][deduplication].
-
-Attempts to specify a negative number of `cells`, `bits`, or `seconds` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-let fee: Int = getStorageFee(1_000, 1_000, 1_000, false);
-// ----- ----- ----- -----
-// ↑ ↑ ↑ ↑
-// | | | Isn't on the masterchain,
-// | | | but on the basechain
-// | | Number of seconds to calculate
-// | | the storage fee for
-// | Number of bits in a contract
-// Number of cells in a contract
-```
-
-:::note[Useful links:]
-
- [Storage fee in TON Docs][storage-fee]\
- [Storage fee calculation in TON Docs][storage-fee-calc]
-
-:::
-
-## getComputeFee
-
-
-
-```tact
-fun getComputeFee(gasUsed: Int, isMasterchain: Bool): Int;
-```
-
-Calculates and returns the [compute fee][compute-fee] in [nanoToncoin][nanotoncoin] [`Int{:tact}`][int] for a transaction that consumed a `gasUsed` amount of [gas][gas]. Uses the prices of the [masterchain][masterchain] if `isMasterchain` is `true{:tact}`, otherwise the prices of the [basechain][basechain]. The current prices are obtained from [config param 20 for the masterchain and config param 21 for the basechain][param-20-21] of TON Blockchain.
-
-When `gasUsed` is less than a certain threshold called [`flat_gas_limit`][param-20-21], there's a minimum price to pay based on the value of [`flat_gas_price`][param-20-21]. The less gas used below this threshold, the higher the minimum price will be. See the example for [`getSimpleComputeFee(){:tact}`](#getsimplecomputefee) to derive that threshold.
-
-Attempts to specify a negative value of `gasUsed` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-let fee: Int = getComputeFee(1_000, false);
-// ----- -----
-// ↑ ↑
-// | Isn't on the masterchain,
-// | but on the basechain
-// Number of gas units
-// consumed per transaction
-```
-
-:::note[Useful links:]
-
- [Compute fee in TON Docs][compute-fee]\
- [Compute fee calculation in TON Docs][compute-fee-calc]\
- [`getSimpleComputeFee(){:tact}`](#getsimplecomputefee)
-
-:::
-
-## getSimpleComputeFee
-
-
-
-```tact
-fun getSimpleComputeFee(gasUsed: Int, isMasterchain: Bool): Int;
-```
-
-Similar to [`getComputeFee(){:tact}`](#getcomputefee), but without the [`flat_gas_price`][param-20-21], i.e. without the minimum price to pay if `gasUsed` is less than a certain threshold called [`flat_gas_limit`][param-20-21]. Calculates and returns only the `gasUsed` multiplied by the current gas price.
-
-Attempts to specify a negative value for `gasUsed` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-let fee = getComputeFee(0, false);
-let feeNoFlat = getSimpleComputeFee(0, false);
-let maxFlatPrice = fee - feeNoFlat;
-```
-
-:::note[Useful links:]
-
- [Compute fee in TON Docs][compute-fee]\
- [Compute fee calculation in TON Docs][compute-fee-calc]\
- [`getComputeFee(){:tact}`](#getcomputefee)
-
-:::
-
-## Context.readForwardFee
-
-```tact
-extends fun readForwardFee(self: Context): Int;
-```
-
-Extension function for the [`Context{:tact}`](/ref/core-common#context).
-
-Reads the [forward fee][forward-fee] and returns it as an [`Int{:tact}`][int] amount of [nanoToncoins][nanotoncoin].
-
-Usage example:
-
-```tact
-let fwdFee: Int = context().readForwardFee();
-```
-
-:::note[Useful links:]
-
- [`getOriginalFwdFee(){:tact}`](#getoriginalfwdfee)
-
-:::
-
-## getForwardFee
-
-
-
-```tact
-fun getForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int;
-```
-
-Calculates and returns the [forward fee][forward-fee] in [nanoToncoins][nanotoncoin] as an [`Int{:tact}`][int] for an outgoing message consisting of a given number of `cells` and `bits`. Uses the prices of the [masterchain][masterchain] if `isMasterchain` is `true{:tact}`, or the prices of the [basechain][basechain] otherwise. The current prices are obtained from [config param 24 for the masterchain and config param 25 for the basechain][param-24-25] of TON Blockchain.
-
-If both the source and the destination addresses are on the [basechain][basechain], specify `isMasterchain` as `false{:tact}`. Otherwise, specify `true{:tact}`.
-
-Note that specifying values of `cells` and `bits` higher than their maximum values listed in [account state limits (`max_msg_cells` and `max_msg_bits`)](/book/exit-codes#50) will have the same result as specifying the exact limits.
-
-However, regardless of the values of `cells` and `bits`, this function always adds the minimum price based on the value of [`lump_price`][param-24-25]. See the example for [`getSimpleForwardFee(){:tact}`](#getsimpleforwardfee) to derive it. In addition, make sure you account for the [deduplication of cells with the same hash][deduplication]; for example, the root cell and its data bits do not count toward the forward fee and are covered by the [`lump_price`][param-24-25].
-
-Attempts to specify a negative number of `cells` or `bits` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-let fee: Int = getForwardFee(1_000, 1_000, false);
-// ----- ----- -----
-// ↑ ↑ ↑
-// | | Both source and destination
-// | | are not on the masterchain,
-// | | but on the basechain
-// | Number of bits in a message
-// Number of cells in a message
-```
-
-:::note[Useful links:]
-
- [Forward fee in TON Docs][forward-fee]\
- [Forward fee calculation in TON Docs][forward-fee-calc]\
- [`CDATASIZEQ` instruction for computing the number of distinct cells, data bits and refs in a `Cell{:tact}`](https://docs.ton.org/v3/documentation/tvm/instructions#F940)\
- [`getSimpleForwardFee(){:tact}`](#getsimpleforwardfee)\
- [`getOriginalFwdFee(){:tact}`](#getoriginalfwdfee)
-
-:::
-
-## getSimpleForwardFee
-
-
-
-```tact
-fun getSimpleForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int;
-```
-
-Similar to [`getForwardFee(){:tact}`](#getforwardfee), but without the [`lump_price`][param-24-25], i.e. without the minimum price to pay regardless of the amounts of `cells` or `bits`. Calculates and returns only the `cells` multiplied by the current cell price plus the `bits` multiplied by the current bit price.
-
-Attempts to specify a negative number of `cells` or `bits` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-let fee = getForwardFee(1_000, 1_000, false);
-let feeNoLump = getSimpleForwardFee(1_000, 1_000, false);
-let lumpPrice = fee - feeNoLump;
-```
-
-:::note[Useful links:]
-
- [Forward fee in TON Docs][forward-fee]\
- [Forward fee calculation in TON Docs][forward-fee-calc]\
- [`getForwardFee(){:tact}`](#getforwardfee)
-
-:::
-
-## getOriginalFwdFee
-
-
-
-```tact
-fun getOriginalFwdFee(fwdFee: Int, isMasterchain: Bool): Int;
-```
-
-Calculates and returns the so-called _original_ [forward fee][forward-fee] in [nanoToncoin][nanotoncoin] [`Int{:tact}`][int] for an outgoing message based on the `fwdFee` obtained from the incoming message. If both the source and the destination addresses are in the [basechain][basechain], specify `isMasterchain` as `false{:tact}`. Otherwise, specify `true{:tact}`.
-
-This function is useful when the outgoing message depends heavily on the structure of the incoming message, so much so that you cannot fully predict the fee using [`getForwardFee(){:tact}`](#getforwardfee) alone. Even if you could, calculating the exact fee with [nanoToncoin][nanotoncoin]-level precision can be very expensive, so the approximation given by this function is often good enough.
-
-Attempts to specify a negative value of `fwdFee` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-let fwdFee: Int = context().readForwardFee();
-let origFee: Int = getOriginalFwdFee(fwdFee, false);
-```
-
-:::note[Useful links:]
-
- [Forward fee in TON Docs][forward-fee]\
- [Forward fee calculation in TON Docs][forward-fee-calc]\
- [`getForwardFee(){:tact}`](#getforwardfee)\
- [`Context.readForwardFee(){:tact}`](#contextreadforwardfee)
-
-:::
-
-## setGasLimit
-
-
-
-```tact
-fun setGasLimit(limit: Int);
-```
-
-Sets the [`gas_limit`][param-20-21] to the [`Int{:tact}`][int] `limit` and resets the [`gas_credit`][param-20-21] to $0$. Note that specifying a `limit` higher than the maximum allowed value of $2^{63} - 1$ will have the same result as specifying that exact maximum or calling [`acceptMessage(){:tact}`](#acceptmessage).
-
-Attempts to specify a negative or insufficient value of `limit` will cause an exception with [exit code -14](/book/exit-codes#-14): `Out of gas error`.
-
-Usage example:
-
-```tact
-setGasLimit(42000);
-```
-
-:::note
-
- For more details, see: [Accept Message Effects in TON Docs](https://docs.ton.org/develop/smart-contracts/guidelines/accept).
-
-:::
-
-## acceptMessage
-
-```tact
-fun acceptMessage();
-```
-
-Agrees to buy some [gas][gas] to finish the current transaction by setting the [`gas_limit`][param-20-21] to its maximum allowed value of $2^{63}-1$ and resetting the [`gas_credit`][param-20-21] to $0$. This action is required to process external messages, which bring no value (hence no gas) with them.
-
-Usage example:
-
-```tact {10}
-contract Timeout {
- timeout: Int;
-
- init() {
- self.timeout = now() + 5 * 60; // 5 minutes from now
- }
-
- external("timeout") {
- if (now() > self.timeout) {
- acceptMessage(); // start accepting external messages once timeout has passed
- }
- }
-}
-```
-
-:::note
-
- For more details, see: [Accept Message Effects in TON Docs](https://docs.ton.org/develop/smart-contracts/guidelines/accept).
-
-:::
-
-## commit
-
-```tact
-fun commit();
-```
-
-Commits the current state of [registers][registers] `c4` (persistent data) and `c5` (actions), so that the current execution is considered "successful" with the saved values even if an exception in the compute phase is thrown later.
-
-Usage example:
-
-```tact {1}
-commit(); // now, transaction is considered "successful"
-throw(42); // and this won't fail it
-```
-
-## myCode
-
-
-
-```tact
-fun myCode(): Cell;
-```
-
-Returns the smart contract code [`Cell{:tact}`][cell] obtained from the `c7` [register][registers].
-
-Usage example:
-
-```tact
-let code: Cell = myCode();
-```
-
-## getConfigParam
-
-```tact
-fun getConfigParam(id: Int): Cell?;
-```
-
-Loads a [configuration parameter](https://docs.ton.org/develop/howto/blockchain-configs) of TON Blockchain by its `id` number.
-
-Usage examples:
-
-```tact
-// Parameter 0, address of a special smart contract that stores the blockchain's configuration
-let configAddrAsCell: Cell = getConfigParam(0)!!;
-
-// Parameter 18, configuration for determining the prices for data storage
-let dataStorageFeeConfig: Cell = getConfigParam(18)!!;
-```
-
-:::note
-
- The standard library [`@stdlib/config`](/ref/stdlib-config) provides two related helper functions:\
- [`getConfigAddress(){:tact}`](/ref/stdlib-config#getconfigaddress) for retrieving config [`Address{:tact}`][p]\
- [`getElectorAddress(){:tact}`](/ref/stdlib-config#getconfigaddress) for retrieving elector [`Address{:tact}`][p]
-
- Read more about other parameters: [Config Parameters in TON Docs](https://docs.ton.org/develop/howto/blockchain-configs).
-
-:::
-
-## getSeed
-
-
-
-```tact
-fun getSeed(): Int;
-```
-
-Generates and returns an unsigned $256$-bit [`Int{:tact}`][int] [seed][seed] for the random number generator. The resulting seed is commonly used with the [`setSeed(){:tact}`](#setseed) and [`nativeRandomize(){:tact}`](#nativerandomize) functions.
-
-Usage example:
-
-```tact
-let seed: Int = getSeed();
-setSeed(seed); // From now on, the results of the pseudorandom number generator
- // are completely determined by the seed, which can be handy in tests,
- // but must not be used in production code!
-```
-
-:::note[Useful links:]
-
- [Random seed in Wikipedia][seed]\
- [`setSeed(){:tact}`](#setseed)\
- [`nativeRandomize(){:tact}`](#nativerandomize)
-
-:::
-
-## setSeed
-
-
-
-```tact
-fun setSeed(seed: Int);
-```
-
-Sets the [seed][seed] of the random number generator to the unsigned $256$-bit [`Int{:tact}`][int] `seed`, which can be obtained with the [`getSeed(){:tact}`](#getseed) function.
-
-Attempts to specify a negative value for `seed` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-let seed: Int = getSeed();
-setSeed(seed); // From now on, the results of the pseudorandom number generator
- // are completely determined by the seed, which can be handy in tests,
- // but must not be used in production code!
-```
-
-:::note[Useful links:]
-
- [Random seed in Wikipedia][seed]\
- [`getSeed(){:tact}`](#getseed)
-
-:::
-
-## curLt
-
-
-
-```tact
-fun curLt(): Int;
-```
-
-Returns the [`Int{:tact}`][int] value of the [logical time][lt] of the current transaction.
-
-Usage example:
-
-```tact
-let lt: Int = curLt();
-nativeRandomize(lt); // Equivalent to calling nativeRandomizeLt()
-```
-
-:::note[Useful links:]
-
- [Random seed in Wikipedia][seed]\
- [`nativeRandomize{:tact}`](#nativerandomize)\
- [`nativeRandomizeLt{:tact}`](#nativerandomizelt)
-
-:::
-
-## blockLt
-
-
-
-```tact
-fun blockLt(): Int;
-```
-
-Returns the [`Int{:tact}`][int] value of the [starting logical time][lt] of the current block.
-
-Usage example:
-
-```tact
-let time: Int = blockLt();
-```
-
-## nativePrepareRandom
-
-```tact
-fun nativePrepareRandom();
-```
-
-Prepares the random number generator by using [`nativeRandomizeLt(){:tact}`](#nativerandomizelt). Automatically called by the [`randomInt(){:tact}`](/ref/core-random#randomint) and [`random(){:tact}`](/ref/core-random#random) functions.
-
-Usage example:
-
-```tact
-nativePrepareRandom(); // Prepare the RNG
-// ... do your random things ...
-```
-
-## nativeRandomize
-
-```tact
-fun nativeRandomize(x: Int);
-```
-
-Randomizes the pseudorandom number generator with the specified unsigned $256$-bit [`Int{:tact}`][int] `x` by mixing it with the current [seed][seed]. The new seed is the unsigned $256$-bit [`Int{:tact}`][int] value of the [SHA-256][sha-2] hash of the concatenated old seed and `x` in their $32$-byte strings [big-endian](https://en.wikipedia.org/wiki/Endianness) representation.
-
-Attempts to specify a negative value for `x` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
-
-Usage example:
-
-```tact
-nativeRandomize(42); // Now, random numbers are less predictable
-let idk: Int = randomInt(); // ???, it's random,
- // but the seed was adjusted deterministically!
-```
-
-:::note[Useful links:]
-
- [Random seed in Wikipedia][seed]
-
-:::
-
-## nativeRandomizeLt
-
-```tact
-fun nativeRandomizeLt();
-```
-
-Randomizes the random number generator with the [logical time][lt] of the current transaction. Equivalent to calling `nativeRandomize(curLt()){:tact}`.
-
-Usage example:
-
-```tact
-nativeRandomizeLt(); // Now, random numbers are unpredictable for users,
- // but still may be affected by validators or collators
- // as they determine the seed of the current block.
-let idk: Int = randomInt(); // ???, it's random!
-```
-
-:::note[Useful links:]
-
- [Random seed in Wikipedia][seed]\
- [`nativeRandomize{:tact}`](#nativerandomize)\
- [`curLt(){:tact}`](#curlt)
-
-:::
-
-## nativeRandom
-
-```tact
-fun nativeRandom(): Int;
-```
-
-Generates and returns a $256$-bit random number just like [`randomInt(){:tact}`](/ref/core-random#randomint) but does not initialize the random generator with [`nativePrepareRandom(){:tact}`](#nativepreparerandom) beforehand.
-
-:::note
-
- Do not use this function directly — prefer using [`randomInt(){:tact}`](/ref/core-random#randomint) instead.
-
-:::
-
-## nativeRandomInterval
-
-```tact
-fun nativeRandomInterval(max: Int): Int;
-```
-
-Generates and returns a $256$-bit random number in the range from $0$ to `max`, similar to [`random(){:tact}`](/ref/core-random#random), but doesn't initialize the random generator with [`nativePrepareRandom(){:tact}`](#nativepreparerandom) beforehand.
-
-:::note
-
- Don't use this function directly — prefer using [`random(){:tact}`](/ref/core-random#random) instead.
-
-:::
-
-## nativeSendMessage
-
-```tact
-fun nativeSendMessage(cell: Cell, mode: Int);
-```
-
-[Queues the message](/book/send#outbound-message-processing) to be sent by specifying the complete `cell` and the [message `mode`](/book/message-mode).
-
-Attempts to queue more than $255$ messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-:::note
-
- Prefer using the much more common and user-friendly [`send(){:tact}`](/ref/core-common#send) function unless you have complex logic that can't be expressed otherwise.
-
-:::
-
-## nativeSendMessageReturnForwardFee
-
-
-
-
-```tact
-fun nativeSendMessageReturnForwardFee(cell: Cell, mode: Int): Int;
-```
-
-Similar to [`nativeSendMessage(){:tact}`](#nativesendmessage), but also calculates and returns the [forward fee][forward-fee] in [nanoToncoins][nanotoncoin].
-
-Attempts to queue more than $255$ messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-## nativeReserve
-
-
-
-```tact
-fun nativeReserve(amount: Int, mode: Int);
-```
-
-Executes the native `RAWRESERVE` instruction with the specified amount and mode. The `RAWRESERVE` instruction creates an output action to reserve a specific amount of [nanoToncoin][nanotoncoin] from the remaining balance of the account.
-
-The `RAWRESERVE` instruction takes two arguments:
-* `amount`: The number of [nanoToncoin][nanotoncoin] to reserve.
-* `mode`: Determines the reservation behavior.
-
-The `RAWRESERVE` instruction is roughly equivalent to creating an outbound message carrying the specified `amount` of [nanoToncoin] (or `b - amount` [nanoToncoin][nanotoncoin], where `b` is the remaining balance) to oneself. This ensures that subsequent output actions cannot spend more money than the remainder.
-
-It is possible to use raw [`Int{:tact}`][int] values and manually provide them for the `mode`, but for your convenience, there's a set of constants you may use to construct the compound `mode` with ease. Take a look at the following tables for more information on base modes and optional flags.
-
-:::caution
-
- Currently, `amount` must be a non-negative integer, and `mode` must be in the range $0..31$, inclusive.
-
- Additionally, attempts to queue more than $255$ reservations in one transaction throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-:::
-
-### Base modes {#nativereserve-base-modes}
-
-The resulting `mode` value can have the following base modes:
-
-Mode value | Constant name | Description
----------: | :---------------------------- | -----------
-$0$ | `ReserveExact{:tact}` | Reserves exactly the specified `amount` of [nanoToncoins][nanotoncoin].
-$1$ | `ReserveAllExcept{:tact}` | Reserves all but the specified `amount` of [nanoToncoins][nanotoncoin].
-$2$ | `ReserveAtMost{:tact}` | Reserves at most the specified `amount` of [nanoToncoins][nanotoncoin].
-
-### Optional flags {#nativereserve-optional-flags}
-
-Additionally, the resulting `mode` can have the following optional flags added:
-
-Flag value | Constant name | Description
----------: | :--------------------------------- | -----------
-$+4$ | `ReserveAddOriginalBalance{:tact}` | Increases the `amount` by the original balance of the current account (before the compute phase), including all extra currencies.
-$+8$ | `ReserveInvertSign{:tact}` | Negates the `amount` value before performing the reservation.
-$+16$ | `ReserveBounceIfActionFail{:tact}` | Bounces the transaction if the reservation fails.
-
-### Combining modes with flags {#nativereserve-combining-modes-with-flags}
-
-To construct the [`Int{:tact}`][int] value for the `mode` parameter, combine base modes with optional flags by applying the [bitwise OR](/book/operators#binary-bitwise-or) operation:
-
-```tact
-nativeReserve(ton("0.1"), ReserveExact | ReserveBounceIfActionFail);
-// ---------- ----------------------------------------
-// ↑ ↑
-// | mode, which would bounce the transaction if exact reservation fails
-// amount of nanoToncoins to reserve
-```
-
-## forceBasechain
-
-
-
-```tact
-fun forceBasechain(address: Address);
-```
-
-Checks whether the `address` is in the basechain, i.e., its [chain ID](https://docs.ton.org/learn/overviews/addresses#workchain-id) is 0. If it is not, throws an exception with [exit code 138](/book/exit-codes#9): `Not a basechain address`.
-
-Usage examples:
-
-```tact
-let someBasechainAddress: Address =
- newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
-
-let someMasterchainAddress: Address =
- newAddress(-1, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
-
-// Does not throw because the chain ID is 0
-forceBasechain(someBasechainAddress);
-
-try {
- // Throws because the chain ID is -1 (masterchain)
- forceBasechain(someMasterchainAddress);
-} catch (exitCode) {
- // exitCode is 138
-}
-```
-
-## forceWorkchain
-
-
-
-```tact
-fun forceWorkchain(address: Address, workchain: Int, errorCode: Int);
-```
-
-Parameterized version of [`forceBasechain(){:tact}`](#forcebasechain).
-
-Checks whether the `address` is in the `workchain`, i.e., its [chain ID](https://docs.ton.org/learn/overviews/addresses#workchain-id) is equal to `workchain`. If it is not, throws an exception with exit code `errorCode`.
-
-Usage examples:
-
-```tact
-let someBasechainAddress: Address =
- newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
-
-let someMasterchainAddress: Address =
- newAddress(-1, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
-
-// Does not throw because the chain ID matches workchain parameter
-forceWorkchain(someBasechainAddress, 0, 593);
-forceWorkchain(someMasterchainAddress, -1, 593);
-
-try {
- // Throws because the chain ID is 0 which doesn't match the workchain parameter, -1
- forceWorkchain(someBasechainAddress, -1, 593);
-} catch (exitCode) {
- // exitCode is 593
-}
-```
-
-## parseStdAddress
-
-
-
-```tact
-fun parseStdAddress(slice: Slice): StdAddress;
-```
-
-Converts a `slice` containing an address into the `StdAddress{:tact}` [Struct][s] and returns it. The `StdAddress{:tact}` is a built-in [Struct][s] that consists of:
-
-Field | Type | Description
-:---------- | :----------------------------- | :----------
-`workchain` | [`Int as int8{:tact}`][int] | Workchain ID of the address, usually $0$ (basechain) or $-1$ (masterchain)
-`address` | [`Int as uint256{:tact}`][int] | Address in the specified `workchain`
-
-Attempts to pass a [`Slice{:tact}`][slice] with a layout different from the `StdAddress{:tact}` or to load more data than the given [`Slice{:tact}`][slice] contains throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
-
-Usage example:
-
-```tact
-let addr = address("EQDtFpEwcFAEcRe5mLVh2N6C0x-_hJEM7W61_JLnSF74p4q2");
-let parsedAddr = parseStdAddress(addr.asSlice());
-
-parsedAddr.workchain; // 0
-parsedAddr.address; // 107...lots of digits...287
-
-// Using newAddress() function with the contents of StdAddress will yield the initial Address:
-let addr2: Address = newAddress(parsedAddr.workchain, parsedAddr.address);
-addr2 == addr; // true
-```
-
-:::note
-
- For parsing addresses of variable length, see the [`parseVarAddress(){:tact}`](#parsevaraddress) function.
-
-:::
-
-## parseVarAddress
-
-
-
-```tact
-fun parseVarAddress(slice: Slice): VarAddress;
-```
-
-Converts a `slice` containing an address of variable length into the `VarAddress{:tact}` [Struct][s] and returns it. The `VarAddress{:tact}` is a built-in [Struct][s] consisting of:
-
-Field | Type | Description
-:---------- | :--------------------------- | :----------
-`workchain` | [`Int as int32{:tact}`][int] | Workchain ID of the variable-length address
-`address` | [`Slice{:tact}`][slice] | Address in the specified `workchain`
-
-Attempts to pass a [`Slice{:tact}`][slice] with a layout different from the `VarAddress{:tact}` or to load more data than the given [`Slice{:tact}`][slice] contains throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
-
-Usage example:
-
-```tact
-let varAddrSlice = beginCell()
- .storeUint(6, 3) // to recognize the following as a VarAddress
- .storeUint(123, 9) // make address occupy 123 bits
- .storeUint(234, 32) // specify workchain ID of 234
- .storeUint(345, 123) // specify address of 345
- .asSlice();
-let parsedVarAddr = parseVarAddress(varAddrSlice);
-
-parsedVarAddr.workchain; // 234
-parsedVarAddr.address; // CS{Cell{002...2b3} bits: 44..167; refs: 0..0}
-parsedVarAddr.address.loadUint(123); // 345
-```
-
-:::caution
-
- Variable-length addresses are intended for future extensions, and while validators must be ready to accept them in inbound messages, the standard (non-variable) addresses are used whenever possible.
-
-:::
-
-[p]: /book/types#primitive-types
-[bool]: /book/types#booleans
-[int]: /book/integers
-[cell]: /book/cells#cells
-[slice]: /book/cells#slices
-[s]: /book/structs-and-messages#structs
-[masterchain]: https://docs.ton.org/v3/documentation/smart-contracts/shards/shards-intro#masterchain
-[cell-hash]: /ref/core-cell#cellhash
-[nanotoncoin]: /book/integers#nanotoncoin
-
-[tvm]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
-[basechain]: https://docs.ton.org/v3/documentation/smart-contracts/addresses#workchain-id
-[deduplication]: https://docs.ton.org/v3/documentation/data-formats/tlb/library-cells
-[registers]: https://docs.ton.org/learn/tvm-instructions/tvm-overview#control-registers
-
-[storage-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees-low-level#storage-fee
-[storage-fee-calc]: https://docs.ton.org/v3/guidelines/smart-contracts/fee-calculation#storage-fee
-
-[gas]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees#gas
-[compute-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees-low-level#computation-fees
-[compute-fee-calc]: https://docs.ton.org/v3/guidelines/smart-contracts/fee-calculation#computation-fee
-[param-20-21]: https://docs.ton.org/v3/documentation/network/configs/blockchain-configs#param-20-and-21
-
-[forward-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/forward-fees
-[forward-fee-calc]: https://docs.ton.org/v3/guidelines/smart-contracts/fee-calculation#forward-fee
-[param-24-25]: https://docs.ton.org/v3/documentation/network/configs/blockchain-configs#param-24-and-25
-
-[lt]: https://docs.ton.org/v3/documentation/smart-contracts/message-management/messages-and-transactions#what-is-a-logical-time
-[seed]: https://en.wikipedia.org/wiki/Random_seed
-[sha-2]: https://en.wikipedia.org/wiki/SHA-2#Hash_standard
diff --git a/docs/src/content/docs/ref/core-base.mdx b/docs/src/content/docs/ref/core-base.mdx
index 559edb5d2..d4ee659be 100644
--- a/docs/src/content/docs/ref/core-base.mdx
+++ b/docs/src/content/docs/ref/core-base.mdx
@@ -98,7 +98,7 @@ In case the reservation attempt fails, or in the default case without the attemp
:::note
Note that `self.forward(){:tact}` never sends additional [nanoToncoins][nano] on top of what's available in the balance.\
- To send more [nanoToncoins][nano] with a single message, use the [`send(){:tact}`](/ref/core-common#send) function.
+ To send more [nanoToncoins][nano] with a single message, use the [`send(){:tact}`](/ref/core-send#send) function.
:::
diff --git a/docs/src/content/docs/ref/core-cells.mdx b/docs/src/content/docs/ref/core-cells.mdx
index 1136e9090..728c0c54c 100644
--- a/docs/src/content/docs/ref/core-cells.mdx
+++ b/docs/src/content/docs/ref/core-cells.mdx
@@ -1606,7 +1606,7 @@ Extension function for the [`Slice{:tact}`][slice] type.
Calculates and returns an [`Int{:tact}`][int] value of the [SHA-256][sha-2] hash of the data bits from the given [`Slice{:tact}`][slice], which should have a number of bits divisible by 8.
-Unlike [`sha256(){:tact}`](/ref/core-math#sha256), this function is gas-efficient and **only** hashes the data of the given [`Slice{:tact}`][slice], i.e. up to 1023 bits, ignoring the refs.
+Unlike [`sha256(){:tact}`](/ref/core-crypto#sha256), this function is gas-efficient and **only** hashes the data of the given [`Slice{:tact}`][slice], i.e. up to 1023 bits, ignoring the refs.
Attempts to specify a [`Slice{:tact}`][slice] with a number of bits **not** divisible by 8 throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
@@ -1653,6 +1653,49 @@ let buzz: Cell = beginCell().storeSlice(s).endCell();
fizz == buzz; // true
```
+### Slice.asString
+
+```tact
+extends fun asString(self: Slice): String;
+```
+
+Extension function for the [`Slice{:tact}`][slice] type.
+
+Casts the [`Slice{:tact}`][slice] to a [`String{:tact}`][p] and returns it. The inverse of [`String.asSlice(){:tact}`](/ref/core-strings#stringasslice).
+
+Usage example:
+
+```tact
+let s: String = "Keep your Slices close, but your Strings closer.";
+let fizz: String = s;
+let buzz: String = s.asSlice().asString();
+
+fizz == buzz; // true
+```
+
+### Slice.fromBase64
+
+
+
+```tact
+extends fun fromBase64(self: Slice): Slice;
+```
+
+Extension function for the [`Slice{:tact}`][slice] type.
+
+Returns a new [`Slice{:tact}`][slice] from the decoded [Base64](https://en.wikipedia.org/wiki/Base64) [`Slice{:tact}`][slice].
+
+Note that this function is limited and only takes the first 1023 bits of data from the given [`Slice{:tact}`][slice], without throwing an exception if the [`Slice{:tact}`][slice] has more data (i.e., when it has any references).
+
+If the given [`Slice{:tact}`][slice] contains characters not from the Base64 set, an exception with [exit code 134](/book/exit-codes#134) will be thrown: `Invalid argument`.
+
+Usage example:
+
+```tact
+let s: Slice = "SSBhbSBHcm9vdC4=".asSlice();
+let fizz: Slice = s.fromBase64();
+```
+
### Slice.asAddress
@@ -1663,7 +1706,7 @@ extends fun asAddress(self: Slice, chain: Int): Address;
Extension function for the [`Slice{:tact}`][slice] type.
-Casts the [`Slice{:tact}`][slice] to an [`Address{:tact}`][p] on a given `chain` ID and returns it. It is the inverse of [`Address.asSlice(){:tact}`](#addressasslice) and a safe but more gas-expensive version of [`Slice.asAddressUnsafe(){:tact}`](#sliceasaddressunsafe).
+Casts the [`Slice{:tact}`][slice] to an [`Address{:tact}`][p] on a given `chain` ID and returns it. It is the inverse of [`Address.asSlice(){:tact}`](/ref/core-addresses#addressasslice) and a safe but more gas-expensive version of [`Slice.asAddressUnsafe(){:tact}`](#sliceasaddressunsafe).
Attempts to specify a [`Slice{:tact}`][slice] with an invalid [account ID](https://docs.ton.org/learn/overviews/addresses#account-id) length throw an error with [exit code 136](/book/exit-codes#): `Invalid standard address`.
@@ -1694,7 +1737,7 @@ extends fun asAddressUnsafe(self: Slice): Address;
Extension function for the [`Slice{:tact}`][slice] type.
-Unsafely casts the [`Slice{:tact}`][slice] to an [`Address{:tact}`][p] and returns it. The inverse of [`Address.asSlice(){:tact}`](#addressasslice).
+Unsafely casts the [`Slice{:tact}`][slice] to an [`Address{:tact}`][p] and returns it. The inverse of [`Address.asSlice(){:tact}`](/ref/core-addresses#addressasslice).
This function does **not** perform any checks on the contents of the [`Slice{:tact}`][slice].
@@ -1715,26 +1758,6 @@ a == a2; // true
:::
-## Address.asSlice
-
-```tact
-extends fun asSlice(self: Address): Slice;
-```
-
-Extension function for the [`Address{:tact}`][p] type.
-
-Casts the [`Address{:tact}`][p] back to the underlying [`Slice{:tact}`][slice] and returns it. The inverse of [`Slice.asAddressUnsafe(){:tact}`](#sliceasaddressunsafe).
-
-Usage example:
-
-```tact
-let a: Address = myAddress();
-let fizz: Slice = beginCell().storeAddress(a).asSlice();
-let buzz: Slice = a.asSlice(); // cheap, unlike the previous statement
-
-fizz == buzz; // true
-```
-
## Struct.toCell
```tact
diff --git a/docs/src/content/docs/ref/core-common.mdx b/docs/src/content/docs/ref/core-common.mdx
deleted file mode 100644
index 488909aea..000000000
--- a/docs/src/content/docs/ref/core-common.mdx
+++ /dev/null
@@ -1,437 +0,0 @@
----
-title: Common
-description: "Commonly used global static functions from the Core library of Tact"
----
-
-import { Badge } from '@astrojs/starlight/components';
-
-List of the most commonly used built-in [global static functions](/book/functions#global-static-functions).
-
-## Contextual
-
-### now
-
-```tact
-fun now(): Int;
-```
-
-Returns the current [Unix time](https://en.wikipedia.org/wiki/Unix_time).
-
-Usage example:
-
-```tact
-let timeOffset: Int = now() + 1000; // thousand seconds from now()
-```
-
-### myBalance
-
-```tact
-fun myBalance(): Int;
-```
-
-Returns the [nanoToncoin](/book/integers#nanotoncoin) [`Int{:tact}`][int] balance of the smart contract as it was at the start of the [compute phase](https://docs.ton.org/learn/tvm-instructions/tvm-overview#compute-phase) of the current transaction.
-
-Usage example:
-
-```tact
-let iNeedADolla: Int = myBalance();
-```
-
-:::caution
-
- Beware that [all message-sending functions](/book/send#message-sending-functions) of Tact can change the _actual_ balance of the contract, but they **won't** update the value returned by this function.
-
-:::
-
-### myAddress
-
-```tact
-fun myAddress(): Address;
-```
-
-Returns the address of the current smart contract as an [`Address{:tact}`][p].
-
-Usage example:
-
-```tact
-let meMyselfAndI: Address = myAddress();
-```
-
-### sender
-
-```tact
-fun sender(): Address;
-```
-
-Returns the [`Address{:tact}`][p] of the sender of the current message.
-
-Usage example:
-
-```tact
-contract MeSee {
- receive() {
- let whoSentMeMessage: Address = sender();
- }
-}
-```
-
-:::caution
-
- Behavior is undefined for [getter functions](/book/contracts#getter-functions), because they cannot have a sender nor can they send messages.
-
-:::
-
-:::note
-
- In order to reduce gas usage, prefer using this function over calling [`context().sender{:tact}`](#context) when you only need to know the sender of the message.
-
-:::
-
-### context
-
-```tact
-fun context(): Context;
-```
-
-Returns `Context{:tact}` [struct](/book/structs-and-messages#structs), which consists of:
-
-Field | Type | Description
-:----------- | :---------------------- | :----------
-`bounceable` | [`Bool{:tact}`][bool] | Indicates whether the received message can [bounce back](https://docs.ton.org/v3/documentation/smart-contracts/message-management/non-bounceable-messages).
-`sender` | [`Address{:tact}`][p] | Internal address of the sender on the TON blockchain.
-`value` | [`Int{:tact}`][int] | Amount of [nanoToncoins](/book/integers#nanotoncoin) in the received message.
-`raw` | [`Slice{:tact}`][slice] | The remainder of the received message as a [`Slice{:tact}`][slice]. It follows the [internal message layout](https://docs.ton.org/develop/smart-contracts/messages#message-layout) of TON, starting from the destination [`Address{:tact}`][p] (`MsgAddressInt` in [TL-B notation](https://docs.ton.org/develop/data-formats/tl-b-language)).
-
-Usage example:
-
-```tact
-let ctx: Context = context();
-require(ctx.value != 68 + 1, "Invalid amount of nanoToncoins, bye!");
-```
-
-:::note
-
- If you only need to know who sent the message, use the [`sender(){:tact}`](#sender) function, as it is less gas-consuming.
-
-:::
-
-## Addressing
-
-### newAddress
-
-
-
-```tact
-fun newAddress(chain: Int, hash: Int): Address;
-```
-
-Creates a new [`Address{:tact}`][p] based on the [`chain` ID][workchain-id] and the [SHA-256](/ref/core-math#sha256) encoded [`hash` value (account ID)][account-id].
-
-This function tries to resolve constant values at [compile-time](/ref/core-comptime) whenever possible.
-
-Attempts to specify an invalid `chain` ID (not $-1$ or $0$) detectable at [compile-time](/ref/core-comptime) will result in a compilation error.
-
-Usage example:
-
-```tact
-let oldTonFoundationAddr: Address =
- newAddress(0, 0x83dfd552e63729b472fcbcc8c45ebcc6691702558b68ec7527e1ba403a0f31a8);
- // ↑ ↑
- // | SHA-256 hash of contract's init package (StateInit)
- // chain ID: 0 is a workchain, -1 is a masterchain
-```
-
-:::caution
-
- Make sure you specify only supported workchain IDs: $0$ for the basechain and $-1$ for the masterchain.
-
-:::
-
-:::note[Useful links:]
-
- [`chain` (Workchain ID) in TON Docs][workchain-id]\
- [`hash` (Account ID) in TON Docs][account-id]\
- [Contract's init package (`StateInit{:tact}`)](/book/expressions#initof)
-
-:::
-
-### hasSameBasechainAddress
-
-
-
-```tact
-extends fun hasSameBasechainAddress(self: StateInit, sender: Address): Bool;
-```
-
-Efficiently compares whether the given address matches the basechain address of the contract. Returns true if the addresses are the same; false otherwise.
-
-```tact
-fun example() {
- let init = initOf SomeContract();
- init.hasSameBasechainAddress(sender()); // returns true if sender matches contract's basechain address
-}
-```
-
-This function provides a gas-optimized implementation compared to direct address comparison:
-
-```tact
-fun example() {
- let init = initOf SomeContract();
- sender() == contractAddress(sender()); // less efficient approach
-}
-```
-
-:::note
- This function works only for basechain addresses!
-:::
-
-### contractAddress
-
-
-
-```tact
-fun contractAddress(s: StateInit): Address;
-```
-
-Computes the smart contract's [`Address{:tact}`][p] in the workchain ID $0$ (basechain) using the [`StateInit{:tact}`](/book/expressions#initof) `s` of the contract. An alias to `contractAddressExt(0, s.code, s.data){:tact}`.
-
-Usage example:
-
-```tact
-let s: StateInit = initOf SomeContract();
-let foundMeSome: Address = contractAddress(s);
-let andSomeMore: Address = contractAddressExt(0, s.code, s.data);
-
-foundMeSome == andSomeMore; // true
-```
-
-### contractAddressExt
-
-
-
-```tact
-fun contractAddressExt(chain: Int, code: Cell, data: Cell): Address;
-```
-
-Computes the smart contract's [`Address{:tact}`][p] in the given `chain` ID using the contract's `code` and its initial state `data`. Use the [`initOf{:tact}`](/book/expressions#initof) expression to obtain the initial `code` and initial `data` of a given contract.
-
-This function tries to resolve constant values at [compile-time](/ref/core-comptime) whenever possible.
-
-Attempts to specify an invalid `chain` ID (not $-1$ or $0$) that can be detected at [compile-time](/ref/core-comptime) will result in a compilation error.
-
-Usage example:
-
-```tact
-let initPkg: StateInit = initOf SomeContract();
-let hereBeDragons: Address = contractAddressExt(0, initPkg.code, initPkg.data);
-```
-
-### contractHash
-
-
-
-```tact
-fun contractHash(code: Cell, data: Cell): Int;
-```
-
-Computes and returns an [`Int{:tact}`][int] value of the [SHA-256](https://en.wikipedia.org/wiki/SHA-2#Hash_standard) hash of the `code` and `data` of the given contract. To assemble the `code` and `data` cells together for hashing, the [standard `Cell{:tact}` representation](/book/cells#cells-representation) is used.
-
-This hash is commonly called the [account ID][account-id]. Together with the [workchain ID][workchain-id], it deterministically forms the address of the contract on TON Blockchain.
-
-Usage example:
-
-```tact
-let initPkg: StateInit = initOf SomeContract();
-let accountId: Int = contractHash(initPkg.code, initPkg.data);
-let basechainAddr: Address = newAddress(0, accountId);
-let basechainAddr2: Address = contractAddressExt(0, initPkg.code, initPkg.data);
-
-basechainAddr == basechainAddr2; // true
-```
-
-:::note[Useful links:]
-
- [`chain` (Workchain ID) in TON Docs][workchain-id]\
- [`hash` (Account ID) in TON Docs][account-id]\
- [Contract's init package (`StateInit{:tact}`)](/book/expressions#initof)\
- [Standard `Cell{:tact}` representation](/book/cells#cells-representation)
-
-:::
-
-## Communication
-
-### send
-
-
-
-```tact
-fun send(params: SendParameters);
-```
-
-[Queues the message](/book/send#outbound-message-processing) to be sent using a [`SendParameters{:tact}`](/book/send) [Struct][struct].
-
-Attempts to queue more than $255$ messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-Usage example:
-
-```tact
-send(SendParameters{
- to: sender(), // back to the sender,
- value: ton("1"), // with 1 Toncoin (1_000_000_000 nanoToncoin),
- // and no message body
-});
-```
-
-:::note[Useful links:]
-
- [Sending messages in the Book](/book/send)\
- [Message `mode` in the Book](/book/message-mode)\
- [Single-contract communication in the Cookbook](/cookbook/single-communication)
-
-:::
-
-### message
-
-
-
-
-```tact
-fun message(params: MessageParameters);
-```
-
-[Queues the message](/book/send#outbound-message-processing) to be sent using the `MessageParameters{:tact}` [struct][struct]. Allows for cheaper non-deployment regular messages compared to the [`send(){:tact}`](#send) function.
-
-The `MessageParameters{:tact}` [struct][struct] is similar to the [`SendParameters{:tact}`](/book/send) [struct][struct], but without the `body` and `code` fields.
-
-Attempts to queue more than $255$ messages throw an exception with an [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-Usage example:
-
-```tact
-message(MessageParameters{
- to: sender(), // back to the sender,
- value: ton("1"), // with 1 Toncoin (1_000_000_000 nanoToncoin),
- // and no message body
-});
-```
-
-:::note[Useful links:]
-
- [Sending messages in the Book](/book/send)\
- [Message `mode` in the Book](/book/message-mode)
-
-:::
-
-### deploy
-
-
-
-
-```tact
-fun deploy(params: DeployParameters);
-```
-
-[Queues](/book/send#outbound-message-processing) the [contract deployment message](/book/deploy) to be sent using the `DeployParameters{:tact}` [struct][struct]. Allows for cheaper on-chain deployments compared to the [`send(){:tact}`](#send) function.
-
-The `DeployParameters{:tact}` [struct][struct] consists of the following fields:
-
-Field | Type | Description
-:------- | :---------------------------- | :----------
-`mode` | [`Int{:tact}`][int] | An 8-bit value that configures how to send a message, defaults to $0$. See: [Message `mode`](/book/message-mode).
-`body` | [`Cell?{:tact}`][cell] | [Optional][opt] message body as a [`Cell{:tact}`][cell].
-`value` | [`Int{:tact}`][int] | The amount of [nanoToncoins][nano] you want to send with the message. This value is used to cover [forward fees][fwdfee] unless the optional flag [`SendPayGasSeparately{:tact}`](/book/message-mode#optional-flags) is used.
-`bounce` | [`Bool{:tact}`][p] | When set to `true` (default), the message bounces back to the sender if the recipient contract doesn't exist or isn't able to process the message.
-`init` | [`StateInit{:tact}`][initpkg] | [Initial package][initpkg] of the contract (initial code and initial data). See: [`initOf{:tact}`][initpkg].
-
-Attempts to queue more than $255$ messages throw an exception with an [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-Usage example:
-
-```tact
-deploy(DeployParameters{
- init: initOf SomeContract(), // with initial code and data of SomeContract
- // and no additional message body
- mode: SendIgnoreErrors, // skip the message in case of errors
- value: ton("1"), // send 1 Toncoin (1_000_000_000 nanoToncoin)
-});
-```
-
-:::note[Useful links:]
-
- [Sending messages in the Book](/book/send)\
- [Message `mode` in the Book](/book/message-mode)
-
-:::
-
-### cashback
-
-
-
-
-```tact
-fun cashback(to: Address);
-```
-
-[Queues](/book/send#outbound-message-processing) an empty message to be sent with the [`SendRemainingValue{:tact}`](/book/message-mode#base-modes) mode with the [`SendIgnoreErrors{:tact}`](/book/message-mode/#optional-flags) to the destination address `to`. It is the most gas-efficient way to send the remaining value from the incoming message to the given address.
-
-Attempts to queue more than 255 messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-Usage examples:
-
-```tact
-// Forward the remaining value back to the sender
-cashback(sender());
-
-// The cashback() function above is cheaper, but functionally
-// equivalent to the following call to the message() function
-message(MessageParameters{
- mode: SendRemainingValue | SendIgnoreErrors,
- body: null,
- value: 0,
- to: sender(),
- bounce: false,
-});
-```
-
-### emit
-
-
-
-```tact
-fun emit(body: Cell);
-```
-
-[Queues the message](/book/send#outbound-message-processing) `body` to be sent to the outer world for the purpose of logging and analyzing it later off-chain. The message does not have a recipient and is more gas-efficient compared to using any other [message-sending functions](/book/send#message-sending-functions) of Tact.
-
-The message is sent with the default mode: [`SendDefaultMode`](/book/message-mode#base-modes) ($0$).
-
-Attempts to queue more than $255$ messages throw an exception with an [exit code 33](/book/exit-codes#33): `Action list is too long`.
-
-Usage example:
-
-```tact
-emit("Catch me if you can, Mr. Holmes".asComment()); // asComment() converts a String to a Cell
-```
-
-:::note
-
- To analyze `emit(){:tact}` calls, one must look at the [external messages](/book/external) produced by the contract.
-
- Read more: [Logging via `emit(){:tact}`](/book/debug#logging).
-
-:::
-
-[p]: /book/types#primitive-types
-[bool]: /book/types#booleans
-[int]: /book/integers
-[cell]: /book/cells#cells
-[slice]: /book/cells#slices
-[struct]: /book/structs-and-messages#structs
-[opt]: /book/optionals
-
-[nano]: /book/integers#nanotoncoin
-[initpkg]: /book/expressions#initof
-
-[fwdfee]: https://docs.ton.org/develop/howto/fees-low-level#forward-fees
-[workchain-id]: https://docs.ton.org/learn/overviews/addresses#workchain-id
-[account-id]: https://docs.ton.org/learn/overviews/addresses#account-id
diff --git a/docs/src/content/docs/ref/core-contextstate.mdx b/docs/src/content/docs/ref/core-contextstate.mdx
new file mode 100644
index 000000000..ad2b32379
--- /dev/null
+++ b/docs/src/content/docs/ref/core-contextstate.mdx
@@ -0,0 +1,373 @@
+---
+title: Context and state
+description: "Contextual and state-related functions and structs from the Core library of Tact"
+---
+
+import { Badge } from '@astrojs/starlight/components';
+
+Contextual and state-related functions and structs.
+
+## Time
+
+### now
+
+```tact
+fun now(): Int;
+```
+
+Returns the current [Unix time](https://en.wikipedia.org/wiki/Unix_time).
+
+Usage example:
+
+```tact
+let timeOffset: Int = now() + 1000; // thousand seconds from now()
+```
+
+### curLt
+
+
+
+```tact
+fun curLt(): Int;
+```
+
+Returns the [`Int{:tact}`][int] value of the [logical time][lt] of the current transaction.
+
+Usage example:
+
+```tact
+let lt: Int = curLt();
+nativeRandomize(lt); // Equivalent to calling nativeRandomizeLt()
+```
+
+:::note[Useful links:]
+
+ [Random seed in Wikipedia][seed]\
+ [`nativeRandomize{:tact}`](/ref/core-random#nativerandomize)\
+ [`nativeRandomizeLt{:tact}`](/ref/core-random#nativerandomizelt)\
+ [Other random-related functions in the Core library](/ref/core-random)
+
+:::
+
+### blockLt
+
+
+
+```tact
+fun blockLt(): Int;
+```
+
+Returns the [`Int{:tact}`][int] value of the [starting logical time][lt] of the current block.
+
+Usage example:
+
+```tact
+let time: Int = blockLt();
+```
+
+## Incoming message
+
+### sender
+
+```tact
+fun sender(): Address;
+```
+
+Returns the [`Address{:tact}`][p] of the sender of the current message.
+
+Usage example:
+
+```tact
+contract MeSee {
+ receive() {
+ let whoSentMeMessage: Address = sender();
+ }
+}
+```
+
+:::caution
+
+ Behavior is undefined for [getter functions](/book/contracts#getter-functions), because they cannot have a sender nor can they send messages.
+
+:::
+
+:::note
+
+ In order to reduce gas usage, prefer using this function over calling [`context().sender{:tact}`](#context) when you only need to know the sender of the message.
+
+:::
+
+### context
+
+```tact
+fun context(): Context;
+```
+
+Returns `Context{:tact}` [struct][struct], which consists of:
+
+Field | Type | Description
+:----------- | :---------------------- | :----------
+`bounceable` | [`Bool{:tact}`][bool] | Indicates whether the received message can [bounce back](https://docs.ton.org/v3/documentation/smart-contracts/message-management/non-bounceable-messages).
+`sender` | [`Address{:tact}`][p] | Internal address of the sender on the TON Blockchain.
+`value` | [`Int{:tact}`][int] | Amount of [nanoToncoin][nano] in the received message.
+`raw` | [`Slice{:tact}`][slice] | The remainder of the received message as a [`Slice{:tact}`][slice]. It follows the [internal message layout](https://docs.ton.org/develop/smart-contracts/messages#message-layout) of TON, starting from the destination [`Address{:tact}`][p] (`MsgAddressInt` in [TL-B notation](https://docs.ton.org/develop/data-formats/tl-b-language)).
+
+Usage example:
+
+```tact
+let ctx: Context = context();
+require(ctx.value != 68 + 1, "Invalid amount of nanoToncoins, bye!");
+```
+
+:::note
+
+ If you only need to know who sent the message, use the [`sender(){:tact}`](#sender) function, as it is less gas-consuming.
+
+:::
+
+### Context.readForwardFee
+
+```tact
+extends fun readForwardFee(self: Context): Int;
+```
+
+Extension function for the [`Context{:tact}`](#context) [struct][struct].
+
+Reads the [forward fee][forward-fee] and returns it as an [`Int{:tact}`][int] amount of [nanoToncoin][nano].
+
+Usage example:
+
+```tact
+let fwdFee: Int = context().readForwardFee();
+```
+
+:::note[Useful links:]
+
+ [`getOriginalFwdFee(){:tact}`](/ref/core-gas#getoriginalfwdfee)\
+ [Other fees and gas-related functions in the Core library](/ref/core-gas)
+
+:::
+
+## Contract and transaction state
+
+### myAddress
+
+```tact
+fun myAddress(): Address;
+```
+
+Returns the address of the current smart contract as an [`Address{:tact}`][p].
+
+Usage example:
+
+```tact
+let meMyselfAndI: Address = myAddress();
+```
+
+:::note[Useful links:]
+
+ [Other address-related functions in the Core library](/ref/core-addresses)
+
+:::
+
+### myCode
+
+
+
+```tact
+fun myCode(): Cell;
+```
+
+Returns the smart contract code [`Cell{:tact}`][cell] obtained from the `c7` [register][registers].
+
+Usage example:
+
+```tact
+let code: Cell = myCode();
+```
+
+### myStorageDue
+
+
+
+```tact
+fun myStorageDue(): Int;
+```
+
+Returns the [nanoToncoin][nano] [`Int{:tact}`][int] amount of the accumulated [storage fee][storage-fee] debt. Storage fees are deducted from the incoming message value before the new contract balance is calculated.
+
+Usage example:
+
+```tact
+let debt: Int = myStorageDue();
+```
+
+:::note[Useful links:]
+
+ [`getStorageFee(){:tact}`](/ref/core-gas#getstoragefee)\
+ [Other fees and gas-related functions in the Core library](/ref/core-gas)
+
+:::
+
+### myBalance
+
+```tact
+fun myBalance(): Int;
+```
+
+Returns the [nanoToncoin][nano] [`Int{:tact}`][int] balance of the smart contract as it was at the start of the [compute phase](https://docs.ton.org/learn/tvm-instructions/tvm-overview#compute-phase) of the current transaction.
+
+Usage example:
+
+```tact
+let iNeedADolla: Int = myBalance();
+```
+
+:::caution
+
+ Beware that [all message-sending functions](/book/send#message-sending-functions) of Tact can change the _actual_ balance of the contract, but they **won't** update the value returned by this function.
+
+:::
+
+### gasConsumed
+
+
+
+```tact
+fun gasConsumed(): Int;
+```
+
+Returns the [nanoToncoin][nano] [`Int{:tact}`][int] amount of [gas][gas] consumed by [TVM][tvm] in the current transaction so far. The resulting value includes the cost of calling this function.
+
+Usage example:
+
+```tact
+let gas: Int = gasConsumed();
+```
+
+:::note[Useful links:]
+
+ [Gas in TON Docs][gas]\
+ [Other fees and gas-related functions in the Core library](/ref/core-gas)
+
+:::
+
+### nativeReserve
+
+
+
+```tact
+fun nativeReserve(amount: Int, mode: Int);
+```
+
+Executes the native `RAWRESERVE` instruction with the specified amount and mode. The `RAWRESERVE` instruction creates an output action to reserve a specific amount of [nanoToncoin][nano] from the remaining balance of the account.
+
+The `RAWRESERVE` instruction takes two arguments:
+* `amount`: The number of [nanoToncoin][nano] to reserve.
+* `mode`: Determines the reservation behavior.
+
+The `RAWRESERVE` instruction is roughly equivalent to creating an outbound message carrying the specified `amount` of [nanoToncoin][nano] (or `b - amount` [nanoToncoin][nano], where `b` is the remaining balance) to oneself. This ensures that subsequent output actions cannot spend more money than the remainder.
+
+It is possible to use raw [`Int{:tact}`][int] values and manually provide them for the `mode`, but for your convenience, there's a set of constants you may use to construct the compound `mode` with ease. Take a look at the following tables for more information on base modes and optional flags.
+
+:::caution
+
+ Currently, `amount` must be a non-negative integer, and `mode` must be in the range $0..31$, inclusive.
+
+ Additionally, attempts to queue more than $255$ reservations in one transaction throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+:::
+
+#### Base modes {#nativereserve-base-modes}
+
+The resulting `mode` value can have the following base modes:
+
+Mode value | Constant name | Description
+---------: | :---------------------------- | -----------
+$0$ | `ReserveExact{:tact}` | Reserves exactly the specified `amount` of [nanoToncoin][nano].
+$1$ | `ReserveAllExcept{:tact}` | Reserves all but the specified `amount` of [nanoToncoin][nano].
+$2$ | `ReserveAtMost{:tact}` | Reserves at most the specified `amount` of [nanoToncoin][nano].
+
+#### Optional flags {#nativereserve-optional-flags}
+
+Additionally, the resulting `mode` can have the following optional flags added:
+
+Flag value | Constant name | Description
+---------: | :--------------------------------- | -----------
+$+4$ | `ReserveAddOriginalBalance{:tact}` | Increases the `amount` by the original balance of the current account (before the compute phase), including all extra currencies.
+$+8$ | `ReserveInvertSign{:tact}` | Negates the `amount` value before performing the reservation.
+$+16$ | `ReserveBounceIfActionFail{:tact}` | Bounces the transaction if the reservation fails.
+
+#### Combining modes with flags {#nativereserve-combining-modes-with-flags}
+
+To construct the [`Int{:tact}`][int] value for the `mode` parameter, combine base modes with optional flags by applying the [bitwise OR](/book/operators#binary-bitwise-or) operation:
+
+```tact
+nativeReserve(ton("0.1"), ReserveExact | ReserveBounceIfActionFail);
+// ---------- ----------------------------------------
+// ↑ ↑
+// | mode, which would bounce the transaction if exact reservation fails
+// amount of nanoToncoins to reserve
+```
+
+### commit
+
+```tact
+fun commit();
+```
+
+Commits the current state of [registers][registers] `c4` (persistent data) and `c5` (actions), so that the current execution is considered "successful" with the saved values even if an exception in the compute phase is thrown later.
+
+Usage example:
+
+```tact {1}
+commit(); // now, transaction is considered "successful"
+throw(42); // and this won't fail it
+```
+
+## Blockchain state
+
+### getConfigParam
+
+```tact
+fun getConfigParam(id: Int): Cell?;
+```
+
+Loads a [configuration parameter](https://docs.ton.org/develop/howto/blockchain-configs) of TON Blockchain by its `id` number.
+
+Usage examples:
+
+```tact
+// Parameter 0, address of a special smart contract that stores the blockchain's configuration
+let configAddrAsCell: Cell = getConfigParam(0)!!;
+
+// Parameter 18, configuration for determining the prices for data storage
+let dataStorageFeeConfig: Cell = getConfigParam(18)!!;
+```
+
+:::note
+
+ The standard library [`@stdlib/config`](/ref/stdlib-config) provides two related helper functions:\
+ [`getConfigAddress(){:tact}`](/ref/stdlib-config#getconfigaddress) for retrieving config [`Address{:tact}`][p]\
+ [`getElectorAddress(){:tact}`](/ref/stdlib-config#getconfigaddress) for retrieving elector [`Address{:tact}`][p]
+
+ Read more about other parameters: [Config Parameters in TON Docs](https://docs.ton.org/develop/howto/blockchain-configs).
+
+:::
+
+[p]: /book/types#primitive-types
+[bool]: /book/types#booleans
+[int]: /book/integers
+[nano]: /book/integers#nanotoncoin
+[cell]: /book/cells#cells
+[slice]: /book/cells#slices
+[struct]: /book/structs-and-messages#structs
+
+[forward-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/forward-fees
+[storage-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees-low-level#storage-fee
+[registers]: https://docs.ton.org/learn/tvm-instructions/tvm-overview#control-registers
+
+[gas]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees#gas
+[tvm]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
+[lt]: https://docs.ton.org/v3/documentation/smart-contracts/message-management/messages-and-transactions#what-is-a-logical-time
+[seed]: https://en.wikipedia.org/wiki/Random_seed
diff --git a/docs/src/content/docs/ref/core-crypto.mdx b/docs/src/content/docs/ref/core-crypto.mdx
new file mode 100644
index 000000000..e0d58ea57
--- /dev/null
+++ b/docs/src/content/docs/ref/core-crypto.mdx
@@ -0,0 +1,136 @@
+---
+title: Cryptography
+description: "Various cryptographic functions from the Core library of Tact"
+---
+
+import { Badge } from '@astrojs/starlight/components';
+
+Various cryptographic global functions. Crypto-oriented extension functions for [`Cell{:tact}`][cell], [`Builder{:tact}`][builder], and [`Slice{:tact}`][slice] types are listed on their reference page: [Cells, Builders and Slices](/ref/core-cells).
+
+## checkSignature
+
+```tact
+fun checkSignature(hash: Int, signature: Slice, publicKey: Int): Bool;
+```
+
+Checks the [Ed25519][ed] `signature` of the 256-bit unsigned [`Int{:tact}`][int] `hash` using a `publicKey`, represented by a 256-bit unsigned [`Int{:tact}`][int]. The signature must contain at least 512 bits of data, but only the first 512 bits are used.
+
+Returns `true{:tact}` if the signature is valid, `false{:tact}` otherwise.
+
+Usage example:
+
+```tact {19-24}
+message ExtMsg {
+ signature: Slice;
+ data: Cell;
+}
+
+contract Showcase {
+ // Persistent state variables
+ pub: Int as uint256; // public key as a 256-bit unsigned Int
+
+ // Constructor function init(), where all variables are initialized
+ init(pub: Int) {
+ self.pub = pub; // storing the public key upon contract initialization
+ }
+
+ // External message receiver, which accepts message ExtMsg
+ external(msg: ExtMsg) {
+ let hash: Int = beginCell().storeRef(msg.data).endCell().hash();
+ let check: Bool = checkSignature(hash, msg.signature, self.pub);
+ // ---- ------------- --------
+ // ↑ ↑ ↑
+ // | | publicKey stored in our contract
+ // | signature obtained from the received message
+ // hash calculated using the data from the received message
+ // ... follow-up logic ...
+ }
+}
+```
+
+:::caution
+
+ The first 10 calls of this function are very cheap regarding gas usage. However, the 11th call and onward consume more than 4 thousand gas units.
+
+:::
+
+## checkDataSignature
+
+```tact
+fun checkDataSignature(data: Slice, signature: Slice, publicKey: Int): Bool;
+```
+
+Checks the [Ed25519][ed] `signature` of the `data` using a `publicKey`, similar to [`checkSignature(){:tact}`](#checksignature). If the bit length of `data` is not divisible by 8, this function throws an error with [exit code 9](/book/exit-codes#9): `Cell underflow`. Verification itself is done indirectly on a [SHA-256][sha-2] hash of the `data`.
+
+Returns `true{:tact}` if the signature is valid, `false{:tact}` otherwise.
+
+Usage example:
+
+```tact
+let data: Slice = someData;
+let signature: Slice = someSignature;
+let publicKey: Int = 42;
+
+let check: Bool = checkDataSignature(data, signature, publicKey);
+```
+
+:::caution
+
+ The first 10 calls of this function are very cheap regarding gas usage. However, the 11th call and onward consume more than 4 thousand gas units.
+
+:::
+
+## sha256
+
+
+
+```tact
+fun sha256(data: Slice): Int;
+fun sha256(data: String): Int;
+```
+
+Computes and returns the [SHA-256][sha-2] hash as a $256$-bit unsigned [`Int{:tact}`][int] from the passed [`Slice{:tact}`][slice] or [`String{:tact}`][p] `data`, which should have a number of bits divisible by $8$.
+
+In case `data` is a [`Slice{:tact}`][slice], it must have no more than a single reference per cell, because only the first reference of each nested cell will be taken into account.
+
+This function tries to resolve constant string values at [compile-time](/ref/core-comptime) whenever possible.
+
+Attempts to specify a [`Slice{:tact}`][slice] or [`String{:tact}`][p] with a number of bits **not** divisible by $8$ throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
+
+Usage examples:
+
+```tact
+sha256(beginCell().asSlice());
+sha256("Hello, world!"); // will be resolved at compile-time
+sha256(someVariableElsewhere); // will try to resolve at compile-time,
+ // and fall back to run-time evaluation
+```
+
+:::tip[Before Tact 1.6]
+
+ Previously, if a [`String{:tact}`][p] value couldn't be resolved during [compile-time](/ref/core-comptime), the hash was calculated at runtime by the [TVM][tvm] itself. This caused collisions of strings with more than 127 bytes if their first 127 bytes were the same.
+
+ That's because all [SHA-256][sha-2]-related instructions of the [TVM][tvm] consider only the data bits, ignoring possible references to other cells needed to form larger strings.
+
+ Therefore, in general, and in versions of Tact prior to 1.6, it is preferable to use statically known strings whenever possible. When in doubt, use strings of up to 127 bytes long.
+
+:::
+
+:::note
+
+ Crypto extension functions for [`Cell{:tact}`][cell], [`Builder{:tact}`][builder], and [`Slice{:tact}`][slice] types are listed on their reference page: [Cells, Builders and Slices](/ref/core-cells).
+
+:::
+
+[p]: /book/types#primitive-types
+[int]: /book/integers
+[cell]: /book/cells#cells
+[builder]: /book/cells#builders
+[slice]: /book/cells#slices
+
+[tvm]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
+[ed]: https://en.wikipedia.org/wiki/EdDSA#Ed25519
+[sha-2]: https://en.wikipedia.org/wiki/SHA-2#Hash_standard
+
+[round-up]: https://en.wikipedia.org/wiki/Rounding#Rounding_up
+[round-down]: https://en.wikipedia.org/wiki/Rounding#Rounding_down
diff --git a/docs/src/content/docs/ref/core-gas.mdx b/docs/src/content/docs/ref/core-gas.mdx
new file mode 100644
index 000000000..fbfa83450
--- /dev/null
+++ b/docs/src/content/docs/ref/core-gas.mdx
@@ -0,0 +1,286 @@
+---
+title: Gas and fees
+description: "Storage fee, forward fee, compute fee and gas-management functions from the Core library of Tact"
+---
+
+import { Badge } from '@astrojs/starlight/components';
+
+List of the general fee and gas-management functions. For the context and state-related functions, see:
+
+* [`myStorageDue(){:tact}`](/ref/core-contextstate#mystoragedue)
+* [`gasConsumed(){:tact}`](/ref/core-contextstate#gasconsumed)
+
+## getStorageFee
+
+
+
+```tact
+fun getStorageFee(cells: Int, bits: Int, seconds: Int, isMasterchain: Bool): Int;
+```
+
+Calculates and returns the [storage fee][storage-fee] in [nanoToncoin][nano] [`Int{:tact}`][int] for storing a contract with a given number of `cells` and `bits` for a number of `seconds`. Uses the prices of the [masterchain][masterchain] if `isMasterchain` is `true{:tact}`, otherwise the prices of the [basechain][basechain]. The current prices are obtained from [config param 18 of TON Blockchain](https://docs.ton.org/develop/howto/blockchain-configs#param-18).
+
+Note that specifying values of `cells` and `bits` higher than their maximum values listed in [account state limits (`max_acc_state_cells` and `max_acc_state_bits`)](/book/exit-codes#50) will have the same result as specifying the exact limits. In addition, make sure you take into account the [deduplication of cells with the same hash][deduplication].
+
+Attempts to specify a negative number of `cells`, `bits`, or `seconds` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+let fee: Int = getStorageFee(1_000, 1_000, 1_000, false);
+// ----- ----- ----- -----
+// ↑ ↑ ↑ ↑
+// | | | Isn't on the masterchain,
+// | | | but on the basechain
+// | | Number of seconds to calculate
+// | | the storage fee for
+// | Number of bits in a contract
+// Number of cells in a contract
+```
+
+:::note[Useful links:]
+
+ [Storage fee in TON Docs][storage-fee]\
+ [Storage fee calculation in TON Docs][storage-fee-calc]
+
+:::
+
+## getComputeFee
+
+
+
+```tact
+fun getComputeFee(gasUsed: Int, isMasterchain: Bool): Int;
+```
+
+Calculates and returns the [compute fee][compute-fee] in [nanoToncoin][nano] [`Int{:tact}`][int] for a transaction that consumed a `gasUsed` amount of [gas][gas]. Uses the prices of the [masterchain][masterchain] if `isMasterchain` is `true{:tact}`, otherwise the prices of the [basechain][basechain]. The current prices are obtained from [config param 20 for the masterchain and config param 21 for the basechain][param-20-21] of TON Blockchain.
+
+When `gasUsed` is less than a certain threshold called [`flat_gas_limit`][param-20-21], there's a minimum price to pay based on the value of [`flat_gas_price`][param-20-21]. The less gas used below this threshold, the higher the minimum price will be. See the example for [`getSimpleComputeFee(){:tact}`](#getsimplecomputefee) to derive that threshold.
+
+Attempts to specify a negative value of `gasUsed` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+let fee: Int = getComputeFee(1_000, false);
+// ----- -----
+// ↑ ↑
+// | Isn't on the masterchain,
+// | but on the basechain
+// Number of gas units
+// consumed per transaction
+```
+
+:::note[Useful links:]
+
+ [Compute fee in TON Docs][compute-fee]\
+ [Compute fee calculation in TON Docs][compute-fee-calc]\
+ [`getSimpleComputeFee(){:tact}`](#getsimplecomputefee)
+
+:::
+
+## getSimpleComputeFee
+
+
+
+```tact
+fun getSimpleComputeFee(gasUsed: Int, isMasterchain: Bool): Int;
+```
+
+Similar to [`getComputeFee(){:tact}`](#getcomputefee), but without the [`flat_gas_price`][param-20-21], i.e. without the minimum price to pay if `gasUsed` is less than a certain threshold called [`flat_gas_limit`][param-20-21]. Calculates and returns only the `gasUsed` multiplied by the current gas price.
+
+Attempts to specify a negative value for `gasUsed` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+let fee = getComputeFee(0, false);
+let feeNoFlat = getSimpleComputeFee(0, false);
+let maxFlatPrice = fee - feeNoFlat;
+```
+
+:::note[Useful links:]
+
+ [Compute fee in TON Docs][compute-fee]\
+ [Compute fee calculation in TON Docs][compute-fee-calc]\
+ [`getComputeFee(){:tact}`](#getcomputefee)
+
+:::
+
+## getForwardFee
+
+
+
+```tact
+fun getForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int;
+```
+
+Calculates and returns the [forward fee][forward-fee] in [nanoToncoin][nano] as an [`Int{:tact}`][int] for an outgoing message consisting of a given number of `cells` and `bits`. Uses the prices of the [masterchain][masterchain] if `isMasterchain` is `true{:tact}`, or the prices of the [basechain][basechain] otherwise. The current prices are obtained from [config param 24 for the masterchain and config param 25 for the basechain][param-24-25] of TON Blockchain.
+
+If both the source and the destination addresses are on the [basechain][basechain], specify `isMasterchain` as `false{:tact}`. Otherwise, specify `true{:tact}`.
+
+Note that specifying values of `cells` and `bits` higher than their maximum values listed in [account state limits (`max_msg_cells` and `max_msg_bits`)](/book/exit-codes#50) will have the same result as specifying the exact limits.
+
+However, regardless of the values of `cells` and `bits`, this function always adds the minimum price based on the value of [`lump_price`][param-24-25]. See the example for [`getSimpleForwardFee(){:tact}`](#getsimpleforwardfee) to derive it. In addition, make sure you account for the [deduplication of cells with the same hash][deduplication]; for example, the root cell and its data bits do not count toward the forward fee and are covered by the [`lump_price`][param-24-25].
+
+Attempts to specify a negative number of `cells` or `bits` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+let fee: Int = getForwardFee(1_000, 1_000, false);
+// ----- ----- -----
+// ↑ ↑ ↑
+// | | Both source and destination
+// | | are not on the masterchain,
+// | | but on the basechain
+// | Number of bits in a message
+// Number of cells in a message
+```
+
+:::note[Useful links:]
+
+ [Forward fee in TON Docs][forward-fee]\
+ [Forward fee calculation in TON Docs][forward-fee-calc]\
+ [`CDATASIZEQ` instruction for computing the number of distinct cells, data bits and refs in a `Cell{:tact}`](https://docs.ton.org/v3/documentation/tvm/instructions#F940)\
+ [`getSimpleForwardFee(){:tact}`](#getsimpleforwardfee)\
+ [`getOriginalFwdFee(){:tact}`](#getoriginalfwdfee)
+
+:::
+
+## getSimpleForwardFee
+
+
+
+```tact
+fun getSimpleForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int;
+```
+
+Similar to [`getForwardFee(){:tact}`](#getforwardfee), but without the [`lump_price`][param-24-25], i.e. without the minimum price to pay regardless of the amounts of `cells` or `bits`. Calculates and returns only the `cells` multiplied by the current cell price plus the `bits` multiplied by the current bit price.
+
+Attempts to specify a negative number of `cells` or `bits` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+let fee = getForwardFee(1_000, 1_000, false);
+let feeNoLump = getSimpleForwardFee(1_000, 1_000, false);
+let lumpPrice = fee - feeNoLump;
+```
+
+:::note[Useful links:]
+
+ [Forward fee in TON Docs][forward-fee]\
+ [Forward fee calculation in TON Docs][forward-fee-calc]\
+ [`getForwardFee(){:tact}`](#getforwardfee)
+
+:::
+
+## getOriginalFwdFee
+
+
+
+```tact
+fun getOriginalFwdFee(fwdFee: Int, isMasterchain: Bool): Int;
+```
+
+Calculates and returns the so-called _original_ [forward fee][forward-fee] in [nanoToncoin][nano] [`Int{:tact}`][int] for an outgoing message based on the `fwdFee` obtained from the incoming message. If both the source and the destination addresses are in the [basechain][basechain], specify `isMasterchain` as `false{:tact}`. Otherwise, specify `true{:tact}`.
+
+This function is useful when the outgoing message depends heavily on the structure of the incoming message, so much so that you cannot fully predict the fee using [`getForwardFee(){:tact}`](#getforwardfee) alone. Even if you could, calculating the exact fee with [nanoToncoin][nano]-level precision can be very expensive, so the approximation given by this function is often good enough.
+
+Attempts to specify a negative value of `fwdFee` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+let fwdFee: Int = context().readForwardFee();
+let origFee: Int = getOriginalFwdFee(fwdFee, false);
+```
+
+:::note[Useful links:]
+
+ [Forward fee in TON Docs][forward-fee]\
+ [Forward fee calculation in TON Docs][forward-fee-calc]\
+ [`getForwardFee(){:tact}`](#getforwardfee)\
+ [`Context.readForwardFee(){:tact}`](/ref/core-contextstate#contextreadforwardfee)
+
+:::
+
+## setGasLimit
+
+
+
+```tact
+fun setGasLimit(limit: Int);
+```
+
+Sets the [`gas_limit`][param-20-21] to the [`Int{:tact}`][int] `limit` and resets the [`gas_credit`][param-20-21] to 0. Note that specifying a `limit` higher than the maximum allowed value of $2^{63} - 1$ will have the same result as specifying that exact maximum or calling [`acceptMessage(){:tact}`](#acceptmessage).
+
+Attempts to specify a negative or insufficient value of `limit` will cause an exception with [exit code -14](/book/exit-codes#-14): `Out of gas error`.
+
+Usage example:
+
+```tact
+setGasLimit(42000);
+```
+
+:::note
+
+ For more details, see: [Accept Message Effects in TON Docs](https://docs.ton.org/develop/smart-contracts/guidelines/accept).
+
+:::
+
+## acceptMessage
+
+```tact
+fun acceptMessage();
+```
+
+Agrees to buy some [gas][gas] to finish the current transaction by setting the [`gas_limit`][param-20-21] to its maximum allowed value of $2^{63}-1$ and resetting the [`gas_credit`][param-20-21] to 0. This action is required to process external messages, which bring no value (hence no gas) with them.
+
+Usage example:
+
+```tact {10}
+contract Timeout {
+ timeout: Int;
+
+ init() {
+ self.timeout = now() + 5 * 60; // 5 minutes from now
+ }
+
+ external("timeout") {
+ if (now() > self.timeout) {
+ acceptMessage(); // start accepting external messages once timeout has passed
+ }
+ }
+}
+```
+
+:::note
+
+ For more details, see: [Accept Message Effects in TON Docs](https://docs.ton.org/develop/smart-contracts/guidelines/accept).
+
+:::
+
+[p]: /book/types#primitive-types
+[int]: /book/integers
+[nano]: /book/integers#nanotoncoin
+[cell]: /book/cells#cells
+[slice]: /book/cells#slices
+[masterchain]: https://docs.ton.org/v3/documentation/smart-contracts/shards/shards-intro#masterchain
+
+[tvm]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
+[basechain]: https://docs.ton.org/v3/documentation/smart-contracts/addresses#workchain-id
+[deduplication]: https://docs.ton.org/v3/documentation/data-formats/tlb/library-cells
+
+[storage-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees-low-level#storage-fee
+[storage-fee-calc]: https://docs.ton.org/v3/guidelines/smart-contracts/fee-calculation#storage-fee
+
+[gas]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees#gas
+[compute-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/fees-low-level#computation-fees
+[compute-fee-calc]: https://docs.ton.org/v3/guidelines/smart-contracts/fee-calculation#computation-fee
+[param-20-21]: https://docs.ton.org/v3/documentation/network/configs/blockchain-configs#param-20-and-21
+
+[forward-fee]: https://docs.ton.org/v3/documentation/smart-contracts/transaction-fees/forward-fees
+[forward-fee-calc]: https://docs.ton.org/v3/guidelines/smart-contracts/fee-calculation#forward-fee
+[param-24-25]: https://docs.ton.org/v3/documentation/network/configs/blockchain-configs#param-24-and-25
diff --git a/docs/src/content/docs/ref/core-math.mdx b/docs/src/content/docs/ref/core-math.mdx
index 2a93cd6e9..1a22333c9 100644
--- a/docs/src/content/docs/ref/core-math.mdx
+++ b/docs/src/content/docs/ref/core-math.mdx
@@ -358,123 +358,8 @@ contract Example {
:::
-## checkSignature
-
-```tact
-fun checkSignature(hash: Int, signature: Slice, publicKey: Int): Bool;
-```
-
-Checks the [Ed25519][ed] `signature` of the 256-bit unsigned [`Int{:tact}`][int] `hash` using a `publicKey`, represented by a 256-bit unsigned [`Int{:tact}`][int]. The signature must contain at least 512 bits of data, but only the first 512 bits are used.
-
-Returns `true{:tact}` if the signature is valid, `false{:tact}` otherwise.
-
-Usage example:
-
-```tact {19-24}
-message ExtMsg {
- signature: Slice;
- data: Cell;
-}
-
-contract Showcase {
- // Persistent state variables
- pub: Int as uint256; // public key as a 256-bit unsigned Int
-
- // Constructor function init(), where all variables are initialized
- init(pub: Int) {
- self.pub = pub; // storing the public key upon contract initialization
- }
-
- // External message receiver, which accepts message ExtMsg
- external(msg: ExtMsg) {
- let hash: Int = beginCell().storeRef(msg.data).endCell().hash();
- let check: Bool = checkSignature(hash, msg.signature, self.pub);
- // ---- ------------- --------
- // ↑ ↑ ↑
- // | | publicKey stored in our contract
- // | signature obtained from the received message
- // hash calculated using the data from the received message
- // ... follow-up logic ...
- }
-}
-```
-
-:::caution
-
- The first 10 calls of this function are very cheap regarding gas usage. However, the 11th call and onward consume more than 4 thousand gas units.
-
-:::
-
-## checkDataSignature
-
-```tact
-fun checkDataSignature(data: Slice, signature: Slice, publicKey: Int): Bool;
-```
-
-Checks the [Ed25519][ed] `signature` of the `data` using a `publicKey`, similar to [`checkSignature(){:tact}`](#checksignature). If the bit length of `data` is not divisible by 8, this function throws an error with [exit code 9](/book/exit-codes#9): `Cell underflow`. Verification itself is done indirectly on a [SHA-256][sha-2] hash of the `data`.
-
-Returns `true{:tact}` if the signature is valid, `false{:tact}` otherwise.
-
-Usage example:
-
-```tact
-let data: Slice = someData;
-let signature: Slice = someSignature;
-let publicKey: Int = 42;
-
-let check: Bool = checkDataSignature(data, signature, publicKey);
-```
-
-:::caution
-
- The first 10 calls of this function are very cheap regarding gas usage. However, the 11th call and onward consume more than 4 thousand gas units.
-
-:::
-
-## sha256
-
-
-
-```tact
-fun sha256(data: Slice): Int;
-fun sha256(data: String): Int;
-```
-
-Computes and returns the [SHA-256][sha-2] hash as a $256$-bit unsigned [`Int{:tact}`][int] from the passed [`Slice{:tact}`][slice] or [`String{:tact}`][p] `data`, which should have a number of bits divisible by $8$.
-
-In case `data` is a [`Slice{:tact}`][slice], it must have no more than a single reference per cell, because only the first reference of each nested cell will be taken into account.
-
-This function tries to resolve constant string values at [compile-time](/ref/core-comptime) whenever possible.
-
-Attempts to specify a [`Slice{:tact}`][slice] or [`String{:tact}`][p] with a number of bits **not** divisible by $8$ throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
-
-Usage examples:
-
-```tact
-sha256(beginCell().asSlice());
-sha256("Hello, world!"); // will be resolved at compile-time
-sha256(someVariableElsewhere); // will try to resolve at compile-time,
- // and fall back to run-time evaluation
-```
-
-:::tip[Before Tact 1.6]
-
- Previously, if a [`String{:tact}`][p] value couldn't be resolved during [compile-time](/ref/core-comptime), the hash was calculated at runtime by the [TVM][tvm] itself. This caused collisions of strings with more than 127 bytes if their first 127 bytes were the same.
-
- That's because all [SHA-256][sha-2]-related instructions of the [TVM][tvm] consider only the data bits, ignoring possible references to other cells needed to form larger strings.
-
- Therefore, in general, and in versions of Tact prior to 1.6, it is preferable to use statically known strings whenever possible. When in doubt, use strings of up to 127 bytes long.
-
-:::
-
[p]: /book/types#primitive-types
-[bool]: /book/types#booleans
[int]: /book/integers
-[slice]: /book/cells#slices
-
-[tvm]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
-[ed]: https://en.wikipedia.org/wiki/EdDSA#Ed25519
-[sha-2]: https://en.wikipedia.org/wiki/SHA-2#Hash_standard
[round-up]: https://en.wikipedia.org/wiki/Rounding#Rounding_up
[round-down]: https://en.wikipedia.org/wiki/Rounding#Rounding_down
diff --git a/docs/src/content/docs/ref/core-random.mdx b/docs/src/content/docs/ref/core-random.mdx
index e968e7455..8795869e6 100644
--- a/docs/src/content/docs/ref/core-random.mdx
+++ b/docs/src/content/docs/ref/core-random.mdx
@@ -3,9 +3,13 @@ title: Random number generation
description: "Various random number generation functions from the Core library of Tact"
---
+import { Badge } from '@astrojs/starlight/components';
+
Random number generation for Tact smart contracts.
-## random
+## Common
+
+### random
```tact
fun random(min: Int, max: Int): Int;
@@ -20,15 +24,15 @@ random(42, 43); // 42, always
random(0, 42); // 0-41, but never 42
```
-## randomInt
+### randomInt
```tact
fun randomInt(): Int;
```
-Generates and returns a new pseudo-random unsigned $256$-bit [`Int{:tact}`][int] value `x`.
+Generates and returns a new pseudo-random unsigned 256-bit [`Int{:tact}`][int] value `x`.
-The algorithm works as follows: first, the `sha512(r){:tact}` is computed. There, `r` is an old value of the random seed, which is taken as a $32$-byte array constructed from the big-endian representation of an unsigned $256$-bit [`Int{:tact}`][int]. The first $32$ bytes of this hash are stored as the new value `r'` of the random seed, and the remaining $32$ bytes are returned as the next random value `x`.
+The algorithm works as follows: first, the `sha512(r){:tact}` is computed. There, `r` is an old value of the random seed, which is taken as a 32-byte array constructed from the big-endian representation of an unsigned 256-bit [`Int{:tact}`][int]. The first 32 bytes of this hash are stored as the new value `r'` of the random seed, and the remaining 32 bytes are returned as the next random value `x`.
Usage example:
@@ -36,10 +40,164 @@ Usage example:
let allYourRandomBelongToUs: Int = randomInt(); // ???, it's random :)
```
+## Advanced
+
+Various niche, dangerous, or unstable features which can produce unexpected results and are meant to be used by more experienced users.
+
:::caution
- Advanced functions for working with random numbers are listed on a specialized page: [Advanced APIs](/ref/core-advanced).
+ Proceed with caution.
+
+:::
+
+### getSeed
+
+
+
+```tact
+fun getSeed(): Int;
+```
+
+Generates and returns an unsigned 256-bit [`Int{:tact}`][int] [seed][seed] for the random number generator. The resulting seed is commonly used with the [`setSeed(){:tact}`](#setseed) and [`nativeRandomize(){:tact}`](#nativerandomize) functions.
+
+Usage example:
+
+```tact
+let seed: Int = getSeed();
+setSeed(seed); // From now on, the results of the pseudorandom number generator
+ // are completely determined by the seed, which can be handy in tests,
+ // but must not be used in production code!
+```
+
+:::note[Useful links:]
+
+ [Random seed in Wikipedia][seed]\
+ [`setSeed(){:tact}`](#setseed)\
+ [`nativeRandomize(){:tact}`](#nativerandomize)
+
+:::
+
+### setSeed
+
+
+
+```tact
+fun setSeed(seed: Int);
+```
+
+Sets the [seed][seed] of the random number generator to the unsigned 256-bit [`Int{:tact}`][int] `seed`, which can be obtained with the [`getSeed(){:tact}`](#getseed) function.
+
+Attempts to specify a negative value for `seed` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+let seed: Int = getSeed();
+setSeed(seed); // From now on, the results of the pseudorandom number generator
+ // are completely determined by the seed, which can be handy in tests,
+ // but must not be used in production code!
+```
+
+:::note[Useful links:]
+
+ [Random seed in Wikipedia][seed]\
+ [`getSeed(){:tact}`](#getseed)
+
+:::
+
+### nativePrepareRandom
+
+```tact
+fun nativePrepareRandom();
+```
+
+Prepares the random number generator by using [`nativeRandomizeLt(){:tact}`](#nativerandomizelt). Automatically called by the [`randomInt(){:tact}`](#randomint) and [`random(){:tact}`](#random) functions.
+
+Usage example:
+
+```tact
+nativePrepareRandom(); // Prepare the RNG
+// ... do your random things ...
+```
+
+### nativeRandomize
+
+```tact
+fun nativeRandomize(x: Int);
+```
+
+Randomizes the pseudorandom number generator with the specified unsigned 256-bit [`Int{:tact}`][int] `x` by mixing it with the current [seed][seed]. The new seed is the unsigned 256-bit [`Int{:tact}`][int] value of the [SHA-256](/ref/core-crypto#sha256) hash of the concatenated old seed and `x` in their 32-byte strings [big-endian](https://en.wikipedia.org/wiki/Endianness) representation.
+
+Attempts to specify a negative value for `x` throw an exception with [exit code 5](/book/exit-codes#5): `Integer out of expected range`.
+
+Usage example:
+
+```tact
+nativeRandomize(42); // Now, random numbers are less predictable
+let idk: Int = randomInt(); // ???, it's random,
+ // but the seed was adjusted deterministically!
+```
+
+:::note[Useful links:]
+
+ [Random seed in Wikipedia][seed]
+
+:::
+
+### nativeRandomizeLt
+
+```tact
+fun nativeRandomizeLt();
+```
+
+Randomizes the random number generator with the [logical time][lt] of the current transaction. Equivalent to calling `nativeRandomize(curLt()){:tact}`.
+
+Usage example:
+
+```tact
+nativeRandomizeLt(); // Now, random numbers are unpredictable for users,
+ // but still may be affected by validators or collators
+ // as they determine the seed of the current block.
+let idk: Int = randomInt(); // ???, it's random!
+```
+
+:::note[Useful links:]
+
+ [Random seed in Wikipedia][seed]\
+ [`nativeRandomize{:tact}`](#nativerandomize)\
+ [`curLt(){:tact}`](/ref/core-contextstate#curlt)
+
+:::
+
+### nativeRandom
+
+```tact
+fun nativeRandom(): Int;
+```
+
+Generates and returns a 256-bit random number just like [`randomInt(){:tact}`](#randomint) but does not initialize the random generator with [`nativePrepareRandom(){:tact}`](#nativepreparerandom) beforehand.
+
+:::note
+
+ Do not use this function directly — prefer using [`randomInt(){:tact}`](#randomint) instead.
+
+:::
+
+### nativeRandomInterval
+
+```tact
+fun nativeRandomInterval(max: Int): Int;
+```
+
+Generates and returns a 256-bit random number in the range from 0 to `max`, similar to [`random(){:tact}`](#random), but doesn't initialize the random generator with [`nativePrepareRandom(){:tact}`](#nativepreparerandom) beforehand.
+
+:::note
+
+ Don't use this function directly — prefer using [`random(){:tact}`](#random) instead.
:::
[int]: /book/integers
+
+[lt]: https://docs.ton.org/v3/documentation/smart-contracts/message-management/messages-and-transactions#what-is-a-logical-time
+[seed]: https://en.wikipedia.org/wiki/Random_seed
diff --git a/docs/src/content/docs/ref/core-send.mdx b/docs/src/content/docs/ref/core-send.mdx
new file mode 100644
index 000000000..4a3c65a80
--- /dev/null
+++ b/docs/src/content/docs/ref/core-send.mdx
@@ -0,0 +1,235 @@
+---
+title: Communication and messaging
+description: "Main functions for sending messages in the Core library of Tact"
+---
+
+import { Badge } from '@astrojs/starlight/components';
+
+Primary [message-sending functions](/book/send#message-sending-functions).
+
+To perform [nanoToncoin][nano] reservations, use [`nativeReserve(){:tact}`](/ref/core-contextstate#nativereserve) function from the [context and state-related functions reference page](/ref/core-contextstate).
+
+## Common
+
+### send
+
+
+
+```tact
+fun send(params: SendParameters);
+```
+
+[Queues the message](/book/send#outbound-message-processing) to be sent using a [`SendParameters{:tact}`](/book/send) [struct][struct].
+
+Attempts to queue more than 255 messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+Usage example:
+
+```tact
+send(SendParameters{
+ to: sender(), // back to the sender,
+ value: ton("1"), // with 1 Toncoin (1_000_000_000 nanoToncoin),
+ // and no message body
+});
+```
+
+:::note[Useful links:]
+
+ [Sending messages in the Book](/book/send)\
+ [Message `mode` in the Book](/book/message-mode)\
+ [Single-contract communication in the Cookbook](/cookbook/single-communication)\
+ [`nativeReserve(){:tact}`](/ref/core-contextstate#nativereserve)
+
+:::
+
+### message
+
+
+
+
+```tact
+fun message(params: MessageParameters);
+```
+
+[Queues the message](/book/send#outbound-message-processing) to be sent using the `MessageParameters{:tact}` [struct][struct]. Allows for cheaper non-deployment regular messages compared to the [`send(){:tact}`](#send) function.
+
+The `MessageParameters{:tact}` [struct][struct] is similar to the [`SendParameters{:tact}`](/book/send) [struct][struct], but without the `code` and `data` fields.
+
+Attempts to queue more than 255 messages throw an exception with an [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+Usage example:
+
+```tact
+message(MessageParameters{
+ to: sender(), // back to the sender,
+ value: ton("1"), // with 1 Toncoin (1_000_000_000 nanoToncoin),
+ // and no message body
+});
+```
+
+:::note[Useful links:]
+
+ [Sending messages in the Book](/book/send)\
+ [Message `mode` in the Book](/book/message-mode)\
+ [`nativeReserve(){:tact}`](/ref/core-contextstate#nativereserve)
+
+:::
+
+### deploy
+
+
+
+
+```tact
+fun deploy(params: DeployParameters);
+```
+
+[Queues](/book/send#outbound-message-processing) the [contract deployment message](/book/deploy) to be sent using the `DeployParameters{:tact}` [struct][struct]. Allows for cheaper on-chain deployments compared to the [`send(){:tact}`](#send) function.
+
+The `DeployParameters{:tact}` [struct][struct] consists of the following fields:
+
+Field | Type | Description
+:------- | :---------------------------- | :----------
+`mode` | [`Int{:tact}`][int] | An 8-bit value that configures how to send a message, defaults to $0$. See: [Message `mode`](/book/message-mode).
+`body` | [`Cell?{:tact}`][cell] | [Optional][opt] message body as a [`Cell{:tact}`][cell].
+`value` | [`Int{:tact}`][int] | The amount of [nanoToncoins][nano] you want to send with the message. This value is used to cover [forward fees][fwdfee] unless the optional flag [`SendPayGasSeparately{:tact}`](/book/message-mode#optional-flags) is used.
+`bounce` | [`Bool{:tact}`][p] | When set to `true` (default), the message bounces back to the sender if the recipient contract doesn't exist or isn't able to process the message.
+`init` | [`StateInit{:tact}`][initpkg] | [Initial package][initpkg] of the contract (initial code and initial data). See: [`initOf{:tact}`][initpkg].
+
+Attempts to queue more than 255 messages throw an exception with an [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+Usage example:
+
+```tact
+deploy(DeployParameters{
+ init: initOf SomeContract(), // with initial code and data of SomeContract
+ // and no additional message body
+ mode: SendIgnoreErrors, // skip the message in case of errors
+ value: ton("1"), // send 1 Toncoin (1_000_000_000 nanoToncoin)
+});
+```
+
+:::note[Useful links:]
+
+ [Sending messages in the Book](/book/send)\
+ [Message `mode` in the Book](/book/message-mode)\
+ [`nativeReserve(){:tact}`](/ref/core-contextstate#nativereserve)
+
+:::
+
+### cashback
+
+
+
+
+```tact
+fun cashback(to: Address);
+```
+
+[Queues](/book/send#outbound-message-processing) an empty message to be sent with the [`SendRemainingValue{:tact}`](/book/message-mode#base-modes) mode with the [`SendIgnoreErrors{:tact}`](/book/message-mode/#optional-flags) to the destination address `to`. It is the most gas-efficient way to send the remaining value from the incoming message to the given address.
+
+This function won't forward excess values if any other [message-sending functions](/book/send#message-sending-functions) were called in the same receiver before.
+
+Attempts to queue more than 255 messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+Usage examples:
+
+```tact
+// Forward the remaining value back to the sender
+cashback(sender());
+
+// The cashback() function above is cheaper, but functionally
+// equivalent to the following call to the message() function
+message(MessageParameters{
+ mode: SendRemainingValue | SendIgnoreErrors,
+ body: null,
+ value: 0,
+ to: sender(),
+ bounce: false,
+});
+```
+
+### emit
+
+
+
+```tact
+fun emit(body: Cell);
+```
+
+[Queues the message](/book/send#outbound-message-processing) `body` to be sent to the outer world for the purpose of logging and analyzing it later off-chain. The message does not have a recipient and is more gas-efficient compared to using any other [message-sending functions](/book/send#message-sending-functions) of Tact.
+
+The message is sent with the default mode: [`SendDefaultMode`](/book/message-mode#base-modes) ($0$).
+
+Attempts to queue more than $255$ messages throw an exception with an [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+Usage example:
+
+```tact
+emit("Catch me if you can, Mr. Holmes".asComment()); // asComment() converts a String to a Cell
+```
+
+:::note
+
+ To analyze `emit(){:tact}` calls, one must look at the [external messages](/book/external) produced by the contract.
+
+ Read more: [Logging via `emit(){:tact}`](/book/debug#logging).
+
+:::
+
+## Advanced
+
+Various niche, dangerous, or unstable features which can produce unexpected results and are meant to be used by more experienced users.
+
+:::caution
+
+ Proceed with caution.
+
+:::
+
+### nativeSendMessage
+
+
+
+```tact
+fun nativeSendMessage(cell: Cell, mode: Int);
+```
+
+[Queues the message](/book/send#outbound-message-processing) to be sent by specifying the complete `cell` and the [message `mode`](/book/message-mode).
+
+Attempts to queue more than $255$ messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+:::note
+
+ Prefer using the much more common and user-friendly [`send(){:tact}`](#send) function unless you have complex logic that can't be expressed otherwise.
+
+:::
+
+### nativeSendMessageReturnForwardFee
+
+
+
+
+```tact
+fun nativeSendMessageReturnForwardFee(cell: Cell, mode: Int): Int;
+```
+
+Similar to [`nativeSendMessage(){:tact}`](#nativesendmessage), but also calculates and returns the [forward fee][fwdfee] in [nanoToncoins][nanotoncoin].
+
+Attempts to queue more than $255$ messages throw an exception with [exit code 33](/book/exit-codes#33): `Action list is too long`.
+
+[p]: /book/types#primitive-types
+[bool]: /book/types#booleans
+[int]: /book/integers
+[cell]: /book/cells#cells
+[slice]: /book/cells#slices
+[struct]: /book/structs-and-messages#structs
+[opt]: /book/optionals
+
+[msg-queue]: /book/send#outbound-message-processing
+[nano]: /book/integers#nanotoncoin
+[initpkg]: /book/expressions#initof
+
+[fwdfee]: https://docs.ton.org/develop/howto/fees-low-level#forward-fees
+[workchain-id]: https://docs.ton.org/learn/overviews/addresses#workchain-id
+[account-id]: https://docs.ton.org/learn/overviews/addresses#account-id
diff --git a/docs/src/content/docs/ref/core-strings.mdx b/docs/src/content/docs/ref/core-strings.mdx
index 749cb123d..cc0b6caa5 100644
--- a/docs/src/content/docs/ref/core-strings.mdx
+++ b/docs/src/content/docs/ref/core-strings.mdx
@@ -7,10 +7,16 @@ import { Badge } from '@astrojs/starlight/components';
Strings are immutable sequences of characters, which means that once a [`String{:tact}`][p] is created, it cannot be changed. Strings are useful for storing text, so they can be converted to a [`Cell{:tact}`][cell] type to be used as message bodies.
-To concatenate strings in a gas-efficient way, use a [`StringBuilder{:tact}`][p].
+To concatenate strings use a [`StringBuilder{:tact}`][p].
To use [`String{:tact}`][p] literals directly, see: [String literals](/book/expressions#string-literals).
+:::note
+
+ Strings on-chain are represented as [slices][slice], which are expensive for handling Unicode strings and quite costly even for ASCII ones. Prefer not to manipulate strings on-chain.
+
+:::
+
## beginString
```tact
@@ -67,7 +73,9 @@ Usage example:
let fizz: StringBuilder = beginStringFromBuilder(beginString());
```
-## StringBuilder.append
+## StringBuilder
+
+### StringBuilder.append
```tact
extends mutates fun append(self: StringBuilder, s: String);
@@ -86,7 +94,7 @@ fizz.append("my");
fizz.append("Tact!");
```
-## StringBuilder.concat
+### StringBuilder.concat
```tact
extends fun concat(self: StringBuilder, s: String): StringBuilder;
@@ -105,7 +113,7 @@ let fizz: StringBuilder = beginString()
.concat("Tact!");
```
-## StringBuilder.toString
+### StringBuilder.toString
@@ -124,7 +132,7 @@ let fizz: StringBuilder = beginString();
let buzz: String = fizz.toString();
```
-## StringBuilder.toCell
+### StringBuilder.toCell
@@ -143,7 +151,7 @@ let fizz: StringBuilder = beginString();
let buzz: Cell = fizz.toCell();
```
-## StringBuilder.toSlice
+### StringBuilder.toSlice
@@ -165,7 +173,9 @@ let buzz: Slice = s.toCell().asSlice();
fizz == buzz; // true
```
-## String.hashData
+## String
+
+### String.hashData
@@ -177,7 +187,7 @@ Extension function for the [`String{:tact}`][p] type.
Calculates and returns an [`Int{:tact}`][int] value of the [SHA-256][sha-2] hash of the data bits from the given [`String{:tact}`][p], which should have a number of bits divisible by 8.
-Unlike [`sha256(){:tact}`](/ref/core-math#sha256), this function is gas-efficient and **only** hashes up to 127 bytes of the given string. Using longer strings will cause collisions if their first 127 bytes are the same.
+Unlike [`sha256(){:tact}`](/ref/core-crypto#sha256), this function is gas-efficient and **only** hashes up to 127 bytes of the given string. Using longer strings will cause collisions if their first 127 bytes are the same.
Attempts to specify a [`String{:tact}`][p] with a number of bits **not** divisible by 8 throw an exception with [exit code 9](/book/exit-codes#9): `Cell underflow`.
@@ -187,7 +197,7 @@ Usage example:
let roll: Int = "Never gonna give you up!".hashData(); // just the hash of the data
```
-## String.asSlice
+### String.asSlice
```tact
extends fun asSlice(self: String): Slice;
@@ -195,9 +205,7 @@ extends fun asSlice(self: String): Slice;
Extension function for the [`String{:tact}`][p] type.
-Returns a [`Slice{:tact}`][slice] from a [`String{:tact}`][p] by attempting to pack all of its bits into a continuous list of [Cells][p], each referencing the next one and opening them all for future parsing.
-
-Note that there's no indication of how many bytes a particular character could take in the [`Slice{:tact}`][slice] or how deep the list of references is going to be, so use this function only if you know what you're doing.
+Casts the [`String{:tact}`][p] back to the underlying [`Slice{:tact}`][slice] and returns it. The inverse of [`Slice.asString(){:tact}`](/ref/core-cells#sliceasstring).
Usage example:
@@ -206,7 +214,7 @@ let s: String = "It's alive! It's alive!!!";
let fizz: Slice = s.asSlice();
let buzz: Slice = s.asSlice().asString().asSlice();
-fizz == buzz; // true, but be careful as it's not always the case
+fizz == buzz; // true
```
:::note
@@ -215,7 +223,7 @@ fizz == buzz; // true, but be careful as it's not always the case
:::
-## String.asComment
+### String.asComment
@@ -240,7 +248,9 @@ let buzz: Cell = b.toCell();
fizz == buzz; // true
```
-## String.fromBase64
+### String.fromBase64
+
+
```tact
extends fun fromBase64(self: String): Slice;
@@ -264,49 +274,6 @@ let buzz: Slice = s.asSlice().fromBase64();
fizz == buzz; // true
```
-## Slice.asString
-
-```tact
-extends fun asString(self: Slice): String;
-```
-
-Extension function for the [`Slice{:tact}`][slice] type.
-
-Returns a [`String{:tact}`][p] from a [`Slice{:tact}`][slice] by attempting to load all of its bits without looking for its references, if any.
-
-Note that this function doesn't look at the references at all and truncates its output to 1023 bits, so use it only if you know what you're doing.
-
-Usage example:
-
-```tact
-let s: String = "Keep your Slices close, but your Strings closer.";
-let fizz: String = s;
-let buzz: String = s.asSlice().asString();
-
-fizz == buzz; // true, but be careful as it's not always the case
-```
-
-## Slice.fromBase64
-
-```tact
-extends fun fromBase64(self: Slice): Slice;
-```
-
-Extension function for the [`Slice{:tact}`][slice] type.
-
-Returns a new [`Slice{:tact}`][slice] from the decoded [Base64](https://en.wikipedia.org/wiki/Base64) [`Slice{:tact}`][slice].
-
-Note that this function is limited and only takes the first 1023 bits of data from the given [`Slice{:tact}`][slice], without throwing an exception if the [`Slice{:tact}`][slice] has more data (i.e., when it has any references).
-
-If the given [`Slice{:tact}`][slice] contains characters not from the Base64 set, an exception with [exit code 134](/book/exit-codes#134) will be thrown: `Invalid argument`.
-
-Usage example:
-
-```tact
-let s: Slice = "SSBhbSBHcm9vdC4=".asSlice();
-let fizz: Slice = s.fromBase64();
-```
-
## Int.toString
@@ -369,25 +336,6 @@ let buzz: String = nanotons.toFloatString(9);
fizz == buzz; // true, both store "0.000000042"
```
-## Address.toString
-
-
-
-```tact
-extends fun toString(self: Address): String;
-```
-
-Extension function for the [`Address{:tact}`][p] type.
-
-Returns a [`String{:tact}`][p] from an [`Address{:tact}`][p].
-
-Usage example:
-
-```tact
-let community: Address = address("UQDpXLZKrkHsOuE_C1aS69C697wE568vTnqSeRfBXZfvmVOo");
-let fizz: String = community.toString();
-```
-
[p]: /book/types#primitive-types
[bool]: /book/types#booleans
[int]: /book/integers
diff --git a/docs/src/content/docs/ref/stdlib-ownable.mdx b/docs/src/content/docs/ref/stdlib-ownable.mdx
index ae82b76b1..316e86386 100644
--- a/docs/src/content/docs/ref/stdlib-ownable.mdx
+++ b/docs/src/content/docs/ref/stdlib-ownable.mdx
@@ -72,7 +72,7 @@ contract ExampleContract with Ownable {
### OwnableTransferable
-`OwnableTransferable{:tact}` is an extension of [`Ownable{:tact}`](#ownable) that allows transferring ownership of a contract to another address. It provides a secure handler for the [Message](/book/structs-and-messages#messages) [`ChangeOwner{:tact}`](#changeowner) that can be called by the owner to transfer ownership.
+`OwnableTransferable{:tact}` is an extension of [`Ownable{:tact}`](#ownable) that allows transferring ownership of a contract to another address. It provides a secure handler for the [message struct](/book/structs-and-messages#messages) [`ChangeOwner{:tact}`](#changeowner), which can only be processed when sent by the current owner.
If the ownership transfer request succeeds, the contract will reply with a [`ChangeOwnerOk{:tact}`](#changeownerok) [Message](/book/structs-and-messages#messages).
diff --git a/docs/src/content/docs/zh-cn/book/debug.mdx b/docs/src/content/docs/zh-cn/book/debug.mdx
index 5db792243..572fbde8e 100644
--- a/docs/src/content/docs/zh-cn/book/debug.mdx
+++ b/docs/src/content/docs/zh-cn/book/debug.mdx
@@ -476,13 +476,13 @@ it('your test clause title', async () => {
## 通过 `emit` 记录 {#logging}
-[全局静态函数](/zh-cn/book/functions#global-static-functions) [`emit(){:tact}`](/zh-cn/ref/core-common#emit)向外部世界发送信息--它没有特定的接收者。
+[全局静态函数](/zh-cn/book/functions#global-static-functions) [`emit(){:tact}`](/zh-cn/ref/core-send#emit)向外部世界发送信息--它没有特定的接收者。
该功能对于记录和分析链外数据非常方便,只需查看合约生成的 [external messages](/zh-cn/book/external) 即可。
### 本地沙箱测试中的日志 {#logging-local}
-在 [Sandbox][sb] 中部署时,您可以从 [receiver function](/zh-cn/book/contracts#receiver-functions) 中调用 [`emit(){:tact}`](/zh-cn/ref/core-common#emit),然后观察已发送的 [external messages](/zh-cn/book/external) 列表:
+在 [Sandbox][sb] 中部署时,您可以从 [receiver function](/zh-cn/book/contracts#receiver-functions) 中调用 [`emit(){:tact}`](/zh-cn/ref/core-send#emit),然后观察已发送的 [external messages](/zh-cn/book/external) 列表:
```typescript {9-10}
it('emits', async () => {
@@ -502,7 +502,7 @@ it('emits', async () => {
TON 区块链上的每笔交易都[包含`out_msgs`](https://docs.ton.org/develop/data-formats/transaction-layout#transaction) - 这是一个字典,保存着执行交易时创建的传出消息列表。
-要查看字典中 [`emit(){:tact}`](/zh-cn/ref/core-common#emit)的日志,请查找没有收件人的外部消息。 在各种 TON 区块链探索器中,此类交易将被标记为 "外部输出(external-out)",目的地指定为"-"或 "空"。
+要查看字典中 [`emit(){:tact}`](/zh-cn/ref/core-send#emit)的日志,请查找没有收件人的外部消息。 在各种 TON 区块链探索器中,此类交易将被标记为 "外部输出(external-out)",目的地指定为"-"或 "空"。
请注意,有些探索者会为你反序列化发送的信息体,而有些则不会。 不过,您可以随时在本地[自行解析](#logging-parsing)。
@@ -543,7 +543,7 @@ it('emits', async () => {
});
```
-在这里,`res` 对象的`externals`字段将包含已发送的[外部信息](/zh-cn/book/external) 列表。 让我们访问它,以解析通过调用 Tact 代码中的 [`emit(){:tact}`](/zh-cn/ref/core-common#emit)(或简称 _emitted_)发送的第一条信息:
+在这里,`res` 对象的`externals`字段将包含已发送的[外部信息](/zh-cn/book/external) 列表。 让我们访问它,以解析通过调用 Tact 代码中的 [`emit(){:tact}`](/zh-cn/ref/core-send#emit)(或简称 _emitted_)发送的第一条信息:
```typescript /body/
it('emits', async () => {
diff --git a/docs/src/content/docs/zh-cn/book/security-best-practices.mdx b/docs/src/content/docs/zh-cn/book/security-best-practices.mdx
index 1167788ab..aadbfb9c6 100644
--- a/docs/src/content/docs/zh-cn/book/security-best-practices.mdx
+++ b/docs/src/content/docs/zh-cn/book/security-best-practices.mdx
@@ -293,7 +293,7 @@ contract Sample {
## 处理/发送退回消息
-发送反弹标志(bounce flag)设置为 `true{:tact}`的信息,这是 [`send(){:tact}`](/zh-cn/ref/core-common#send)函数的默认设置。 消息在合约执行失败后退出。 您可能希望通过在 [`try...catch{:tact}`](/zh-cn/book/statements#try-catch) 语句中封装代码来回滚合约状态,并根据您的逻辑进行一些额外处理,从而解决这个问题。
+发送反弹标志(bounce flag)设置为 `true{:tact}`的信息,这是 [`send(){:tact}`](/zh-cn/ref/core-send#send)函数的默认设置。 消息在合约执行失败后退出。 您可能希望通过在 [`try...catch{:tact}`](/zh-cn/book/statements#try-catch) 语句中封装代码来回滚合约状态,并根据您的逻辑进行一些额外处理,从而解决这个问题。
##### Do's ✅
diff --git a/docs/src/content/docs/zh-cn/book/send.mdx b/docs/src/content/docs/zh-cn/book/send.mdx
index 55f8c505c..9a8240d8f 100644
--- a/docs/src/content/docs/zh-cn/book/send.mdx
+++ b/docs/src/content/docs/zh-cn/book/send.mdx
@@ -96,7 +96,7 @@ send(SendParameters{
## 外发消息处理 {#outbound-message-processing}
-TON 区块链上的每笔交易都由 [多个阶段][phases] 组成。 发送消息是在[计算阶段][compute]进行评估,但是在该阶段**不是**发送。 相反,它们将按照出现顺序排入[操作阶段][phases],在[计算阶段][compute]中列出的所有操作,如外向消息或[储备请求](/zh-cn/ref/core-advanced#nativereserve),都会在此阶段执行。
+TON 区块链上的每笔交易都由 [多个阶段][phases] 组成。 发送消息是在[计算阶段][compute]进行评估,但是在该阶段**不是**发送。 相反,它们将按照出现顺序排入[操作阶段][phases],在[计算阶段][compute]中列出的所有操作,如外向消息或[储备请求](/zh-cn/ref/core-contextstate#nativereserve),都会在此阶段执行。
由于所有值都是在[计算阶段][compute]中计算的,所有费用都是在计算结束前计算的,而且在[操作阶段][phases]中出现异常时不会恢复交易,因此向外发送消息可能会因[操作费](https://docs.ton.org/develop/howto/fees-low-level#action-fee) 或[转发费][fwdfee]不足而失败,不会出现跳转。
@@ -136,12 +136,12 @@ contract FailureIsNothingButAnotherStep {
有关所有消息发送功能的更多消息,请参阅参考资料:
-- [`send(){:tact}`](/zh-cn/ref/core-common#send)
-- [`emit(){:tact}`](/zh-cn/ref/core-common#emit)
+- [`send(){:tact}`](/zh-cn/ref/core-send#send)
+- [`emit(){:tact}`](/zh-cn/ref/core-send#emit)
- [`self.notify(){:tact}`](/zh-cn/ref/core-base#self-notify)
- [`self.reply(){:tact}`](/zh-cn/ref/core-base#self-reply)
- [`self.forward(){:tact}`](/zh-cn/ref/core-base#self-forward)
-- [`nativeSendMessage(){:tact}`](/zh-cn/ref/core-advanced#nativesendmessage)
+- [`nativeSendMessage(){:tact}`](/zh-cn/ref/core-send#nativesendmessage)
:::
diff --git a/docs/src/content/docs/zh-cn/cookbook/jettons.mdx b/docs/src/content/docs/zh-cn/cookbook/jettons.mdx
index bff8ea16d..904c447f2 100644
--- a/docs/src/content/docs/zh-cn/cookbook/jettons.mdx
+++ b/docs/src/content/docs/zh-cn/cookbook/jettons.mdx
@@ -73,7 +73,7 @@ message(0x7362d09c) JettonTransferNotification {
要获取 Jetton 钱包的初始状态,您需要钱包的数据和代码。 虽然初始数据布局有一个共同的结构,但在某些情况下可能不同,如 [USDT](#usdt-jetton-operations)。
-由于通知源自您的合约的 Jetton 钱包,函数[`myAddress(){:tact}`](/zh-cn/ref/core-common#myaddress) 应在 \`owners' 字段中使用。
+由于通知源自您的合约的 Jetton 钱包,函数[`myAddress(){:tact}`](/zh-cn/ref/core-contextstate#myaddress) 应在 \`owners' 字段中使用。
:::caution
diff --git a/docs/src/content/docs/zh-cn/ref/core-advanced.mdx b/docs/src/content/docs/zh-cn/ref/core-advanced.mdx
index b686ed77b..2401f131a 100644
--- a/docs/src/content/docs/zh-cn/ref/core-advanced.mdx
+++ b/docs/src/content/docs/zh-cn/ref/core-advanced.mdx
@@ -161,7 +161,7 @@ let maxFlatPrice = fee - feeNoFlat;
extends fun readForwardFee(self: Context): Int;
```
-[`Context{:tact}`](/zh-cn/ref/core-common#context) 的扩展函数。
+[`Context{:tact}`](/zh-cn/ref/core-contextstate#context) 的扩展函数。
读取[forward fee](https://docs.ton.org/develop/smart-contracts/guidelines/processing),然后返回为 [`Int{:tact}`][int] [nanoToncoins][nanotoncoin]。
@@ -436,7 +436,7 @@ fun nativeSendMessage(cell: Cell, mode: Int);
:::note
- 除非您有无法以其他方式表达的复杂逻辑,否则请优先使用更常见、更方便用户使用的 [`send(){:tact}`](/zh-cn/ref/core-common#send)函数。
+ 除非您有无法以其他方式表达的复杂逻辑,否则请优先使用更常见、更方便用户使用的 [`send(){:tact}`](/zh-cn/ref/core-send#send)函数。
:::
diff --git a/docs/src/content/docs/zh-cn/ref/core-base.mdx b/docs/src/content/docs/zh-cn/ref/core-base.mdx
index f3470e469..65cefb81b 100644
--- a/docs/src/content/docs/zh-cn/ref/core-base.mdx
+++ b/docs/src/content/docs/zh-cn/ref/core-base.mdx
@@ -91,7 +91,7 @@ virtual fun forward(to: Address, body: Cell?, bounce: Bool, init: StateInit?);
:::note
- 请注意,`self.forward(){:tact}` 永远不会在余额上额外发送 [nanoToncoins][nano]。要通过单条消息发送更多的 [nanoToncoins][nano],请使用 [`send(){:tact}`](/zh-cn/ref/core-common#send) 函数。
+ 请注意,`self.forward(){:tact}` 永远不会在余额上额外发送 [nanoToncoins][nano]。要通过单条消息发送更多的 [nanoToncoins][nano],请使用 [`send(){:tact}`](/zh-cn/ref/core-send#send) 函数。
:::
diff --git a/src/stdlib/stdlib.ts b/src/stdlib/stdlib.ts
index aaca9e7ca..37a52636a 100644
--- a/src/stdlib/stdlib.ts
+++ b/src/stdlib/stdlib.ts
@@ -1,43 +1,46 @@
const files: Record = {};
files["libs/config.tact"] =
- "Ly8vIFJldHJpZXZlcyBjb25maWcgcGFyYW1ldGVyIGAwYCBhcyBhbiBgQWRkcmVzc2AuCmZ1biBnZXRDb25maWdBZGRyZXNzKCk6IEFkZHJlc3MgewogICAgbGV0IGNl" +
- "bGw6IENlbGwgPSBnZXRDb25maWdQYXJhbSgwKSEhOwogICAgbGV0IHNjOiBTbGljZSA9IGNlbGwuYmVnaW5QYXJzZSgpOwogICAgcmV0dXJuIG5ld0FkZHJlc3MoLTEs" +
- "IHNjLmxvYWRVaW50KDI1NikpOwp9CgovLy8gUmV0cmlldmVzIGNvbmZpZyBwYXJhbWV0ZXIgYDFgIGFzIGFuIGBBZGRyZXNzYC4KZnVuIGdldEVsZWN0b3JBZGRyZXNz" +
- "KCk6IEFkZHJlc3MgewogICAgbGV0IGNlbGw6IENlbGwgPSBnZXRDb25maWdQYXJhbSgxKSEhOwogICAgbGV0IHNjOiBTbGljZSA9IGNlbGwuYmVnaW5QYXJzZSgpOwog" +
- "ICAgcmV0dXJuIG5ld0FkZHJlc3MoLTEsIHNjLmxvYWRVaW50KDI1NikpOwp9Cg==";
+ "Ly8vIFJldHJpZXZlcyBjb25maWcgcGFyYW1ldGVyIGAwYCBhcyBhbiBgQWRkcmVzc2AuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYv" +
+ "c3RkbGliLWNvbmZpZyNnZXRjb25maWdhZGRyZXNzCi8vLwpmdW4gZ2V0Q29uZmlnQWRkcmVzcygpOiBBZGRyZXNzIHsKICAgIGxldCBjZWxsOiBDZWxsID0gZ2V0Q29u" +
+ "ZmlnUGFyYW0oMCkhITsKICAgIGxldCBzYzogU2xpY2UgPSBjZWxsLmJlZ2luUGFyc2UoKTsKICAgIHJldHVybiBuZXdBZGRyZXNzKC0xLCBzYy5sb2FkVWludCgyNTYp" +
+ "KTsKfQoKLy8vIFJldHJpZXZlcyBjb25maWcgcGFyYW1ldGVyIGAxYCBhcyBhbiBgQWRkcmVzc2AuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
+ "Zy9yZWYvc3RkbGliLWNvbmZpZyNnZXRlbGVjdG9yYWRkcmVzcwovLy8KZnVuIGdldEVsZWN0b3JBZGRyZXNzKCk6IEFkZHJlc3MgewogICAgbGV0IGNlbGw6IENlbGwg" +
+ "PSBnZXRDb25maWdQYXJhbSgxKSEhOwogICAgbGV0IHNjOiBTbGljZSA9IGNlbGwuYmVnaW5QYXJzZSgpOwogICAgcmV0dXJuIG5ld0FkZHJlc3MoLTEsIHNjLmxvYWRV" +
+ "aW50KDI1NikpOwp9Cg==";
files["libs/content.tact"] =
- "Ly8vIEVuY29kZXMgYW4gb2ZmLWNoYWluIGBsaW5rYCBmcm9tIGEgYFN0cmluZ2AgdG8gYSBgQ2VsbGAuCmZ1biBjcmVhdGVPZmZjaGFpbkNvbnRlbnQobGluazogU3Ry" +
- "aW5nKTogQ2VsbCB7CiAgICBsZXQgYnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IGJlZ2luU3RyaW5nRnJvbUJ1aWxkZXIoYmVnaW5DZWxsKCkuc3RvcmVVaW50KDB4MDEs" +
- "IDgpKTsKICAgIGJ1aWxkZXIuYXBwZW5kKGxpbmspOwogICAgcmV0dXJuIGJ1aWxkZXIudG9DZWxsKCk7Cn0K";
+ "Ly8vIEVuY29kZXMgYW4gb2ZmLWNoYWluIGBsaW5rYCBmcm9tIGEgYFN0cmluZ2AgdG8gYSBgQ2VsbGAuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
+ "Lm9yZy9yZWYvc3RkbGliLWNvbnRlbnQjY3JlYXRlb2ZmY2hhaW5jb250ZW50Ci8vLwpmdW4gY3JlYXRlT2ZmY2hhaW5Db250ZW50KGxpbms6IFN0cmluZyk6IENlbGwg" +
+ "ewogICAgbGV0IGJ1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZ0Zyb21CdWlsZGVyKGJlZ2luQ2VsbCgpLnN0b3JlVWludCgweDAxLCA4KSk7CiAgICBi" +
+ "dWlsZGVyLmFwcGVuZChsaW5rKTsKICAgIHJldHVybiBidWlsZGVyLnRvQ2VsbCgpOwp9Cg==";
files["libs/deploy.tact"] =
"Ly8vIE1lc3NhZ2Ugc3RydWN0IHVzZWQgaW4gYSByZWNlaXZlciBvZiB0aGUgKipkZXByZWNhdGVkKiogYERlcGxveWFibGVgIHRyYWl0LgovLy8KLy8vIFNlZTogaHR0" +
- "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL3N0ZGxpYi1kZXBsb3kvI2RlcGxveQovLy8KbWVzc2FnZSBEZXBsb3kgewogICAgLy8vIFVuaXF1ZSBpZGVudGlmaWVy" +
- "IGZvciB0cmFja2luZyB0cmFuc2FjdGlvbnMgYWNyb3NzIG11bHRpcGxlIGNvbnRyYWN0cy4KICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7Cn0KCi8vLyBGb3J3YXJk" +
- "ZWQgbWVzc2FnZSBzdHJ1Y3QgdXNlZCBpbiAqKmRlcHJlY2F0ZWQqKgovLy8gYERlcGxveWFibGVgIGFuZCBgRmFjdG9yeURlcGxveWFibGVgIHRyYWl0cy4KLy8vCi8v" +
- "LyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9zdGRsaWItZGVwbG95LyNkZXBsb3lvawovLy8KbWVzc2FnZSBEZXBsb3lPayB7CiAgICAvLy8gVW5p" +
- "cXVlIGlkZW50aWZpZXIgZm9yIHRyYWNraW5nIHRyYW5zYWN0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgY29udHJhY3RzLgogICAgcXVlcnlJZDogSW50IGFzIHVpbnQ2NDsK" +
- "fQoKLy8vIE1lc3NhZ2Ugc3RydWN0IHVzZWQgaW4gYSByZWNlaXZlciBvZiB0aGUgKipkZXByZWNhdGVkKiogYEZhY3RvcnlEZXBsb3lhYmxlYCB0cmFpdC4KLy8vCi8v" +
- "LyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9zdGRsaWItZGVwbG95LyNmYWN0b3J5ZGVwbG95Ci8vLwptZXNzYWdlIEZhY3RvcnlEZXBsb3kgewog" +
- "ICAgLy8vIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0cmFja2luZyB0cmFuc2FjdGlvbnMgYWNyb3NzIG11bHRpcGxlIGNvbnRyYWN0cy4KICAgIHF1ZXJ5SWQ6IEludCBh" +
- "cyB1aW50NjQ7CgogICAgLy8vIEFkZHJlc3MgdG8gZm9yd2FyZCBgRGVwbG95T2tgIG1lc3NhZ2UgdG8uCiAgICBjYXNoYmFjazogQWRkcmVzczsKfQoKLy8vICoqRGVw" +
- "cmVjYXRlZCoqIHNpbmNlIFRhY3QgMS42LjAuIFVubGVzcyB5b3UgbmVlZCB0aGUgYHF1ZXJ5SWRgLCB1c2UgYSBgbnVsbGAgbWVzc2FnZSBib2R5IHJlY2VpdmVyIGlu" +
- "c3RlYWQgb2YgdGhpcyB0cmFpdC4KLy8vCi8vLyBQcm92aWRlcyBhIGNvbnZlbmllbnQgdW5pZmllZCBtZWNoYW5pc20gZm9yIGRlcGxveW1lbnRzIGJ5IGltcGxlbWVu" +
- "dGluZyBhIAovLy8gc2ltcGxlIHJlY2VpdmVyIGZvciB0aGUgYERlcGxveWAgbWVzc2FnZS4KLy8vIAovLy8gQWxsIGNvbnRyYWN0cyBhcmUgZGVwbG95ZWQgYnkgc2Vu" +
- "ZGluZyB0aGVtIGEgbWVzc2FnZS4gV2hpbGUgYW55IG1lc3NhZ2UgCi8vLyBjYW4gYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLCB0aGUgYmVzdCBwcmFjdGljZSBpcyB0" +
- "byB1c2UgdGhlIHNwZWNpYWwgCi8vLyBgRGVwbG95YCBtZXNzYWdlLgovLy8gCi8vLyBUaGlzIG1lc3NhZ2UgaGFzIGEgc2luZ2xlIGZpZWxkLCBgcXVlcnlJZGAsIHBy" +
- "b3ZpZGVkIGJ5IHRoZSBkZXBsb3llciAKLy8vICh1c3VhbGx5IHNldCB0byB6ZXJvKS4gSWYgdGhlIGRlcGxveW1lbnQgc3VjY2VlZHMsIHRoZSBjb250cmFjdCB3aWxs" +
- "IAovLy8gcmVwbHkgd2l0aCBhIGBEZXBsb3lPa2AgbWVzc2FnZSBhbmQgZWNobyB0aGUgc2FtZSBgcXVlcnlJZGAgaW4gdGhlIHJlc3BvbnNlLgovLy8KLy8vIGBgYHRh" +
- "Y3QKLy8vIGltcG9ydCAiQHN0ZGxpYi9kZXBsb3kiOwovLy8gCi8vLyBjb250cmFjdCBFeGFtcGxlQ29udHJhY3Qgd2l0aCBEZXBsb3lhYmxlIHsKLy8vICAgICAvLyBO" +
- "b3csIHRoaXMgY29udHJhY3QgaGFzIGEgcmVjZWl2ZXIgZm9yIHRoZSBEZXBsb3kgbWVzc2FnZQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZTogaHR0cHM6Ly9kb2Nz" +
- "LnRhY3QtbGFuZy5vcmcvcmVmL3N0ZGxpYi1kZXBsb3kvI2RlcGxveWFibGUKLy8vIAp0cmFpdCBEZXBsb3lhYmxlIHdpdGggQmFzZVRyYWl0IHsKICAgIHJlY2VpdmUo" +
- "ZGVwbG95OiBEZXBsb3kpIHsKICAgICAgICBzZWxmLm5vdGlmeShEZXBsb3lPa3txdWVyeUlkOiBkZXBsb3kucXVlcnlJZH0udG9DZWxsKCkpOwogICAgfQp9CgovLy8g" +
- "KipEZXByZWNhdGVkKiogc2luY2UgVGFjdCAxLjYuMC4gVW5sZXNzIHlvdSBuZWVkIHRoZSBgcXVlcnlJZGAsIHVzZSBhIGBudWxsYCBtZXNzYWdlIGJvZHkgcmVjZWl2" +
- "ZXIgaW5zdGVhZCBvZiB0aGlzIHRyYWl0LgovLy8KLy8vIFByb3ZpZGVzIGEgY29udmVuaWVudCB1bmlmaWVkIG1lY2hhbmlzbSBmb3IgY2hhaW5lZCBkZXBsb3ltZW50" +
- "cy4KLy8vIAovLy8gYGBgdGFjdAovLy8gaW1wb3J0ICJAc3RkbGliL2RlcGxveSI7Ci8vLwovLy8gY29udHJhY3QgRXhhbXBsZUNvbnRyYWN0IHdpdGggRmFjdG9yeURl" +
- "cGxveWFibGUgewovLy8gICAgIC8vIE5vdywgdGhpcyBjb250cmFjdCBoYXMgYSByZWNlaXZlciBmb3IgdGhlIEZhY3RvcnlEZXBsb3kgbWVzc2FnZQovLy8gfQovLy8g" +
- "YGBgCi8vLyAKLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL3N0ZGxpYi1kZXBsb3kvI2ZhY3RvcnlkZXBsb3lhYmxlCi8vLyAKdHJhaXQgRmFj" +
- "dG9yeURlcGxveWFibGUgd2l0aCBCYXNlVHJhaXQgIHsKICAgIHJlY2VpdmUoZGVwbG95OiBGYWN0b3J5RGVwbG95KSB7CiAgICAgICAgc2VsZi5mb3J3YXJkKGRlcGxv" +
- "eS5jYXNoYmFjaywgRGVwbG95T2sgeyBxdWVyeUlkOiBkZXBsb3kucXVlcnlJZCB9LnRvQ2VsbCgpLCBmYWxzZSwgbnVsbCk7CiAgICB9Cn0K";
+ "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL3N0ZGxpYi1kZXBsb3kjZGVwbG95Ci8vLwptZXNzYWdlIERlcGxveSB7CiAgICAvLy8gVW5pcXVlIGlkZW50aWZpZXIg" +
+ "Zm9yIHRyYWNraW5nIHRyYW5zYWN0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgY29udHJhY3RzLgogICAgcXVlcnlJZDogSW50IGFzIHVpbnQ2NDsKfQoKLy8vIEZvcndhcmRl" +
+ "ZCBtZXNzYWdlIHN0cnVjdCB1c2VkIGluICoqZGVwcmVjYXRlZCoqCi8vLyBgRGVwbG95YWJsZWAgYW5kIGBGYWN0b3J5RGVwbG95YWJsZWAgdHJhaXRzLgovLy8KLy8v" +
+ "IFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL3N0ZGxpYi1kZXBsb3kjZGVwbG95b2sKLy8vCm1lc3NhZ2UgRGVwbG95T2sgewogICAgLy8vIFVuaXF1" +
+ "ZSBpZGVudGlmaWVyIGZvciB0cmFja2luZyB0cmFuc2FjdGlvbnMgYWNyb3NzIG11bHRpcGxlIGNvbnRyYWN0cy4KICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7Cn0K" +
+ "Ci8vLyBNZXNzYWdlIHN0cnVjdCB1c2VkIGluIGEgcmVjZWl2ZXIgb2YgdGhlICoqZGVwcmVjYXRlZCoqIGBGYWN0b3J5RGVwbG95YWJsZWAgdHJhaXQuCi8vLwovLy8g" +
+ "U2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvc3RkbGliLWRlcGxveSNmYWN0b3J5ZGVwbG95Ci8vLwptZXNzYWdlIEZhY3RvcnlEZXBsb3kgewogICAg" +
+ "Ly8vIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0cmFja2luZyB0cmFuc2FjdGlvbnMgYWNyb3NzIG11bHRpcGxlIGNvbnRyYWN0cy4KICAgIHF1ZXJ5SWQ6IEludCBhcyB1" +
+ "aW50NjQ7CgogICAgLy8vIEFkZHJlc3MgdG8gZm9yd2FyZCBgRGVwbG95T2tgIG1lc3NhZ2UgdG8uCiAgICBjYXNoYmFjazogQWRkcmVzczsKfQoKLy8vICoqRGVwcmVj" +
+ "YXRlZCoqIHNpbmNlIFRhY3QgMS42LjAuIFVubGVzcyB5b3UgbmVlZCB0aGUgYHF1ZXJ5SWRgLCB1c2UgYSBgbnVsbGAgbWVzc2FnZSBib2R5IHJlY2VpdmVyIGluc3Rl" +
+ "YWQgb2YgdGhpcyB0cmFpdC4KLy8vCi8vLyBQcm92aWRlcyBhIGNvbnZlbmllbnQgdW5pZmllZCBtZWNoYW5pc20gZm9yIGRlcGxveW1lbnRzIGJ5IGltcGxlbWVudGlu" +
+ "ZyBhCi8vLyBzaW1wbGUgcmVjZWl2ZXIgZm9yIHRoZSBgRGVwbG95YCBtZXNzYWdlLgovLy8KLy8vIEFsbCBjb250cmFjdHMgYXJlIGRlcGxveWVkIGJ5IHNlbmRpbmcg" +
+ "dGhlbSBhIG1lc3NhZ2UuIFdoaWxlIGFueSBtZXNzYWdlCi8vLyBjYW4gYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLCB0aGUgYmVzdCBwcmFjdGljZSBpcyB0byB1c2Ug" +
+ "dGhlIHNwZWNpYWwKLy8vIGBEZXBsb3lgIG1lc3NhZ2UuCi8vLwovLy8gVGhpcyBtZXNzYWdlIGhhcyBhIHNpbmdsZSBmaWVsZCwgYHF1ZXJ5SWRgLCBwcm92aWRlZCBi" +
+ "eSB0aGUgZGVwbG95ZXIKLy8vICh1c3VhbGx5IHNldCB0byB6ZXJvKS4gSWYgdGhlIGRlcGxveW1lbnQgc3VjY2VlZHMsIHRoZSBjb250cmFjdCB3aWxsCi8vLyByZXBs" +
+ "eSB3aXRoIGEgYERlcGxveU9rYCBtZXNzYWdlIGFuZCBlY2hvIHRoZSBzYW1lIGBxdWVyeUlkYCBpbiB0aGUgcmVzcG9uc2UuCi8vLwovLy8gYGBgdGFjdAovLy8gaW1w" +
+ "b3J0ICJAc3RkbGliL2RlcGxveSI7Ci8vLwovLy8gY29udHJhY3QgRXhhbXBsZUNvbnRyYWN0IHdpdGggRGVwbG95YWJsZSB7Ci8vLyAgICAgLy8gTm93LCB0aGlzIGNv" +
+ "bnRyYWN0IGhhcyBhIHJlY2VpdmVyIGZvciB0aGUgRGVwbG95IG1lc3NhZ2UKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" +
+ "cmcvcmVmL3N0ZGxpYi1kZXBsb3kjZGVwbG95YWJsZQovLy8KdHJhaXQgRGVwbG95YWJsZSB3aXRoIEJhc2VUcmFpdCB7CiAgICByZWNlaXZlKGRlcGxveTogRGVwbG95" +
+ "KSB7CiAgICAgICAgc2VsZi5ub3RpZnkoRGVwbG95T2t7cXVlcnlJZDogZGVwbG95LnF1ZXJ5SWR9LnRvQ2VsbCgpKTsKICAgIH0KfQoKLy8vICoqRGVwcmVjYXRlZCoq" +
+ "IHNpbmNlIFRhY3QgMS42LjAuIFVubGVzcyB5b3UgbmVlZCB0aGUgYHF1ZXJ5SWRgLCB1c2UgYSBgbnVsbGAgbWVzc2FnZSBib2R5IHJlY2VpdmVyIGluc3RlYWQgb2Yg" +
+ "dGhpcyB0cmFpdC4KLy8vCi8vLyBQcm92aWRlcyBhIGNvbnZlbmllbnQgdW5pZmllZCBtZWNoYW5pc20gZm9yIGNoYWluZWQgZGVwbG95bWVudHMuCi8vLwovLy8gYGBg" +
+ "dGFjdAovLy8gaW1wb3J0ICJAc3RkbGliL2RlcGxveSI7Ci8vLwovLy8gY29udHJhY3QgRXhhbXBsZUNvbnRyYWN0IHdpdGggRmFjdG9yeURlcGxveWFibGUgewovLy8g" +
+ "ICAgIC8vIE5vdywgdGhpcyBjb250cmFjdCBoYXMgYSByZWNlaXZlciBmb3IgdGhlIEZhY3RvcnlEZXBsb3kgbWVzc2FnZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2Vl" +
+ "OiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvc3RkbGliLWRlcGxveSNmYWN0b3J5ZGVwbG95YWJsZQovLy8KdHJhaXQgRmFjdG9yeURlcGxveWFibGUgd2l0" +
+ "aCBCYXNlVHJhaXQgIHsKICAgIHJlY2VpdmUoZGVwbG95OiBGYWN0b3J5RGVwbG95KSB7CiAgICAgICAgc2VsZi5mb3J3YXJkKGRlcGxveS5jYXNoYmFjaywgRGVwbG95" +
+ "T2sgeyBxdWVyeUlkOiBkZXBsb3kucXVlcnlJZCB9LnRvQ2VsbCgpLCBmYWxzZSwgbnVsbCk7CiAgICB9Cn0K";
files["libs/dns.fc"] =
"c2xpY2UgZG5zX3N0cmluZ190b19pbnRlcm5hbChzbGljZSBkb21haW4pIGlubGluZV9yZWYgewoKICAgIDs7IFNwZWNpYWwgY2FzZSBmb3Igcm9vdCBkb21haW4KICAg" +
"IGlmICgoZG9tYWluLnNsaWNlX2JpdHMoKSA9PSA4KSAmIChkb21haW4uc2xpY2VfcmVmcygpID09IDApKSB7CiAgICAgICAgaWYgKGRvbWFpbi5wcmVsb2FkX3VpbnQo" +
@@ -115,76 +118,76 @@ files["libs/dns.tact"] =
"dGVzIGEgc3RydWN0IGBETlNSZXNvbHZlUmVzdWx0YCBmcm9tIHN1YmRvbWFpbiBgU2xpY2VgIGJpdHMuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGltcG9ydCAiQHN0ZGxp" +
"Yi9kbnMiOwovLy8gCi8vLyBjb250cmFjdCBFeGFtcGxlQ29udHJhY3Qgd2l0aCBETlNSZXNvbHZlciB7Ci8vLyAgICAgLy8gTm93LCB0aGlzIGNvbnRyYWN0IGhhczoK" +
"Ly8vICAgICAvLyAxLiBBIGRuc3Jlc29sdmUgZ2V0dGVyIGZ1bmN0aW9uLgovLy8gICAgIC8vIDIuIEEgZG9SZXNvbHZlRE5TIHZpcnR1YWwgZnVuY3Rpb24uCi8vLyB9" +
- "Ci8vLyBgYGAKLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvc3RkbGliLWRucy8jZG5zcmVzb2x2ZXIKLy8vIAp0cmFpdCBE" +
- "TlNSZXNvbHZlciB7CiAgICAvLy8gQ3JlYXRlcyBhIHN0cnVjdCBgRE5TUmVzb2x2ZVJlc3VsdGAgZnJvbSBzdWJkb21haW4gYFNsaWNlYCBiaXRzLgogICAgZ2V0IGZ1" +
- "biBkbnNyZXNvbHZlKHN1YmRvbWFpbjogU2xpY2UsIGNhdGVnb3J5OiBJbnQpOiBETlNSZXNvbHZlUmVzdWx0IHsKICAgICAgICAvLyBOb3JtYWxpemUKICAgICAgICBs" +
- "ZXQgZGVsdGE6IEludCA9IDA7CiAgICAgICAgaWYgKHN1YmRvbWFpbi5wcmVsb2FkVWludCg4KSA9PSAwKSB7CiAgICAgICAgICAgIHN1YmRvbWFpbi5sb2FkVWludCg4" +
- "KTsgLy8gU2tpcCBmaXJzdCBieXRlCiAgICAgICAgICAgIGRlbHRhICs9IDg7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVja3MgY29ycmVjdG5lc3MKICAgICAgICBy" +
- "ZXF1aXJlKGRuc0ludGVybmFsVmVyaWZ5KHN1YmRvbWFpbiksICJJbnZhbGlkIEROUyBuYW1lIik7CgogICAgICAgIC8vIFJlc29sdmUKICAgICAgICBsZXQgcmVzOiBE" +
- "TlNSZXNvbHZlUmVzdWx0ID0gc2VsZi5kb1Jlc29sdmVETlMoc3ViZG9tYWluLCBjYXRlZ29yeSk7CiAgICAgICAgcmV0dXJuIEROU1Jlc29sdmVSZXN1bHQgeyBwcmVm" +
- "aXg6IHJlcy5wcmVmaXggKyBkZWx0YSwgcmVjb3JkOiByZXMucmVjb3JkIH07CiAgICB9CgogICAgLy8vIENyZWF0ZXMgYSBzdHJ1Y3QgYEROU1Jlc29sdmVSZXN1bHRg" +
- "IGZyb20gc3ViZG9tYWluIGBTbGljZWAgYml0cy4KICAgIHZpcnR1YWwgZnVuIGRvUmVzb2x2ZUROUyhzdWJkb21haW46IFNsaWNlLCBjYXRlZ29yeTogSW50KTogRE5T" +
- "UmVzb2x2ZVJlc3VsdCB7CiAgICAgICAgcmV0dXJuIEROU1Jlc29sdmVSZXN1bHQgeyBwcmVmaXg6IHN1YmRvbWFpbi5iaXRzKCksIHJlY29yZDogbnVsbCB9OwogICAg" +
- "fQp9Cg==";
+ "Ci8vLyBgYGAKLy8vIAovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvc3RkbGliLWRucyNkbnNyZXNvbHZlcgovLy8gCnRyYWl0IEROU1Jlc29s" +
+ "dmVyIHsKICAgIC8vLyBDcmVhdGVzIGEgc3RydWN0IGBETlNSZXNvbHZlUmVzdWx0YCBmcm9tIHN1YmRvbWFpbiBgU2xpY2VgIGJpdHMuCiAgICBnZXQgZnVuIGRuc3Jl" +
+ "c29sdmUoc3ViZG9tYWluOiBTbGljZSwgY2F0ZWdvcnk6IEludCk6IEROU1Jlc29sdmVSZXN1bHQgewogICAgICAgIC8vIE5vcm1hbGl6ZQogICAgICAgIGxldCBkZWx0" +
+ "YTogSW50ID0gMDsKICAgICAgICBpZiAoc3ViZG9tYWluLnByZWxvYWRVaW50KDgpID09IDApIHsKICAgICAgICAgICAgc3ViZG9tYWluLmxvYWRVaW50KDgpOyAvLyBT" +
+ "a2lwIGZpcnN0IGJ5dGUKICAgICAgICAgICAgZGVsdGEgKz0gODsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrcyBjb3JyZWN0bmVzcwogICAgICAgIHJlcXVpcmUo" +
+ "ZG5zSW50ZXJuYWxWZXJpZnkoc3ViZG9tYWluKSwgIkludmFsaWQgRE5TIG5hbWUiKTsKCiAgICAgICAgLy8gUmVzb2x2ZQogICAgICAgIGxldCByZXM6IEROU1Jlc29s" +
+ "dmVSZXN1bHQgPSBzZWxmLmRvUmVzb2x2ZUROUyhzdWJkb21haW4sIGNhdGVnb3J5KTsKICAgICAgICByZXR1cm4gRE5TUmVzb2x2ZVJlc3VsdCB7IHByZWZpeDogcmVz" +
+ "LnByZWZpeCArIGRlbHRhLCByZWNvcmQ6IHJlcy5yZWNvcmQgfTsKICAgIH0KCiAgICAvLy8gQ3JlYXRlcyBhIHN0cnVjdCBgRE5TUmVzb2x2ZVJlc3VsdGAgZnJvbSBz" +
+ "dWJkb21haW4gYFNsaWNlYCBiaXRzLgogICAgdmlydHVhbCBmdW4gZG9SZXNvbHZlRE5TKHN1YmRvbWFpbjogU2xpY2UsIGNhdGVnb3J5OiBJbnQpOiBETlNSZXNvbHZl" +
+ "UmVzdWx0IHsKICAgICAgICByZXR1cm4gRE5TUmVzb2x2ZVJlc3VsdCB7IHByZWZpeDogc3ViZG9tYWluLmJpdHMoKSwgcmVjb3JkOiBudWxsIH07CiAgICB9Cn0K";
files["libs/ownable.tact"] =
- "Ly8vIE1lc3NhZ2Ugc2VudCBieSB0aGUgb3duZXIgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mIGEgY29udHJhY3QuCm1lc3NhZ2UgQ2hhbmdlT3duZXIgewogICAgLy8v" +
- "IFF1ZXJ5IElEIG9mIHRoZSBjaGFuZ2Ugb3duZXIgcmVxdWVzdC4KICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7CiAgICAvLy8gTmV3IG93bmVyLgogICAgbmV3T3du" +
- "ZXI6IEFkZHJlc3M7Cn0KCi8vLyBNZXNzYWdlIHNlbnQgYnkgdGhlIGNvbnRyYWN0IHRvIHRoZSBvd25lciB0byBjb25maXJtIHRoZSBvd25lcnNoaXAgdHJhbnNmZXIu" +
- "Cm1lc3NhZ2UgQ2hhbmdlT3duZXJPayB7CiAgICAvLy8gUXVlcnkgSUQgb2YgdGhlIGNoYW5nZSBvd25lciByZXF1ZXN0LgogICAgcXVlcnlJZDogSW50IGFzIHVpbnQ2" +
- "NDsKICAgIC8vLyBOZXcgb3duZXIgdGhhdCB3YXMgc2V0LgogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCi8vLyBEZWNsYXJlcyB0aGUgb3duZXIgKG5vbi1lZGl0YWJs" +
- "ZSkgb2YgYSBjb250cmFjdCBhbmQgcHJvdmlkZXMgYSBoZWxwZXIKLy8vIGZ1bmN0aW9uIGByZXF1aXJlT3duZXIoKWAsIHdoaWNoIGNoZWNrcyB0aGF0IGEgbWVzc2Fn" +
- "ZSB3YXMgc2VudCBieSB0aGUgb3duZXIuCi8vLyAKLy8vIFRoaXMgdHJhaXQgcmVxdWlyZXMgYSBmaWVsZCBgb3duZXI6IEFkZHJlc3NgIHRvIGJlIGRlY2xhcmVkIGFu" +
- "ZCBleHBvc2VzIAovLy8gYSBnZXR0ZXIgZnVuY3Rpb24gYG93bmVyKClgLCB3aGljaCByZWFkcyBpdCBmcm9tIHRoZSBjb250cmFjdC4KLy8vIAovLy8gYGBgdGFjdAov" +
- "Ly8gaW1wb3J0ICJAc3RkbGliL293bmFibGUiOwovLy8gCi8vLyBjb250cmFjdCBFeGFtcGxlQ29udHJhY3Qgd2l0aCBPd25hYmxlIHsKLy8vICAgICBvd25lcjogQWRk" +
- "cmVzczsKLy8vIAovLy8gICAgIGluaXQob3duZXI6IEFkZHJlc3MpIHsKLy8vICAgICAgICAgc2VsZi5vd25lciA9IG93bmVyOwovLy8gICAgIH0KLy8vIH0KLy8vIGBg" +
- "YAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9zdGRsaWItb3duYWJsZS8jb3duYWJsZQovLy8gCkBpbnRlcmZhY2UoIm9y" +
- "Zy50b24ub3duYWJsZSIpCnRyYWl0IE93bmFibGUgd2l0aCBCYXNlVHJhaXQgewogICAgLy8vIFRoZSBvd25lciBvZiB0aGUgY29udHJhY3QuCiAgICBvd25lcjogQWRk" +
- "cmVzczsKCiAgICAvLy8gUmVxdWlyZXMgdGhhdCB0aGUgc2VuZGVyIGlzIHRoZSBvd25lciBvZiB0aGUgY29udHJhY3QuCiAgICBmdW4gcmVxdWlyZU93bmVyKCkgewog" +
- "ICAgICAgIHRocm93VW5sZXNzKDEzMiwgc2VuZGVyKCkgPT0gc2VsZi5vd25lcik7CiAgICB9CgogICAgLy8vIFJldHVybnMgdGhlIG93bmVyIG9mIHRoZSBjb250cmFj" +
- "dC4KICAgIGdldCBmdW4gb3duZXIoKTogQWRkcmVzcyB7CiAgICAgICAgcmV0dXJuIHNlbGYub3duZXI7CiAgICB9Cn0KCi8vLyBFeHRlbnNpb24gb2YgYE93bmFibGVg" +
- "IHRoYXQgYWxsb3dzIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgYSBjb250cmFjdCAKLy8vIHRvIGFub3RoZXIgYWRkcmVzcy4gSXQgcHJvdmlkZXMgYSBzZWN1cmUg" +
- "aGFuZGxlciBmb3IgdGhlIG1lc3NhZ2UgYENoYW5nZU93bmVyYAovLy8gdGhhdCBjYW4gYmUgY2FsbGVkIGJ5IHRoZSBvd25lciB0byB0cmFuc2ZlciBvd25lcnNoaXAu" +
- "Ci8vLyAKLy8vIElmIHRoZSBvd25lcnNoaXAgdHJhbnNmZXIgcmVxdWVzdCBzdWNjZWVkcywgdGhlIGNvbnRyYWN0IHdpbGwgcmVwbHkgd2l0aCBhIAovLy8gYENoYW5n" +
- "ZU93bmVyT2tgIG1lc3NhZ2UuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGltcG9ydCAiQHN0ZGxpYi9vd25hYmxlIjsKLy8vIAovLy8gY29udHJhY3QgRXhhbXBsZUNvbnRy" +
- "YWN0IHdpdGggT3duYWJsZVRyYW5zZmVyYWJsZSB7Ci8vLyAgICAgb3duZXI6IEFkZHJlc3M7Ci8vLyAKLy8vICAgICBpbml0KG93bmVyOiBBZGRyZXNzKSB7Ci8vLyAg" +
- "ICAgICAgIHNlbGYub3duZXIgPSBvd25lcjsKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
- "Zy9yZWYvc3RkbGliLW93bmFibGUvI293bmFibGV0cmFuc2ZlcmFibGUKLy8vIApAaW50ZXJmYWNlKCJvcmcudG9uLm93bmFibGUudHJhbnNmZXJhYmxlLnYyIikKdHJh" +
- "aXQgT3duYWJsZVRyYW5zZmVyYWJsZSB3aXRoIE93bmFibGUgewogICAgLy8vIFRoZSBvd25lciBvZiB0aGUgY29udHJhY3QuCiAgICBvd25lcjogQWRkcmVzczsKCiAg" +
- "ICAvLy8gUmVjZWl2ZXIgZm9yIHRoZSBgQ2hhbmdlT3duZXJgIHRoYXQgY2FuIGJlIGNhbGxlZCBieSB0aGUgb3duZXIgdG8gdHJhbnNmZXIgb3duZXJzaGlwLgogICAg" +
- "Ly8vIAogICAgLy8vIENhbiBiZSBjYWxsZWQgb25seSBieSB0aGUgb3duZXIuCiAgICByZWNlaXZlKG1zZzogQ2hhbmdlT3duZXIpIHsKICAgICAgICAvLyBDaGVjayBp" +
- "ZiB0aGUgc2VuZGVyIGlzIHRoZSBvd25lcgogICAgICAgIHNlbGYucmVxdWlyZU93bmVyKCk7CgogICAgICAgIC8vIFVwZGF0ZSBvd25lcgogICAgICAgIHNlbGYub3du" +
- "ZXIgPSBtc2cubmV3T3duZXI7CgogICAgICAgIC8vIFJlcGx5IHJlc3VsdAogICAgICAgIHNlbGYucmVwbHkoQ2hhbmdlT3duZXJPayB7IHF1ZXJ5SWQ6IG1zZy5xdWVy" +
- "eUlkLCBuZXdPd25lcjogbXNnLm5ld093bmVyIH0udG9DZWxsKCkpOwogICAgfQp9Cg==";
+ "Ly8vIE1lc3NhZ2Ugc2VudCBieSB0aGUgb3duZXIgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mIGEgY29udHJhY3QuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFj" +
+ "dC1sYW5nLm9yZy9yZWYvc3RkbGliLW93bmFibGUjY2hhbmdlb3duZXIKLy8vCm1lc3NhZ2UgQ2hhbmdlT3duZXIgewogICAgLy8vIFF1ZXJ5IElEIG9mIHRoZSBjaGFu" +
+ "Z2Ugb3duZXIgcmVxdWVzdC4KICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7CiAgICAvLy8gTmV3IG93bmVyLgogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCi8vLyBN" +
+ "ZXNzYWdlIHNlbnQgYnkgdGhlIGNvbnRyYWN0IHRvIHRoZSBvd25lciB0byBjb25maXJtIHRoZSBvd25lcnNoaXAgdHJhbnNmZXIuCi8vLwovLy8gU2VlOiBodHRwczov" +
+ "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvc3RkbGliLW93bmFibGUjY2hhbmdlb3duZXJvawovLy8KbWVzc2FnZSBDaGFuZ2VPd25lck9rIHsKICAgIC8vLyBRdWVyeSBJ" +
+ "RCBvZiB0aGUgY2hhbmdlIG93bmVyIHJlcXVlc3QuCiAgICBxdWVyeUlkOiBJbnQgYXMgdWludDY0OwogICAgLy8vIE5ldyBvd25lciB0aGF0IHdhcyBzZXQuCiAgICBu" +
+ "ZXdPd25lcjogQWRkcmVzczsKfQoKLy8vIERlY2xhcmVzIHRoZSBvd25lciAobm9uLWVkaXRhYmxlKSBvZiBhIGNvbnRyYWN0IGFuZCBwcm92aWRlcyBhIGhlbHBlcgov" +
+ "Ly8gZnVuY3Rpb24gYHJlcXVpcmVPd25lcigpYCwgd2hpY2ggY2hlY2tzIHRoYXQgYSBtZXNzYWdlIHdhcyBzZW50IGJ5IHRoZSBvd25lci4KLy8vCi8vLyBUaGlzIHRy" +
+ "YWl0IHJlcXVpcmVzIGEgZmllbGQgYG93bmVyOiBBZGRyZXNzYCB0byBiZSBkZWNsYXJlZCBhbmQgZXhwb3NlcwovLy8gYSBnZXR0ZXIgZnVuY3Rpb24gYG93bmVyKClg" +
+ "LCB3aGljaCByZWFkcyBpdCBmcm9tIHRoZSBjb250cmFjdC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBpbXBvcnQgIkBzdGRsaWIvb3duYWJsZSI7Ci8vLwovLy8gY29udHJh" +
+ "Y3QgRXhhbXBsZUNvbnRyYWN0IHdpdGggT3duYWJsZSB7Ci8vLyAgICAgb3duZXI6IEFkZHJlc3M7Ci8vLwovLy8gICAgIGluaXQob3duZXI6IEFkZHJlc3MpIHsKLy8v" +
+ "ICAgICAgICAgc2VsZi5vd25lciA9IG93bmVyOwovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" +
+ "L3N0ZGxpYi1vd25hYmxlI293bmFibGUKLy8vCkBpbnRlcmZhY2UoIm9yZy50b24ub3duYWJsZSIpCnRyYWl0IE93bmFibGUgd2l0aCBCYXNlVHJhaXQgewogICAgLy8v" +
+ "IFRoZSBvd25lciBvZiB0aGUgY29udHJhY3QuCiAgICBvd25lcjogQWRkcmVzczsKCiAgICAvLy8gUmVxdWlyZXMgdGhhdCB0aGUgc2VuZGVyIGlzIHRoZSBvd25lciBv" +
+ "ZiB0aGUgY29udHJhY3QuCiAgICBmdW4gcmVxdWlyZU93bmVyKCkgewogICAgICAgIHRocm93VW5sZXNzKDEzMiwgc2VuZGVyKCkgPT0gc2VsZi5vd25lcik7CiAgICB9" +
+ "CgogICAgLy8vIFJldHVybnMgdGhlIG93bmVyIG9mIHRoZSBjb250cmFjdC4KICAgIGdldCBmdW4gb3duZXIoKTogQWRkcmVzcyB7CiAgICAgICAgcmV0dXJuIHNlbGYu" +
+ "b3duZXI7CiAgICB9Cn0KCi8vLyBFeHRlbnNpb24gb2YgYE93bmFibGVgIHRoYXQgYWxsb3dzIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgYSBjb250cmFjdAovLy8g" +
+ "dG8gYW5vdGhlciBhZGRyZXNzLiBJdCBwcm92aWRlcyBhIHNlY3VyZSBoYW5kbGVyIGZvciB0aGUgbWVzc2FnZSBgQ2hhbmdlT3duZXJgCi8vLyB0aGF0IGNhbiBiZSBj" +
+ "YWxsZWQgYnkgdGhlIG93bmVyIHRvIHRyYW5zZmVyIG93bmVyc2hpcC4KLy8vCi8vLyBJZiB0aGUgb3duZXJzaGlwIHRyYW5zZmVyIHJlcXVlc3Qgc3VjY2VlZHMsIHRo" +
+ "ZSBjb250cmFjdCB3aWxsIHJlcGx5IHdpdGggYQovLy8gYENoYW5nZU93bmVyT2tgIG1lc3NhZ2UuCi8vLwovLy8gYGBgdGFjdAovLy8gaW1wb3J0ICJAc3RkbGliL293" +
+ "bmFibGUiOwovLy8KLy8vIGNvbnRyYWN0IEV4YW1wbGVDb250cmFjdCB3aXRoIE93bmFibGVUcmFuc2ZlcmFibGUgewovLy8gICAgIG93bmVyOiBBZGRyZXNzOwovLy8K" +
+ "Ly8vICAgICBpbml0KG93bmVyOiBBZGRyZXNzKSB7Ci8vLyAgICAgICAgIHNlbGYub3duZXIgPSBvd25lcjsKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBT" +
+ "ZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9zdGRsaWItb3duYWJsZSNvd25hYmxldHJhbnNmZXJhYmxlCi8vLwpAaW50ZXJmYWNlKCJvcmcudG9uLm93" +
+ "bmFibGUudHJhbnNmZXJhYmxlLnYyIikKdHJhaXQgT3duYWJsZVRyYW5zZmVyYWJsZSB3aXRoIE93bmFibGUgewogICAgLy8vIFRoZSBvd25lciBvZiB0aGUgY29udHJh" +
+ "Y3QuCiAgICBvd25lcjogQWRkcmVzczsKCiAgICAvLy8gUmVjZWl2ZXIgZm9yIHRoZSBgQ2hhbmdlT3duZXJgIG1lc3NhZ2UgYm9keSwgd2hpY2gKICAgIC8vLyBjYW4g" +
+ "b25seSBiZSBwcm9jZXNzZWQgd2hlbiBzZW50IGJ5IHRoZSBjdXJyZW50IG93bmVyLgogICAgcmVjZWl2ZShtc2c6IENoYW5nZU93bmVyKSB7CiAgICAgICAgLy8gQ2hl" +
+ "Y2sgaWYgdGhlIHNlbmRlciBpcyB0aGUgb3duZXIKICAgICAgICBzZWxmLnJlcXVpcmVPd25lcigpOwoKICAgICAgICAvLyBVcGRhdGUgb3duZXIKICAgICAgICBzZWxm" +
+ "Lm93bmVyID0gbXNnLm5ld093bmVyOwoKICAgICAgICAvLyBSZXBseSByZXN1bHQKICAgICAgICBzZWxmLnJlcGx5KENoYW5nZU93bmVyT2sgeyBxdWVyeUlkOiBtc2cu" +
+ "cXVlcnlJZCwgbmV3T3duZXI6IG1zZy5uZXdPd25lciB9LnRvQ2VsbCgpKTsKICAgIH0KfQo=";
files["libs/stoppable.tact"] =
"aW1wb3J0ICIuL293bmFibGUiOwoKLy8vIEltcGxlbWVudHMgYSByZWNlaXZlciBmb3IgdGhlIG1lc3NhZ2UgYCJTdG9wImAgdGhhdCBjYW4gYmUgc2VudCBieSB0aGUg" +
- "b3duZXIuCi8vLyAKLy8vIFRyYWl0IGltcGxlbWVudHMgdGhlIGBzdG9wcGVkKClgIFtnZXR0ZXIgZnVuY3Rpb25dIHRoYXQgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNv" +
- "bnRyYWN0IAovLy8gaXMgc3RvcHBlZCAob3IgYGZhbHNlYCBvdGhlcndpc2UpIGFuZCBwcm92aWRlcyBwcml2YXRlIChub24tZ2V0dGVyKSBmdW5jdGlvbnMgCi8vLyBg" +
- "cmVxdWlyZU5vdFN0b3BwZWQoKWAgYW5kIGByZXF1aXJlU3RvcHBlZCgpYC4KLy8vIAovLy8gYGBgdGFjdAovLy8gaW1wb3J0ICJAc3RkbGliL293bmFibGUiOwovLy8g" +
- "aW1wb3J0ICJAc3RkbGliL3N0b3BwYWJsZSI7Ci8vLyAKLy8vIGNvbnRyYWN0IE15Q29udHJhY3Qgd2l0aCBTdG9wcGFibGUgewovLy8gICAgb3duZXI6IEFkZHJlc3M7" +
- "Ci8vLyAgICBzdG9wcGVkOiBCb29sOwovLy8gCi8vLyAgICBpbml0KG93bmVyOiBBZGRyZXNzKSB7Ci8vLyAgICAgICAgc2VsZi5vd25lciA9IG93bmVyOwovLy8gICAg" +
- "ICAgIHNlbGYuc3RvcHBlZCA9IGZhbHNlOwovLy8gICAgfQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcv" +
- "cmVmL3N0ZGxpYi1zdG9wcGFibGUvI3N0b3BwYWJsZQovLy8gCi8vLyBbZ2V0dGVyIGZ1bmN0aW9uXTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9mdW5j" +
- "dGlvbnMjZ2V0dGVyLWZ1bmN0aW9ucwovLy8gCkBpbnRlcmZhY2UoIm9yZy50b24uc3RvcHBhYmxlIikKdHJhaXQgU3RvcHBhYmxlIHdpdGggT3duYWJsZSB7CiAgICAv" +
- "Ly8gV2hldGhlciB0aGUgY29udHJhY3QgaXMgc3RvcHBlZC4KICAgIHN0b3BwZWQ6IEJvb2w7CgogICAgLy8vIFRoZSBvd25lciBvZiB0aGUgY29udHJhY3QuCiAgICBv" +
- "d25lcjogQWRkcmVzczsKCiAgICAvLy8gUmVxdWlyZXMgdGhlIGNvbnRyYWN0IHRvIGJlIG5vdCBzdG9wcGVkLgogICAgZnVuIHJlcXVpcmVOb3RTdG9wcGVkKCkgewog" +
- "ICAgICAgIHJlcXVpcmUoIXNlbGYuc3RvcHBlZCwgIkNvbnRyYWN0IHN0b3BwZWQiKTsKICAgIH0KCiAgICAvLy8gUmVxdWlyZXMgdGhlIGNvbnRyYWN0IHRvIGJlIHN0" +
- "b3BwZWQuCiAgICBmdW4gcmVxdWlyZVN0b3BwZWQoKSB7CiAgICAgICAgcmVxdWlyZShzZWxmLnN0b3BwZWQsICJDb250cmFjdCBub3Qgc3RvcHBlZCIpOwogICAgfQoK" +
- "ICAgIC8vLyBSZWNlaXZlciBmb3IgdGhlIG1lc3NhZ2UgYCJTdG9wImAgdGhhdCBzdG9wcyB0aGUgY29udHJhY3QuCiAgICAvLy8gCiAgICAvLy8gQ2FuIG9ubHkgYmUg" +
- "Y2FsbGVkIGJ5IHRoZSBvd25lciBhbmQgaWYgdGhlIGNvbnRyYWN0IGlzIG5vdCBzdG9wcGVkIGFscmVhZHkuCiAgICByZWNlaXZlKCJTdG9wIikgewogICAgICAgIHNl" +
- "bGYucmVxdWlyZU93bmVyKCk7CiAgICAgICAgc2VsZi5yZXF1aXJlTm90U3RvcHBlZCgpOwogICAgICAgIHNlbGYuc3RvcHBlZCA9IHRydWU7CiAgICAgICAgc2VsZi5y" +
- "ZXBseSgiU3RvcHBlZCIuYXNDb21tZW50KCkpOwogICAgfQoKICAgIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29udHJhY3QgaXMgc3RvcHBlZCAob3IgYGZhbHNl" +
- "YCBvdGhlcndpc2UpLgogICAgZ2V0IGZ1biBzdG9wcGVkKCk6IEJvb2wgewogICAgICAgIHJldHVybiBzZWxmLnN0b3BwZWQ7CiAgICB9Cn0KCi8vLyBFeHRlbmRzIHRo" +
- "ZSBgU3RvcHBhYmxlYCB0cmFpdCBhbmQgYWxsb3dzIHJlc3VtaW5nIGNvbnRyYWN0IGV4ZWN1dGlvbi4KLy8vIAovLy8gVHJhaXQgaW1wbGVtZW50cyBhIHJlY2VpdmVy" +
- "IGZvciB0aGUgbWVzc2FnZSBgIlJlc3VtZSJgIHRoYXQgcmVzdW1lcyB0aGUgY29udHJhY3QgZXhlY3V0aW9uLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBpbXBvcnQgIkBz" +
- "dGRsaWIvb3duYWJsZSI7Ci8vLyBpbXBvcnQgIkBzdGRsaWIvc3RvcHBhYmxlIjsKLy8vIAovLy8gY29udHJhY3QgTXlDb250cmFjdCB3aXRoIFJlc3VtYWJsZSB7Ci8v" +
- "LyAgICAgb3duZXI6IEFkZHJlc3M7Ci8vLyAgICAgc3RvcHBlZDogQm9vbDsKLy8vIAovLy8gICAgIGluaXQob3duZXI6IEFkZHJlc3MpIHsKLy8vICAgICAgICAgc2Vs" +
- "Zi5vd25lciA9IG93bmVyOwovLy8gICAgICAgICBzZWxmLnN0b3BwZWQgPSBmYWxzZTsKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOgovLy8gKiBo" +
- "dHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvc3RkbGliLXN0b3BwYWJsZS8jcmVzdW1hYmxlCi8vLyAKQGludGVyZmFjZSgib3JnLnRvbi5yZXN1bWFibGUiKQp0" +
- "cmFpdCBSZXN1bWFibGUgd2l0aCBTdG9wcGFibGUgewogICAgLy8vIFdoZXRoZXIgdGhlIGNvbnRyYWN0IGlzIHN0b3BwZWQuCiAgICBzdG9wcGVkOiBCb29sOwoKICAg" +
- "IC8vLyBUaGUgb3duZXIgb2YgdGhlIGNvbnRyYWN0LgogICAgb3duZXI6IEFkZHJlc3M7CgogICAgLy8vIFJlY2VpdmVyIGZvciB0aGUgbWVzc2FnZSBgIlJlc3VtZSJg" +
- "IHRoYXQgcmVzdW1lcyB0aGUgY29udHJhY3QgZXhlY3V0aW9uLgogICAgLy8vIAogICAgLy8vIENhbiBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3duZXIgYW5kIGlmIHRo" +
- "ZSBjb250cmFjdCBpcyBzdG9wcGVkLgogICAgcmVjZWl2ZSgiUmVzdW1lIikgewogICAgICAgIHNlbGYucmVxdWlyZU93bmVyKCk7CiAgICAgICAgc2VsZi5yZXF1aXJl" +
- "U3RvcHBlZCgpOwogICAgICAgIHNlbGYuc3RvcHBlZCA9IGZhbHNlOwogICAgICAgIHNlbGYucmVwbHkoIlJlc3VtZWQiLmFzQ29tbWVudCgpKTsKICAgIH0KfQo=";
+ "b3duZXIuCi8vLwovLy8gVHJhaXQgaW1wbGVtZW50cyB0aGUgYHN0b3BwZWQoKWAgW2dldHRlciBmdW5jdGlvbl0gdGhhdCByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29u" +
+ "dHJhY3QKLy8vIGlzIHN0b3BwZWQgKG9yIGBmYWxzZWAgb3RoZXJ3aXNlKSBhbmQgcHJvdmlkZXMgcHJpdmF0ZSAobm9uLWdldHRlcikgZnVuY3Rpb25zCi8vLyBgcmVx" +
+ "dWlyZU5vdFN0b3BwZWQoKWAgYW5kIGByZXF1aXJlU3RvcHBlZCgpYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBpbXBvcnQgIkBzdGRsaWIvb3duYWJsZSI7Ci8vLyBpbXBv" +
+ "cnQgIkBzdGRsaWIvc3RvcHBhYmxlIjsKLy8vCi8vLyBjb250cmFjdCBNeUNvbnRyYWN0IHdpdGggU3RvcHBhYmxlIHsKLy8vICAgIG93bmVyOiBBZGRyZXNzOwovLy8g" +
+ "ICAgc3RvcHBlZDogQm9vbDsKLy8vCi8vLyAgICBpbml0KG93bmVyOiBBZGRyZXNzKSB7Ci8vLyAgICAgICAgc2VsZi5vd25lciA9IG93bmVyOwovLy8gICAgICAgIHNl" +
+ "bGYuc3RvcHBlZCA9IGZhbHNlOwovLy8gICAgfQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvc3RkbGliLXN0" +
+ "b3BwYWJsZSNzdG9wcGFibGUKLy8vCi8vLyBbZ2V0dGVyIGZ1bmN0aW9uXTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9mdW5jdGlvbnMjZ2V0dGVyLWZ1" +
+ "bmN0aW9ucwovLy8KQGludGVyZmFjZSgib3JnLnRvbi5zdG9wcGFibGUiKQp0cmFpdCBTdG9wcGFibGUgd2l0aCBPd25hYmxlIHsKICAgIC8vLyBXaGV0aGVyIHRoZSBj" +
+ "b250cmFjdCBpcyBzdG9wcGVkLgogICAgc3RvcHBlZDogQm9vbDsKCiAgICAvLy8gVGhlIG93bmVyIG9mIHRoZSBjb250cmFjdC4KICAgIG93bmVyOiBBZGRyZXNzOwoK" +
+ "ICAgIC8vLyBSZXF1aXJlcyB0aGUgY29udHJhY3QgdG8gYmUgbm90IHN0b3BwZWQuCiAgICBmdW4gcmVxdWlyZU5vdFN0b3BwZWQoKSB7CiAgICAgICAgcmVxdWlyZSgh" +
+ "c2VsZi5zdG9wcGVkLCAiQ29udHJhY3Qgc3RvcHBlZCIpOwogICAgfQoKICAgIC8vLyBSZXF1aXJlcyB0aGUgY29udHJhY3QgdG8gYmUgc3RvcHBlZC4KICAgIGZ1biBy" +
+ "ZXF1aXJlU3RvcHBlZCgpIHsKICAgICAgICByZXF1aXJlKHNlbGYuc3RvcHBlZCwgIkNvbnRyYWN0IG5vdCBzdG9wcGVkIik7CiAgICB9CgogICAgLy8vIFJlY2VpdmVy" +
+ "IGZvciB0aGUgbWVzc2FnZSBgIlN0b3AiYCB0aGF0IHN0b3BzIHRoZSBjb250cmFjdC4KICAgIC8vLwogICAgLy8vIENhbiBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3du" +
+ "ZXIgYW5kIGlmIHRoZSBjb250cmFjdCBpcyBub3Qgc3RvcHBlZCBhbHJlYWR5LgogICAgcmVjZWl2ZSgiU3RvcCIpIHsKICAgICAgICBzZWxmLnJlcXVpcmVPd25lcigp" +
+ "OwogICAgICAgIHNlbGYucmVxdWlyZU5vdFN0b3BwZWQoKTsKICAgICAgICBzZWxmLnN0b3BwZWQgPSB0cnVlOwogICAgICAgIHNlbGYucmVwbHkoIlN0b3BwZWQiLmFz" +
+ "Q29tbWVudCgpKTsKICAgIH0KCiAgICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNvbnRyYWN0IGlzIHN0b3BwZWQgKG9yIGBmYWxzZWAgb3RoZXJ3aXNlKS4KICAg" +
+ "IGdldCBmdW4gc3RvcHBlZCgpOiBCb29sIHsKICAgICAgICByZXR1cm4gc2VsZi5zdG9wcGVkOwogICAgfQp9CgovLy8gRXh0ZW5kcyB0aGUgYFN0b3BwYWJsZWAgdHJh" +
+ "aXQgYW5kIGFsbG93cyByZXN1bWluZyBjb250cmFjdCBleGVjdXRpb24uCi8vLwovLy8gVHJhaXQgaW1wbGVtZW50cyBhIHJlY2VpdmVyIGZvciB0aGUgbWVzc2FnZSBg" +
+ "IlJlc3VtZSJgIHRoYXQgcmVzdW1lcyB0aGUgY29udHJhY3QgZXhlY3V0aW9uLgovLy8KLy8vIGBgYHRhY3QKLy8vIGltcG9ydCAiQHN0ZGxpYi9vd25hYmxlIjsKLy8v" +
+ "IGltcG9ydCAiQHN0ZGxpYi9zdG9wcGFibGUiOwovLy8KLy8vIGNvbnRyYWN0IE15Q29udHJhY3Qgd2l0aCBSZXN1bWFibGUgewovLy8gICAgIG93bmVyOiBBZGRyZXNz" +
+ "OwovLy8gICAgIHN0b3BwZWQ6IEJvb2w7Ci8vLwovLy8gICAgIGluaXQob3duZXI6IEFkZHJlc3MpIHsKLy8vICAgICAgICAgc2VsZi5vd25lciA9IG93bmVyOwovLy8g" +
+ "ICAgICAgICBzZWxmLnN0b3BwZWQgPSBmYWxzZTsKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3Jl" +
+ "Zi9zdGRsaWItc3RvcHBhYmxlI3Jlc3VtYWJsZQovLy8KQGludGVyZmFjZSgib3JnLnRvbi5yZXN1bWFibGUiKQp0cmFpdCBSZXN1bWFibGUgd2l0aCBTdG9wcGFibGUg" +
+ "ewogICAgLy8vIFdoZXRoZXIgdGhlIGNvbnRyYWN0IGlzIHN0b3BwZWQuCiAgICBzdG9wcGVkOiBCb29sOwoKICAgIC8vLyBUaGUgb3duZXIgb2YgdGhlIGNvbnRyYWN0" +
+ "LgogICAgb3duZXI6IEFkZHJlc3M7CgogICAgLy8vIFJlY2VpdmVyIGZvciB0aGUgbWVzc2FnZSBgIlJlc3VtZSJgIHRoYXQgcmVzdW1lcyB0aGUgY29udHJhY3QgZXhl" +
+ "Y3V0aW9uLgogICAgLy8vCiAgICAvLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvd25lciBhbmQgaWYgdGhlIGNvbnRyYWN0IGlzIHN0b3BwZWQuCiAgICByZWNl" +
+ "aXZlKCJSZXN1bWUiKSB7CiAgICAgICAgc2VsZi5yZXF1aXJlT3duZXIoKTsKICAgICAgICBzZWxmLnJlcXVpcmVTdG9wcGVkKCk7CiAgICAgICAgc2VsZi5zdG9wcGVk" +
+ "ID0gZmFsc2U7CiAgICAgICAgc2VsZi5yZXBseSgiUmVzdW1lZCIuYXNDb21tZW50KCkpOwogICAgfQp9Cg==";
files["std/internal/address.tact"] =
"Ly8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ2FzdHMgdGhlIGBTbGlj" +
"ZWAgdG8gYW4gYEFkZHJlc3NgIGluIGEgZ2l2ZW4gYGNoYWluYCBJRCBhbmQgcmV0dXJucyBpdC4gVGhlIGludmVyc2Ugb2YgYEFkZHJlc3MuYXNTbGljZSgpYCBhbmQg" +
@@ -195,139 +198,139 @@ files["std/internal/address.tact"] =
"MjogQWRkcmVzcyA9IGEuYXNTbGljZSgpLmFzQWRkcmVzcygwKTsgLy8gc28gdGhlIGNoYWluIElEIGlzIDAKLy8vCi8vLyAgICAgYSA9PSBhMjsgLy8gdHJ1ZQovLy8g" +
"fQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzYWRkcmVzcwovLy8gKiBodHRw" +
"czovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzYWRkcmVzc3Vuc2FmZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYv" +
- "Y29yZS1jZWxscyNhZGRyZXNzYXNzbGljZQovLy8KZXh0ZW5kcyBmdW4gYXNBZGRyZXNzKHNlbGY6IFNsaWNlLCBjaGFpbjogSW50KTogQWRkcmVzcyB7CiAgICAvLyAx" +
- "MSBiaXRzIGZvciB0aGUgcHJlZml4LAogICAgLy8gMjU2IGJpdHMgZm9yIHRoZSBhZGRyZXNzIGl0c2VsZgogICAgdGhyb3dVbmxlc3MoMTM2LCBzZWxmLmJpdHMoKSA9" +
- "PSAyNjcpOwoKICAgIGlmIChjaGFpbiA9PSAtMSkgewogICAgICAgIC8vIDEyNzkgPSAwYjEwMF8xMTExXzExMTEsCiAgICAgICAgLy8gaS5lLiBpbnRlcm5hbCBhZGRy" +
- "ZXNzIHByZWZpeCBhbmQgY2hhaW4gSUQgLTEKICAgICAgICB0aHJvd1VubGVzcygxMzYsIHNlbGYucHJlbG9hZFVpbnQoMTEpID09IDEyNzkpOwogICAgfSBlbHNlIHsK" +
- "ICAgICAgICAvLyBPbmx5IGNoZWNrIHRoZSBjb3JyZWN0IGludGVybmFsIGFkZHJlc3MgcHJlZml4LAogICAgICAgIC8vIGJ1dCBkbyBub3QgdmVyaWZ5IHRoZSBjaGFp" +
- "biBJRAogICAgICAgIHRocm93VW5sZXNzKDEzNiwgc2VsZi5wcmVsb2FkVWludCgzKSA9PSA0KTsKICAgIH0KCiAgICAvLyBQcm9jZWVkIHdpdGggdGhlIGNhc3QKICAg" +
- "IHJldHVybiBzZWxmLmFzQWRkcmVzc1Vuc2FmZSgpOwp9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2Ug" +
- "VGFjdCAxLjYuMC4KLy8vCi8vLyBVbnNhZmVseSBjYXN0cyB0aGUgYFNsaWNlYCB0byBhbiBgQWRkcmVzc2AgYW5kIHJldHVybnMgaXQuIFRoZSBpbnZlcnNlIG9mIGBB" +
- "ZGRyZXNzLmFzU2xpY2UoKWAuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiBkb2VzICoqbm90KiogcGVyZm9ybSBhbnkgY2hlY2tzIG9uIHRoZSBjb250ZW50cyBvZiB0aGUg" +
- "YFNsaWNlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYTogQWRkcmVzcyA9IG15QWRkcmVzcygpOwovLy8gICAgIGxldCBh" +
- "MjogQWRkcmVzcyA9IGEuYXNTbGljZSgpLmFzQWRkcmVzc1Vuc2FmZSgpOwovLy8KLy8vICAgICBhID09IGEyOyAvLyB0cnVlCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBV" +
- "c2UgaXQgb25seSBpZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSB0aGUgY29kZSBmb3IgZ2FzIGFuZCBjYW4gZ3VhcmFudGVlIGluIGFkdmFuY2UgdGhhdCB0aGUgYFNsaWNl" +
- "YCBjb250YWlucyB0aGUgZGF0YSBvZiBhbiBgQWRkcmVzc2AuCi8vLwovLy8gT3RoZXJ3aXNlLCB1c2UgYSBzYWZlciBidXQgbW9yZSBnYXMtZXhwZW5zaXZlIGBTbGlj" +
- "ZS5hc0FkZHJlc3MoKWAgZnVuY3Rpb24uCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzYWRk" +
- "cmVzc3Vuc2FmZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzYWRkcmVzcwovLy8gKiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNhZGRyZXNzYXNzbGljZQovLy8KYXNtIGV4dGVuZHMgZnVuIGFzQWRkcmVzc1Vuc2FmZShzZWxmOiBTbGljZSk6IEFkZHJl" +
- "c3Mge30KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQWRkcmVzc2AgdHlwZS4KLy8vCi8vLyBDYXN0cyBgc2VsZmAgYmFjayB0byB0aGUgdW5kZXJseWlu" +
- "ZyBgU2xpY2VgIGFuZCByZXR1cm5zIGl0LiBUaGUgaW52ZXJzZSBvZiBgU2xpY2UuYXNBZGRyZXNzVW5zYWZlKClgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFt" +
- "cGxlKCkgewovLy8gICAgIGxldCBhOiBBZGRyZXNzID0gbXlBZGRyZXNzKCk7Ci8vLyAgICAgbGV0IGZpeno6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVBZGRyZXNz" +
- "KGEpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgYnV6ejogU2xpY2UgPSBhLmFzU2xpY2UoKTsgLy8gY2hlYXAsIHVubGlrZSB0aGUgcHJldmlvdXMgc3RhdGVtZW50Ci8v" +
- "LwovLy8gICAgIGZpenogPT0gYnV6ejsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYv" +
- "Y29yZS1jZWxscyNhZGRyZXNzYXNzbGljZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzYWRkcmVzc3Vuc2FmZQov" +
- "Ly8KYXNtIGV4dGVuZHMgZnVuIGFzU2xpY2Uoc2VsZjogQWRkcmVzcyk6IFNsaWNlIHt9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENyZWF0ZXMgYSBuZXcg" +
- "YEFkZHJlc3NgIGJhc2VkIG9uIHRoZSBgY2hhaW5gIElEIGFuZCB0aGUgU0hBLTI1NiBlbmNvZGVkIGBoYXNoYCB2YWx1ZSAoYWNjb3VudCBJRCkuCi8vLwovLy8gVGhp" +
- "cyBmdW5jdGlvbiB0cmllcyB0byByZXNvbHZlIGNvbnN0YW50IHZhbHVlcyBpbiBjb21waWxlLXRpbWUgd2hlbmV2ZXIgcG9zc2libGUuCi8vLwovLy8gQXR0ZW1wdHMg" +
- "dG8gc3BlY2lmeSBhbiBpbnZhbGlkIGBjaGFpbmAgSUQgKG5vdCAtMSBvciAwKSB0aGF0IGNhbiBiZSBkZXRlY3RlZCBpbiBjb21waWxlLXRpbWUgd2lsbCByZXN1bHQg" +
- "aW4gYSBjb21waWxhdGlvbiBlcnJvci4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgb2xkVG9uRm91bmRhdGlvbkFkZHI6IEFk" +
- "ZHJlc3MgPQovLy8gICAgICAgICBuZXdBZGRyZXNzKDAsIDB4ODNkZmQ1NTJlNjM3MjliNDcyZmNiY2M4YzQ1ZWJjYzY2OTE3MDI1NThiNjhlYzc1MjdlMWJhNDAzYTBm" +
- "MzFhOCk7Ci8vLyAgICAgICAgIC8vICAgICAgICAg4oaRICDihpEKLy8vICAgICAgICAgLy8gICAgICAgICB8ICBzaGEtMjU2IGhhc2ggb2YgY29udHJhY3QncyBpbml0" +
- "IHBhY2thZ2UgKFN0YXRlSW5pdCkKLy8vICAgICAgICAgLy8gICAgICAgICBjaGFpbiBpZDogMCBpcyBhIHdvcmtjaGFpbiwgLTEgaXMgYSBtYXN0ZXJjaGFpbgovLy8g" +
- "fQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb21tb24jbmV3YWRkcmVzcwovLy8KaW5saW5lIGZ1biBuZXdB" +
- "ZGRyZXNzKGNoYWluOiBJbnQsIGhhc2g6IEludCk6IEFkZHJlc3MgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlVWludCgwYjEwXzAsIDMpCiAg" +
- "ICAgICAgLnN0b3JlSW50KGNoYWluLCA4KQogICAgICAgIC5zdG9yZVVpbnQoaGFzaCwgMjU2KQogICAgICAgIC5lbmRDZWxsKCkKICAgICAgICAuYXNTbGljZSgpCiAg" +
- "ICAgICAgLmFzQWRkcmVzc1Vuc2FmZSgpOwp9CgovLy8gU3RydWN0IHJlcHJlc2VudGluZyB0aGUgc3RhbmRhcmQgYWRkcmVzcyBvbiBUT04gQmxvY2tjaGFpbiB3aXRo" +
- "IHNpZ25lZCA4LWJpdCBgd29ya2NoYWluYCBJRCBhbmQgYW4gdW5zaWduZWQgMjU2LWJpdCBgYWRkcmVzc2AgaW4gdGhlIHNwZWNpZmllZCBgd29ya2NoYWluYC4gQXZh" +
- "aWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQXQgdGhlIG1vbWVudCwgb25seSBgd29ya2NoYWluYCBJRHMgdXNlZCBvbiBUT04gYXJlIDAgb2YgdGhlIGJh" +
- "c2VjaGFpbiBhbmQgLTEgb2YgdGhlIG1hc3RlcmNoYWluLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5j" +
- "ZWQjcGFyc2VzdGRhZGRyZXNzCi8vLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS90b24tYmxvY2tjaGFpbi90b24vYmxvYi9tYXN0ZXIvY3J5cHRvL2Jsb2NrL2Jsb2NrLnRs" +
- "YiNMMTA1LUwxMDYKLy8vCnN0cnVjdCBTdGRBZGRyZXNzIHsKICAgIHdvcmtjaGFpbjogSW50IGFzIGludDg7CiAgICBhZGRyZXNzOiBJbnQgYXMgdWludDI1NjsKfQoK" +
- "Ly8vIFN0cnVjdCByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3Mgb2YgdmFyaWFibGUgbGVuZ3RoIHdpdGggc2lnbmVkIDMyLWJpdCBgd29ya2NoYWluYCBJRCBhbmQgYSBg" +
- "U2xpY2VgIGNvbnRhaW5pbmcgdW5zaWduZWQgYGFkZHJlc3NgIGluIHRoZSBzcGVjaWZpZWQgYHdvcmtjaGFpbmAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgov" +
- "Ly8KLy8vIFZhcmlhYmxlLWxlbmd0aCBhZGRyZXNzZXMgYXJlIGludGVuZGVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucywgYW5kIHdoaWxlIHZhbGlkYXRvcnMgbXVzdCBi" +
- "ZSByZWFkeSB0byBhY2NlcHQgdGhlbSBpbiBpbmJvdW5kIG1lc3NhZ2VzLCB0aGUgc3RhbmRhcmQgKG5vbi12YXJpYWJsZSkgYWRkcmVzc2VzIGFyZSB1c2VkIHdoZW5l" +
- "dmVyIHBvc3NpYmxlLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjcGFyc2V2YXJhZGRyZXNzCi8v" +
- "LyAqIGh0dHBzOi8vZ2l0aHViLmNvbS90b24tYmxvY2tjaGFpbi90b24vYmxvYi9tYXN0ZXIvY3J5cHRvL2Jsb2NrL2Jsb2NrLnRsYiNMMTA3LUwxMDgKLy8vCnN0cnVj" +
- "dCBWYXJBZGRyZXNzIHsKICAgIHdvcmtjaGFpbjogSW50IGFzIGludDMyOwogICAgYWRkcmVzczogU2xpY2U7Cn0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJs" +
- "ZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIENvbnZlcnRzIGEgYHNsaWNlYCBjb250YWluaW5nIGFuIGFkZHJlc3MgaW50byB0aGUgYFN0ZEFkZHJlc3NgIFN0cnVj" +
- "dCBhbmQgcmV0dXJucyBpdC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYWRkciA9IGFkZHJlc3MoIkVRRHRGcEV3Y0ZBRWNS" +
- "ZTVtTFZoMk42QzB4LV9oSkVNN1c2MV9KTG5TRjc0cDRxMiIpOwovLy8gICAgIGxldCBwYXJzZWRBZGRyID0gcGFyc2VTdGRBZGRyZXNzKGFkZHIuYXNTbGljZSgpKTsK" +
- "Ly8vCi8vLyAgICAgcGFyc2VkQWRkci53b3JrY2hhaW47IC8vIDAKLy8vICAgICBwYXJzZWRBZGRyLmFkZHJlc3M7ICAgLy8gMTA3Li4uMjg3Ci8vLyB9Ci8vLyBgYGAK" +
- "Ly8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI3BhcnNlc3RkYWRkcmVzcwovLy8KYXNtIGZ1biBwYXJzZVN0ZEFk" +
- "ZHJlc3Moc2xpY2U6IFNsaWNlKTogU3RkQWRkcmVzcyB7IFJFV1JJVEVTVERBRERSIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEu" +
- "NS4wLgovLy8KLy8vIENvbnZlcnRzIGEgYHNsaWNlYCBjb250YWluaW5nIGFuIGFkZHJlc3Mgb2YgdmFyaWFibGUgbGVuZ3RoIGludG8gdGhlIGBWYXJBZGRyZXNzYCBT" +
- "dHJ1Y3QgYW5kIHJldHVybnMgaXQuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHZhckFkZHJTbGljZSA9IGJlZ2luQ2VsbCgp" +
- "Ci8vLyAgICAgICAgIC5zdG9yZVVpbnQoNiwgMykgICAgIC8vIHRvIHJlY29nbml6ZSB0aGUgZm9sbG93aW5nIGFzIGEgVmFyQWRkcmVzcwovLy8gICAgICAgICAuc3Rv" +
- "cmVVaW50KDEyMywgOSkgICAvLyBtYWtlIGFkZHJlc3Mgb2NjdXB5IDEyMyBiaXRzCi8vLyAgICAgICAgIC5zdG9yZVVpbnQoMjM0LCAzMikgIC8vIHNwZWNpZnkgd29y" +
- "a2NoYWluIElEIG9mIDIzNAovLy8gICAgICAgICAuc3RvcmVVaW50KDM0NSwgMTIzKSAvLyBzcGVjaWZ5IGFkZHJlc3Mgb2YgMzQ1Ci8vLyAgICAgICAgIC5hc1NsaWNl" +
- "KCk7Ci8vLyAgICAgbGV0IHBhcnNlZFZhckFkZHIgPSBwYXJzZVZhckFkZHJlc3ModmFyQWRkclNsaWNlKTsKLy8vCi8vLyAgICAgcGFyc2VkVmFyQWRkci53b3JrY2hh" +
- "aW47ICAgICAgICAgICAgIC8vIDIzNAovLy8gICAgIHBhcnNlZFZhckFkZHIuYWRkcmVzczsgICAgICAgICAgICAgICAvLyBDU3tDZWxsezAwMi4uLjJiM30gYml0czog" +
- "NDQuLjE2NzsgcmVmczogMC4uMH0KLy8vICAgICBwYXJzZWRWYXJBZGRyLmFkZHJlc3MubG9hZFVpbnQoMTIzKTsgLy8gMzQ1Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBT" +
- "ZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI3BhcnNldmFyYWRkcmVzcwovLy8KYXNtIGZ1biBwYXJzZVZhckFkZHJlc3Moc2xp" +
- "Y2U6IFNsaWNlKTogVmFyQWRkcmVzcyB7IFJFV1JJVEVWQVJBRERSIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUu" +
- "Ci8vLwovLy8gTG9hZHMgYW5kIHJldHVybnMgYW4gYEFkZHJlc3NgIGZyb20gdGhlIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNoIGBBZGRyZXNz" +
- "YCB3aGVuIGBTbGljZWAgZG9lc24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8g" +
- "QXR0ZW1wdHMgdG8gbG9hZCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRl" +
- "cmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlQWRkcmVzcyhteUFk" +
- "ZHJlc3MoKSkuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBBZGRyZXNzID0gcy5sb2FkQWRkcmVzcygpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRw" +
- "czovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscy8jc2xpY2Vsb2FkYWRkcmVzcwovLy8KYXNtKCAtPiAxIDApIGV4dGVuZHMgbXV0YXRlcyBmdW4gbG9h" +
- "ZEFkZHJlc3Moc2VsZjogU2xpY2UpOiBBZGRyZXNzIHsgTERNU0dBRERSIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5" +
- "cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4yLgovLy8KLy8vIFNraXBzIGFuIGBBZGRyZXNzYCBmcm9tIHRoZSBgU2xpY2VgLgovLy8KLy8vIEF0dGVtcHRzIHRv" +
- "IHNraXAgc3VjaCBgQWRkcmVzc2Agd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwg" +
- "b3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0" +
- "IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczE6IFNsaWNlID0gYmVnaW5DZWxs" +
- "KCkKLy8vICAgICAgICAgLnN0b3JlQWRkcmVzcyhteUFkZHJlc3MoKSkKLy8vICAgICAgICAgLnN0b3JlVWludCg0MiwgMzIpCi8vLyAgICAgICAgIC5hc1NsaWNlKCk7" +
- "Ci8vLwovLy8gICAgIHMxLnNraXBBZGRyZXNzKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMxLmxvYWRVaW50KDMyKTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8K" +
- "Ly8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMvI3NsaWNlbG9hZGFkZHJlc3MKLy8vCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVu" +
- "IHNraXBBZGRyZXNzKHNlbGY6IFNsaWNlKSB7IExETVNHQUREUiBOSVAgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8K" +
- "Ly8vIFN0b3JlcyB0aGUgYGFkZHJlc3NgIGluIHRoZSBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuIFJldHVybnMgdGhhdCBjb3B5LgovLy8KLy8vIEF0dGVtcHRzIHRvIHN0" +
- "b3JlIGFuIGBhZGRyZXNzYCBpbnRvIHRoZSBgQnVpbGRlcmAgYHNlbGZgLCBpZiBgc2VsZmAgY2Fubm90IGZpdCBpdCwgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhp" +
- "dCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2Vs" +
- "bCgpOwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVyID0gYi5zdG9yZUFkZHJlc3MobXlBZGRyZXNzKCkpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczov" +
- "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscy8jYnVpbGRlcnN0b3JlYWRkcmVzcwovLy8KYXNtIGV4dGVuZHMgZnVuIHN0b3JlQWRkcmVzcyhzZWxmOiBC" +
- "dWlsZGVyLCBhZGRyZXNzOiBBZGRyZXNzKTogQnVpbGRlciB7IFNUU0xJQ0VSIH0KCi8vLyBTdHJ1Y3QgcmVwcmVzZW50aW5nIGEgYmFzZWNoYWluIGFkZHJlc3MuIEF2" +
- "YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIEEgYmFzZWNoYWluIGFkZHJlc3MgKHdvcmtjaGFpbiAwKSBjYW4gYmUgZWl0aGVyIGVtcHR5IChudWxsIGhh" +
- "c2gpIG9yIGNvbnRhaW4gYSAyNTYtYml0IGhhc2ggdmFsdWUuCi8vLwpzdHJ1Y3QgQmFzZWNoYWluQWRkcmVzcyB7CiAgICBoYXNoOiBJbnQ/Owp9CgovLy8gR2xvYmFs" +
- "IGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDcmVhdGVzIGFuZCByZXR1cm5zIGFuIGVtcHR5IGJhc2VjaGFpbiBhZGRyZXNzIHdp" +
- "dGggYSBudWxsIGhhc2guCi8vLwovLy8gV2hlbiBzZXJpYWxpemVkLCBhbiBlbXB0eSBiYXNlY2hhaW4gYWRkcmVzcyBpcyByZXByZXNlbnRlZCBhcyBgYWRkcl9ub25l" +
- "YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZW1wdHlBZGRyOiBCYXNlY2hhaW5BZGRyZXNzID0gZW1wdHlCYXNlY2hhaW5B" +
- "ZGRyZXNzKCk7Ci8vLyAgICAgZW1wdHlBZGRyLmhhc2ggPT0gbnVsbDsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwppbmxpbmUgZnVuIGVtcHR5QmFzZWNoYWluQWRk" +
- "cmVzcygpOiBCYXNlY2hhaW5BZGRyZXNzIHsKICAgIHJldHVybiBCYXNlY2hhaW5BZGRyZXNzIHsgaGFzaDogbnVsbCB9Cn0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2" +
- "YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgYmFzZWNoYWluIGFkZHJlc3Mgd2l0aCB0aGUgc3BlY2lmaWVk" +
- "IGhhc2ggdmFsdWUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGFkZHI6IEJhc2VjaGFpbkFkZHJlc3MgPSBuZXdCYXNlY2hh" +
- "aW5BZGRyZXNzKDB4ODNkZmQ1NTJlNjM3MjliNDcyZmNiY2M4YzQ1ZWJjYzY2OTE3MDI1NThiNjhlYzc1MjdlMWJhNDAzYTBmMzFhOCk7Ci8vLyB9Ci8vLyBgYGAKLy8v" +
- "CmlubGluZSBmdW4gbmV3QmFzZWNoYWluQWRkcmVzcyhoYXNoOiBJbnQpOiBCYXNlY2hhaW5BZGRyZXNzIHsKICAgIHJldHVybiBCYXNlY2hhaW5BZGRyZXNzIHsgaGFz" +
- "aCB9Cn0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBiYXNlY2hhaW4g" +
- "YWRkcmVzcyBkZXJpdmVkIGZyb20gYSBjb250cmFjdCdzIGBTdGF0ZUluaXRgIChjb2RlIGFuZCBkYXRhKS4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgp" +
- "IHsKLy8vICAgICBsZXQgY29kZTogQ2VsbCA9IGxvYWRDZWxsKCk7IC8vIGxvYWQgY29udHJhY3QgY29kZQovLy8gICAgIGxldCBkYXRhOiBDZWxsID0gbG9hZENlbGwo" +
- "KTsgLy8gbG9hZCBjb250cmFjdCBkYXRhCi8vLyAgICAgbGV0IHN0YXRlOiBTdGF0ZUluaXQgPSBTdGF0ZUluaXQgeyBjb2RlLCBkYXRhIH07Ci8vLyAgICAgbGV0IGFk" +
- "ZHI6IEJhc2VjaGFpbkFkZHJlc3MgPSBjb250cmFjdEJhc2VjaGFpbkFkZHJlc3Moc3RhdGUpOwovLy8gfQovLy8gYGBgCi8vLwppbmxpbmUgZnVuIGNvbnRyYWN0QmFz" +
- "ZWNoYWluQWRkcmVzcyhzOiBTdGF0ZUluaXQpOiBCYXNlY2hhaW5BZGRyZXNzIHsKICAgIGxldCBoYXNoID0gY29udHJhY3RIYXNoKHMuY29kZSwgcy5kYXRhKTsKICAg" +
- "IHJldHVybiBuZXdCYXNlY2hhaW5BZGRyZXNzKGhhc2gpOwp9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuIEF2YWlsYWJsZSBz" +
- "aW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFN0b3JlcyB0aGUgYmFzZWNoYWluIGFkZHJlc3MgaW4gdGhlIGNvcHkgb2YgdGhlIEJ1aWxkZXIgYW5kIHJldHVybnMgdGhh" +
- "dCBjb3B5LgovLy8KLy8vIElmIHRoZSBhZGRyZXNzIGhhcyBhIGBudWxsYCBoYXNoLCBzdG9yZXMgMGIwMCAoYGFkZHJfbm9uZWApLiBPdGhlcndpc2UsIHN0b3JlcyB0" +
- "aGUgZnVsbCBhZGRyZXNzCi8vLyB3aXRoIHByZWZpeCAwYjEwMCBmb2xsb3dlZCBieSB3b3JrY2hhaW4gKDApIGFuZCB0aGUgMjU2LWJpdCBoYXNoLgovLy8KLy8vIGBg" +
- "YHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBhZGRyOiBCYXNlY2hhaW5BZGRyZXNzID0gbmV3QmFzZWNoYWluQWRkcmVzcygweDgzZGZkNTUyZTYz" +
- "NzI5YjQ3MmZjYmNjOGM0NWViY2M2NjkxNzAyNTU4YjY4ZWM3NTI3ZTFiYTQwM2EwZjMxYTgpOwovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8v" +
- "LyAgICAgbGV0IGIyOiBCdWlsZGVyID0gYi5zdG9yZUJhc2VjaGFpbkFkZHJlc3MoYWRkcik7Ci8vLyB9Ci8vLyBgYGAKLy8vCmV4dGVuZHMgZnVuIHN0b3JlQmFzZWNo" +
- "YWluQWRkcmVzcyhzZWxmOiBCdWlsZGVyLCBhZGRyZXNzOiBCYXNlY2hhaW5BZGRyZXNzKTogQnVpbGRlciB7CiAgICBpZiAoYWRkcmVzcy5oYXNoID09IG51bGwpIHsK" +
- "ICAgICAgICByZXR1cm4gc2VsZi5zdG9yZVVpbnQoMCwgMik7IC8vIDBiMDAKICAgIH0KCiAgICByZXR1cm4gc2VsZgogICAgICAgIC5zdG9yZVVpbnQoMGIxMF8wXzAw" +
- "MDAwMDAwLCAzICsgOCkKICAgICAgICAuc3RvcmVVaW50KGFkZHJlc3MuaGFzaCEhLCAyNTYpOwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2Ug" +
- "VGFjdCAxLjYuMy4KLy8vCi8vLyBDaGVja3Mgd2hldGhlciB0aGUgYGFkZHJlc3NgIGlzIGluIHRoZSBiYXNlY2hhaW4sIGkuZS4sIGl0cyBjaGFpbiBJRCBpcyAwLiBJ" +
- "ZiBpdCBpcyBub3QsIHRocm93cyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgMTM4OiBgTm90IGEgYmFzZWNoYWluIGFkZHJlc3NgLgovLy8KLy8vIGBgYHRhY3QK" +
- "Ly8vIGZ1biBleGFtcGxlcygpIHsKLy8vICAgICBsZXQgc29tZUJhc2VjaGFpbkFkZHJlc3M6IEFkZHJlc3MgPQovLy8gICAgICAgICBuZXdBZGRyZXNzKDAsIDB4ODNk" +
- "ZmQ1NTJlNjM3MjliNDcyZmNiY2M4YzQ1ZWJjYzY2OTE3MDI1NThiNjhlYzc1MjdlMWJhNDAzYTBmMzFhOCk7Ci8vLwovLy8gICAgIGxldCBzb21lTWFzdGVyY2hhaW5B" +
- "ZGRyZXNzOiBBZGRyZXNzID0KLy8vICAgICAgICAgbmV3QWRkcmVzcygtMSwgMHg4M2RmZDU1MmU2MzcyOWI0NzJmY2JjYzhjNDVlYmNjNjY5MTcwMjU1OGI2OGVjNzUy" +
- "N2UxYmE0MDNhMGYzMWE4KTsKLy8vCi8vLyAgICAgLy8gRG9lcyBub3QgdGhyb3cgYmVjYXVzZSB0aGUgY2hhaW4gSUQgaXMgMAovLy8gICAgIGZvcmNlQmFzZWNoYWlu" +
- "KHNvbWVCYXNlY2hhaW5BZGRyZXNzKTsKLy8vCi8vLyAgICAgdHJ5IHsKLy8vICAgICAgICAgLy8gVGhyb3dzIGJlY2F1c2UgdGhlIGNoYWluIElEIGlzIC0xIChtYXN0" +
- "ZXJjaGFpbikKLy8vICAgICAgICAgZm9yY2VCYXNlY2hhaW4oc29tZU1hc3RlcmNoYWluQWRkcmVzcyk7Ci8vLyAgICAgfSBjYXRjaCAoZXhpdENvZGUpIHsKLy8vICAg" +
- "ICAgICAgLy8gZXhpdENvZGUgaXMgMTM4Ci8vLyAgICAgfQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29y" +
- "ZS1hZHZhbmNlZCNmb3JjZWJhc2VjaGFpbgovLy8KYXNtIGZ1biBmb3JjZUJhc2VjaGFpbihhZGRyZXNzOiBBZGRyZXNzKSB7IFJFV1JJVEVTVERBRERSIERST1AgMTM4" +
- "IFRIUk9XSUYgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjQuCi8vLwovLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGBhZGRyZXNz" +
- "YCBpcyBpbiB0aGUgYHdvcmtjaGFpbmAsIGkuZS4sIGl0cyBjaGFpbiBJRCBpcyBlcXVhbCB0byBgd29ya2NoYWluYC4gSWYgaXQgaXMgbm90LCB0aHJvd3MgYW4gZXhj" +
- "ZXB0aW9uIHdpdGggZXhpdCBjb2RlIGBlcnJvckNvZGVgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlcygpIHsKLy8vICAgICBsZXQgc29tZUJhc2VjaGFp" +
- "bkFkZHJlc3M6IEFkZHJlc3MgPQovLy8gICAgICAgICBuZXdBZGRyZXNzKDAsIDB4ODNkZmQ1NTJlNjM3MjliNDcyZmNiY2M4YzQ1ZWJjYzY2OTE3MDI1NThiNjhlYzc1" +
- "MjdlMWJhNDAzYTBmMzFhOCk7Ci8vLwovLy8gICAgIGxldCBzb21lTWFzdGVyY2hhaW5BZGRyZXNzOiBBZGRyZXNzID0KLy8vICAgICAgICAgbmV3QWRkcmVzcygtMSwg" +
- "MHg4M2RmZDU1MmU2MzcyOWI0NzJmY2JjYzhjNDVlYmNjNjY5MTcwMjU1OGI2OGVjNzUyN2UxYmE0MDNhMGYzMWE4KTsKLy8vCi8vLyAgICAgLy8gRG9lcyBub3QgdGhy" +
- "b3cgYmVjYXVzZSB0aGUgY2hhaW4gSUQgbWF0Y2hlcyB3b3JrY2hhaW4gcGFyYW1ldGVyCi8vLyAgICAgZm9yY2VXb3JrY2hhaW4oc29tZUJhc2VjaGFpbkFkZHJlc3Ms" +
- "IDAsIDU5Myk7Ci8vLyAgICAgZm9yY2VXb3JrY2hhaW4oc29tZU1hc3RlcmNoYWluQWRkcmVzcywgLTEsIDU5Myk7Ci8vLwovLy8gICAgIHRyeSB7Ci8vLyAgICAgICAg" +
- "IC8vIFRocm93cyBiZWNhdXNlIHRoZSBjaGFpbiBJRCBpcyAwIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggdGhlIHdvcmtjaGFpbiBwYXJhbWV0ZXIsIC0xCi8vLyAgICAgICAg" +
- "IGZvcmNlV29ya2NoYWluKHNvbWVCYXNlY2hhaW5BZGRyZXNzLCAtMSwgNTkzKTsKLy8vICAgICB9IGNhdGNoIChleGl0Q29kZSkgewovLy8gICAgICAgICAvLyBleGl0" +
- "Q29kZSBpcyA1OTMKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2Zv" +
- "cmNld29ya2NoYWluCi8vLwphc20oZXJyb3JDb2RlIHdvcmtjaGFpbiBhZGRyZXNzKSBmdW4gZm9yY2VXb3JrY2hhaW4oYWRkcmVzczogQWRkcmVzcywgd29ya2NoYWlu" +
- "OiBJbnQsIGVycm9yQ29kZTogSW50KSB7CiAgICBSRVdSSVRFU1REQUREUgogICAgRFJPUAogICAgQ01QCiAgICBUSFJPV0FOWUlGCn0K";
+ "Y29yZS1hZGRyZXNzZXMjYWRkcmVzc2Fzc2xpY2UKLy8vCmV4dGVuZHMgZnVuIGFzQWRkcmVzcyhzZWxmOiBTbGljZSwgY2hhaW46IEludCk6IEFkZHJlc3MgewogICAg" +
+ "Ly8gMTEgYml0cyBmb3IgdGhlIHByZWZpeCwKICAgIC8vIDI1NiBiaXRzIGZvciB0aGUgYWRkcmVzcyBpdHNlbGYKICAgIHRocm93VW5sZXNzKDEzNiwgc2VsZi5iaXRz" +
+ "KCkgPT0gMjY3KTsKCiAgICBpZiAoY2hhaW4gPT0gLTEpIHsKICAgICAgICAvLyAxMjc5ID0gMGIxMDBfMTExMV8xMTExLAogICAgICAgIC8vIGkuZS4gaW50ZXJuYWwg" +
+ "YWRkcmVzcyBwcmVmaXggYW5kIGNoYWluIElEIC0xCiAgICAgICAgdGhyb3dVbmxlc3MoMTM2LCBzZWxmLnByZWxvYWRVaW50KDExKSA9PSAxMjc5KTsKICAgIH0gZWxz" +
+ "ZSB7CiAgICAgICAgLy8gT25seSBjaGVjayB0aGUgY29ycmVjdCBpbnRlcm5hbCBhZGRyZXNzIHByZWZpeCwKICAgICAgICAvLyBidXQgZG8gbm90IHZlcmlmeSB0aGUg" +
+ "Y2hhaW4gSUQKICAgICAgICB0aHJvd1VubGVzcygxMzYsIHNlbGYucHJlbG9hZFVpbnQoMykgPT0gNCk7CiAgICB9CgogICAgLy8gUHJvY2VlZCB3aXRoIHRoZSBjYXN0" +
+ "CiAgICByZXR1cm4gc2VsZi5hc0FkZHJlc3NVbnNhZmUoKTsKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNp" +
+ "bmNlIFRhY3QgMS42LjAuCi8vLwovLy8gVW5zYWZlbHkgY2FzdHMgdGhlIGBTbGljZWAgdG8gYW4gYEFkZHJlc3NgIGFuZCByZXR1cm5zIGl0LiBUaGUgaW52ZXJzZSBv" +
+ "ZiBgQWRkcmVzcy5hc1NsaWNlKClgLgovLy8KLy8vIFRoaXMgZnVuY3Rpb24gZG9lcyAqKm5vdCoqIHBlcmZvcm0gYW55IGNoZWNrcyBvbiB0aGUgY29udGVudHMgb2Yg" +
+ "dGhlIGBTbGljZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGE6IEFkZHJlc3MgPSBteUFkZHJlc3MoKTsKLy8vICAgICBs" +
+ "ZXQgYTI6IEFkZHJlc3MgPSBhLmFzU2xpY2UoKS5hc0FkZHJlc3NVbnNhZmUoKTsKLy8vCi8vLyAgICAgYSA9PSBhMjsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwov" +
+ "Ly8gVXNlIGl0IG9ubHkgaWYgeW91IHdhbnQgdG8gb3B0aW1pemUgdGhlIGNvZGUgZm9yIGdhcyBhbmQgY2FuIGd1YXJhbnRlZSBpbiBhZHZhbmNlIHRoYXQgdGhlIGBT" +
+ "bGljZWAgY29udGFpbnMgdGhlIGRhdGEgb2YgYW4gYEFkZHJlc3NgLgovLy8KLy8vIE90aGVyd2lzZSwgdXNlIGEgc2FmZXIgYnV0IG1vcmUgZ2FzLWV4cGVuc2l2ZSBg" +
+ "U2xpY2UuYXNBZGRyZXNzKClgIGZ1bmN0aW9uLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vh" +
+ "c2FkZHJlc3N1bnNhZmUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vhc2FkZHJlc3MKLy8vICogaHR0cHM6Ly9kb2Nz" +
+ "LnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWRkcmVzc2VzI2FkZHJlc3Nhc3NsaWNlCi8vLwphc20gZXh0ZW5kcyBmdW4gYXNBZGRyZXNzVW5zYWZlKHNlbGY6IFNsaWNl" +
+ "KTogQWRkcmVzcyB7fQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBBZGRyZXNzYCB0eXBlLgovLy8KLy8vIENhc3RzIGBzZWxmYCBiYWNrIHRvIHRoZSB1" +
+ "bmRlcmx5aW5nIGBTbGljZWAgYW5kIHJldHVybnMgaXQuIFRoZSBpbnZlcnNlIG9mIGBTbGljZS5hc0FkZHJlc3NVbnNhZmUoKWAuCi8vLwovLy8gYGBgdGFjdAovLy8g" +
+ "ZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGE6IEFkZHJlc3MgPSBteUFkZHJlc3MoKTsKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9y" +
+ "ZUFkZHJlc3MoYSkuYXNTbGljZSgpOwovLy8gICAgIGxldCBidXp6OiBTbGljZSA9IGEuYXNTbGljZSgpOyAvLyBjaGVhcCwgdW5saWtlIHRoZSBwcmV2aW91cyBzdGF0" +
+ "ZW1lbnQKLy8vCi8vLyAgICAgZml6eiA9PSBidXp6OyAvLyB0cnVlCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcu" +
+ "b3JnL3JlZi9jb3JlLWFkZHJlc3NlcyNhZGRyZXNzYXNzbGljZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzYWRk" +
+ "cmVzc3Vuc2FmZQovLy8KYXNtIGV4dGVuZHMgZnVuIGFzU2xpY2Uoc2VsZjogQWRkcmVzcyk6IFNsaWNlIHt9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENy" +
+ "ZWF0ZXMgYSBuZXcgYEFkZHJlc3NgIGJhc2VkIG9uIHRoZSBgY2hhaW5gIElEIGFuZCB0aGUgU0hBLTI1NiBlbmNvZGVkIGBoYXNoYCB2YWx1ZSAoYWNjb3VudCBJRCku" +
+ "Ci8vLwovLy8gVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZXNvbHZlIGNvbnN0YW50IHZhbHVlcyBpbiBjb21waWxlLXRpbWUgd2hlbmV2ZXIgcG9zc2libGUuCi8vLwov" +
+ "Ly8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBpbnZhbGlkIGBjaGFpbmAgSUQgKG5vdCAtMSBvciAwKSB0aGF0IGNhbiBiZSBkZXRlY3RlZCBpbiBjb21waWxlLXRpbWUg" +
+ "d2lsbCByZXN1bHQgaW4gYSBjb21waWxhdGlvbiBlcnJvci4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgb2xkVG9uRm91bmRh" +
+ "dGlvbkFkZHI6IEFkZHJlc3MgPQovLy8gICAgICAgICBuZXdBZGRyZXNzKDAsIDB4ODNkZmQ1NTJlNjM3MjliNDcyZmNiY2M4YzQ1ZWJjYzY2OTE3MDI1NThiNjhlYzc1" +
+ "MjdlMWJhNDAzYTBmMzFhOCk7Ci8vLyAgICAgICAgIC8vICAgICAgICAg4oaRICDihpEKLy8vICAgICAgICAgLy8gICAgICAgICB8ICBzaGEtMjU2IGhhc2ggb2YgY29u" +
+ "dHJhY3QncyBpbml0IHBhY2thZ2UgKFN0YXRlSW5pdCkKLy8vICAgICAgICAgLy8gICAgICAgICBjaGFpbiBpZDogMCBpcyBhIHdvcmtjaGFpbiwgLTEgaXMgYSBtYXN0" +
+ "ZXJjaGFpbgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZGRyZXNzZXMjbmV3YWRkcmVzcwovLy8K" +
+ "aW5saW5lIGZ1biBuZXdBZGRyZXNzKGNoYWluOiBJbnQsIGhhc2g6IEludCk6IEFkZHJlc3MgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlVWlu" +
+ "dCgwYjEwXzAsIDMpCiAgICAgICAgLnN0b3JlSW50KGNoYWluLCA4KQogICAgICAgIC5zdG9yZVVpbnQoaGFzaCwgMjU2KQogICAgICAgIC5lbmRDZWxsKCkKICAgICAg" +
+ "ICAuYXNTbGljZSgpCiAgICAgICAgLmFzQWRkcmVzc1Vuc2FmZSgpOwp9CgovLy8gU3RydWN0IHJlcHJlc2VudGluZyB0aGUgc3RhbmRhcmQgYWRkcmVzcyBvbiBUT04g" +
+ "QmxvY2tjaGFpbiB3aXRoIHNpZ25lZCA4LWJpdCBgd29ya2NoYWluYCBJRCBhbmQgYW4gdW5zaWduZWQgMjU2LWJpdCBgYWRkcmVzc2AgaW4gdGhlIHNwZWNpZmllZCBg" +
+ "d29ya2NoYWluYC4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQXQgdGhlIG1vbWVudCwgb25seSBgd29ya2NoYWluYCBJRHMgdXNlZCBvbiBUT04g" +
+ "YXJlIDAgb2YgdGhlIGJhc2VjaGFpbiBhbmQgLTEgb2YgdGhlIG1hc3RlcmNoYWluLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcv" +
+ "cmVmL2NvcmUtYWRkcmVzc2VzI3BhcnNlc3RkYWRkcmVzcwovLy8gKiBodHRwczovL2dpdGh1Yi5jb20vdG9uLWJsb2NrY2hhaW4vdG9uL2Jsb2IvbWFzdGVyL2NyeXB0" +
+ "by9ibG9jay9ibG9jay50bGIjTDEwNS1MMTA2Ci8vLwpzdHJ1Y3QgU3RkQWRkcmVzcyB7CiAgICB3b3JrY2hhaW46IEludCBhcyBpbnQ4OwogICAgYWRkcmVzczogSW50" +
+ "IGFzIHVpbnQyNTY7Cn0KCi8vLyBTdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIG9mIHZhcmlhYmxlIGxlbmd0aCB3aXRoIHNpZ25lZCAzMi1iaXQgYHdvcmtj" +
+ "aGFpbmAgSUQgYW5kIGEgYFNsaWNlYCBjb250YWluaW5nIHVuc2lnbmVkIGBhZGRyZXNzYCBpbiB0aGUgc3BlY2lmaWVkIGB3b3JrY2hhaW5gLiBBdmFpbGFibGUgc2lu" +
+ "Y2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBWYXJpYWJsZS1sZW5ndGggYWRkcmVzc2VzIGFyZSBpbnRlbmRlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMsIGFuZCB3aGlsZSB2" +
+ "YWxpZGF0b3JzIG11c3QgYmUgcmVhZHkgdG8gYWNjZXB0IHRoZW0gaW4gaW5ib3VuZCBtZXNzYWdlcywgdGhlIHN0YW5kYXJkIChub24tdmFyaWFibGUpIGFkZHJlc3Nl" +
+ "cyBhcmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZS4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkZHJlc3NlcyNw" +
+ "YXJzZXZhcmFkZHJlc3MKLy8vICogaHR0cHM6Ly9naXRodWIuY29tL3Rvbi1ibG9ja2NoYWluL3Rvbi9ibG9iL21hc3Rlci9jcnlwdG8vYmxvY2svYmxvY2sudGxiI0wx" +
+ "MDctTDEwOAovLy8Kc3RydWN0IFZhckFkZHJlc3MgewogICAgd29ya2NoYWluOiBJbnQgYXMgaW50MzI7CiAgICBhZGRyZXNzOiBTbGljZTsKfQoKLy8vIEdsb2JhbCBm" +
+ "dW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQ29udmVydHMgYSBgc2xpY2VgIGNvbnRhaW5pbmcgYW4gYWRkcmVzcyBpbnRvIHRoZSBg" +
+ "U3RkQWRkcmVzc2AgU3RydWN0IGFuZCByZXR1cm5zIGl0LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBhZGRyID0gYWRkcmVz" +
+ "cygiRVFEdEZwRXdjRkFFY1JlNW1MVmgyTjZDMHgtX2hKRU03VzYxX0pMblNGNzRwNHEyIik7Ci8vLyAgICAgbGV0IHBhcnNlZEFkZHIgPSBwYXJzZVN0ZEFkZHJlc3Mo" +
+ "YWRkci5hc1NsaWNlKCkpOwovLy8KLy8vICAgICBwYXJzZWRBZGRyLndvcmtjaGFpbjsgLy8gMAovLy8gICAgIHBhcnNlZEFkZHIuYWRkcmVzczsgICAvLyAxMDcuLi4y" +
+ "ODcKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWRkcmVzc2VzI3BhcnNlc3RkYWRkcmVzcwovLy8K" +
+ "YXNtIGZ1biBwYXJzZVN0ZEFkZHJlc3Moc2xpY2U6IFNsaWNlKTogU3RkQWRkcmVzcyB7IFJFV1JJVEVTVERBRERSIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWls" +
+ "YWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIENvbnZlcnRzIGEgYHNsaWNlYCBjb250YWluaW5nIGFuIGFkZHJlc3Mgb2YgdmFyaWFibGUgbGVuZ3RoIGludG8g" +
+ "dGhlIGBWYXJBZGRyZXNzYCBTdHJ1Y3QgYW5kIHJldHVybnMgaXQuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHZhckFkZHJT" +
+ "bGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAgICAgIC5zdG9yZVVpbnQoNiwgMykgICAgIC8vIHRvIHJlY29nbml6ZSB0aGUgZm9sbG93aW5nIGFzIGEgVmFyQWRkcmVz" +
+ "cwovLy8gICAgICAgICAuc3RvcmVVaW50KDEyMywgOSkgICAvLyBtYWtlIGFkZHJlc3Mgb2NjdXB5IDEyMyBiaXRzCi8vLyAgICAgICAgIC5zdG9yZVVpbnQoMjM0LCAz" +
+ "MikgIC8vIHNwZWNpZnkgd29ya2NoYWluIElEIG9mIDIzNAovLy8gICAgICAgICAuc3RvcmVVaW50KDM0NSwgMTIzKSAvLyBzcGVjaWZ5IGFkZHJlc3Mgb2YgMzQ1Ci8v" +
+ "LyAgICAgICAgIC5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IHBhcnNlZFZhckFkZHIgPSBwYXJzZVZhckFkZHJlc3ModmFyQWRkclNsaWNlKTsKLy8vCi8vLyAgICAgcGFy" +
+ "c2VkVmFyQWRkci53b3JrY2hhaW47ICAgICAgICAgICAgIC8vIDIzNAovLy8gICAgIHBhcnNlZFZhckFkZHIuYWRkcmVzczsgICAgICAgICAgICAgICAvLyBDU3tDZWxs" +
+ "ezAwMi4uLjJiM30gYml0czogNDQuLjE2NzsgcmVmczogMC4uMH0KLy8vICAgICBwYXJzZWRWYXJBZGRyLmFkZHJlc3MubG9hZFVpbnQoMTIzKTsgLy8gMzQ1Ci8vLyB9" +
+ "Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkZHJlc3NlcyNwYXJzZXZhcmFkZHJlc3MKLy8vCmFzbSBmdW4g" +
+ "cGFyc2VWYXJBZGRyZXNzKHNsaWNlOiBTbGljZSk6IFZhckFkZHJlc3MgeyBSRVdSSVRFVkFSQUREUiB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZv" +
+ "ciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIExvYWRzIGFuZCByZXR1cm5zIGFuIGBBZGRyZXNzYCBmcm9tIHRoZSBgU2xpY2VgLgovLy8KLy8vIEF0dGVtcHRzIHRv" +
+ "IGxvYWQgc3VjaCBgQWRkcmVzc2Agd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwg" +
+ "b3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxvYWQgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0" +
+ "IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwo" +
+ "KS5zdG9yZUFkZHJlc3MobXlBZGRyZXNzKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogQWRkcmVzcyA9IHMubG9hZEFkZHJlc3MoKTsKLy8vIH0KLy8vIGBg" +
+ "YAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkYWRkcmVzcwovLy8KYXNtKCAtPiAxIDApIGV4dGVu" +
+ "ZHMgbXV0YXRlcyBmdW4gbG9hZEFkZHJlc3Moc2VsZjogU2xpY2UpOiBBZGRyZXNzIHsgTERNU0dBRERSIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24g" +
+ "Zm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4yLgovLy8KLy8vIFNraXBzIGFuIGBBZGRyZXNzYCBmcm9tIHRoZSBgU2xpY2VgLgov" +
+ "Ly8KLy8vIEF0dGVtcHRzIHRvIHNraXAgc3VjaCBgQWRkcmVzc2Agd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBl" +
+ "eGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBl" +
+ "eGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczE6" +
+ "IFNsaWNlID0gYmVnaW5DZWxsKCkKLy8vICAgICAgICAgLnN0b3JlQWRkcmVzcyhteUFkZHJlc3MoKSkKLy8vICAgICAgICAgLnN0b3JlVWludCg0MiwgMzIpCi8vLyAg" +
+ "ICAgICAgIC5hc1NsaWNlKCk7Ci8vLwovLy8gICAgIHMxLnNraXBBZGRyZXNzKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMxLmxvYWRVaW50KDMyKTsgLy8gNDIK" +
+ "Ly8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkYWRkcmVzcwovLy8KYXNtIGV4" +
+ "dGVuZHMgbXV0YXRlcyBmdW4gc2tpcEFkZHJlc3Moc2VsZjogU2xpY2UpIHsgTERNU0dBRERSIE5JUCB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1" +
+ "aWxkZXJgIHR5cGUuCi8vLwovLy8gU3RvcmVzIHRoZSBgYWRkcmVzc2AgaW4gdGhlIGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4gUmV0dXJucyB0aGF0IGNvcHkuCi8vLwov" +
+ "Ly8gQXR0ZW1wdHMgdG8gc3RvcmUgYW4gYGFkZHJlc3NgIGludG8gdGhlIGBCdWlsZGVyYCBgc2VsZmAsIGlmIGBzZWxmYCBjYW5ub3QgZml0IGl0LCB0aHJvdyBhbiBl" +
+ "eGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBC" +
+ "dWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlQWRkcmVzcyhteUFkZHJlc3MoKSk7Ci8vLyB9Ci8vLyBgYGAKLy8v" +
+ "Ci8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1aWxkZXJzdG9yZWFkZHJlc3MKLy8vCmFzbSBleHRlbmRzIGZ1biBzdG9y" +
+ "ZUFkZHJlc3Moc2VsZjogQnVpbGRlciwgYWRkcmVzczogQWRkcmVzcyk6IEJ1aWxkZXIgeyBTVFNMSUNFUiB9CgovLy8gU3RydWN0IHJlcHJlc2VudGluZyBhIGJhc2Vj" +
+ "aGFpbiBhZGRyZXNzLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBBIGJhc2VjaGFpbiBhZGRyZXNzICh3b3JrY2hhaW4gMCkgY2FuIGJlIGVpdGhl" +
+ "ciBlbXB0eSAobnVsbCBoYXNoKSBvciBjb250YWluIGEgMjU2LWJpdCBoYXNoIHZhbHVlLgovLy8Kc3RydWN0IEJhc2VjaGFpbkFkZHJlc3MgewogICAgaGFzaDogSW50" +
+ "PzsKfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBlbXB0eSBiYXNl" +
+ "Y2hhaW4gYWRkcmVzcyB3aXRoIGEgbnVsbCBoYXNoLgovLy8KLy8vIFdoZW4gc2VyaWFsaXplZCwgYW4gZW1wdHkgYmFzZWNoYWluIGFkZHJlc3MgaXMgcmVwcmVzZW50" +
+ "ZWQgYXMgYGFkZHJfbm9uZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGVtcHR5QWRkcjogQmFzZWNoYWluQWRkcmVzcyA9" +
+ "IGVtcHR5QmFzZWNoYWluQWRkcmVzcygpOwovLy8gICAgIGVtcHR5QWRkci5oYXNoID09IG51bGw7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KaW5saW5lIGZ1biBl" +
+ "bXB0eUJhc2VjaGFpbkFkZHJlc3MoKTogQmFzZWNoYWluQWRkcmVzcyB7CiAgICByZXR1cm4gQmFzZWNoYWluQWRkcmVzcyB7IGhhc2g6IG51bGwgfQp9CgovLy8gR2xv" +
+ "YmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGJhc2VjaGFpbiBhZGRyZXNzIHdp" +
+ "dGggdGhlIHNwZWNpZmllZCBoYXNoIHZhbHVlLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBhZGRyOiBCYXNlY2hhaW5BZGRy" +
+ "ZXNzID0gbmV3QmFzZWNoYWluQWRkcmVzcygweDgzZGZkNTUyZTYzNzI5YjQ3MmZjYmNjOGM0NWViY2M2NjkxNzAyNTU4YjY4ZWM3NTI3ZTFiYTQwM2EwZjMxYTgpOwov" +
+ "Ly8gfQovLy8gYGBgCi8vLwppbmxpbmUgZnVuIG5ld0Jhc2VjaGFpbkFkZHJlc3MoaGFzaDogSW50KTogQmFzZWNoYWluQWRkcmVzcyB7CiAgICByZXR1cm4gQmFzZWNo" +
+ "YWluQWRkcmVzcyB7IGhhc2ggfQp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDcmVhdGVzIGFuZCByZXR1" +
+ "cm5zIGEgYmFzZWNoYWluIGFkZHJlc3MgZGVyaXZlZCBmcm9tIGEgY29udHJhY3QncyBgU3RhdGVJbml0YCAoY29kZSBhbmQgZGF0YSkuCi8vLwovLy8gYGBgdGFjdAov" +
+ "Ly8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGNvZGU6IENlbGwgPSBsb2FkQ2VsbCgpOyAvLyBsb2FkIGNvbnRyYWN0IGNvZGUKLy8vICAgICBsZXQgZGF0YTog" +
+ "Q2VsbCA9IGxvYWRDZWxsKCk7IC8vIGxvYWQgY29udHJhY3QgZGF0YQovLy8gICAgIGxldCBzdGF0ZTogU3RhdGVJbml0ID0gU3RhdGVJbml0IHsgY29kZSwgZGF0YSB9" +
+ "OwovLy8gICAgIGxldCBhZGRyOiBCYXNlY2hhaW5BZGRyZXNzID0gY29udHJhY3RCYXNlY2hhaW5BZGRyZXNzKHN0YXRlKTsKLy8vIH0KLy8vIGBgYAovLy8KaW5saW5l" +
+ "IGZ1biBjb250cmFjdEJhc2VjaGFpbkFkZHJlc3MoczogU3RhdGVJbml0KTogQmFzZWNoYWluQWRkcmVzcyB7CiAgICBsZXQgaGFzaCA9IGNvbnRyYWN0SGFzaChzLmNv" +
+ "ZGUsIHMuZGF0YSk7CiAgICByZXR1cm4gbmV3QmFzZWNoYWluQWRkcmVzcyhoYXNoKTsKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0" +
+ "eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTdG9yZXMgdGhlIGJhc2VjaGFpbiBhZGRyZXNzIGluIHRoZSBjb3B5IG9mIHRoZSBCdWlsZGVy" +
+ "IGFuZCByZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBJZiB0aGUgYWRkcmVzcyBoYXMgYSBgbnVsbGAgaGFzaCwgc3RvcmVzIDBiMDAgKGBhZGRyX25vbmVgKS4gT3Ro" +
+ "ZXJ3aXNlLCBzdG9yZXMgdGhlIGZ1bGwgYWRkcmVzcwovLy8gd2l0aCBwcmVmaXggMGIxMDAgZm9sbG93ZWQgYnkgd29ya2NoYWluICgwKSBhbmQgdGhlIDI1Ni1iaXQg" +
+ "aGFzaC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYWRkcjogQmFzZWNoYWluQWRkcmVzcyA9IG5ld0Jhc2VjaGFpbkFkZHJl" +
+ "c3MoMHg4M2RmZDU1MmU2MzcyOWI0NzJmY2JjYzhjNDVlYmNjNjY5MTcwMjU1OGI2OGVjNzUyN2UxYmE0MDNhMGYzMWE4KTsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9" +
+ "IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBiMjogQnVpbGRlciA9IGIuc3RvcmVCYXNlY2hhaW5BZGRyZXNzKGFkZHIpOwovLy8gfQovLy8gYGBgCi8vLwpleHRlbmRz" +
+ "IGZ1biBzdG9yZUJhc2VjaGFpbkFkZHJlc3Moc2VsZjogQnVpbGRlciwgYWRkcmVzczogQmFzZWNoYWluQWRkcmVzcyk6IEJ1aWxkZXIgewogICAgaWYgKGFkZHJlc3Mu" +
+ "aGFzaCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHNlbGYuc3RvcmVVaW50KDAsIDIpOyAvLyAwYjAwCiAgICB9CgogICAgcmV0dXJuIHNlbGYKICAgICAgICAuc3Rv" +
+ "cmVVaW50KDBiMTBfMF8wMDAwMDAwMCwgMyArIDgpCiAgICAgICAgLnN0b3JlVWludChhZGRyZXNzLmhhc2ghISwgMjU2KTsKfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4g" +
+ "QXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjMuCi8vLwovLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGBhZGRyZXNzYCBpcyBpbiB0aGUgYmFzZWNoYWluLCBpLmUuLCBpdHMg" +
+ "Y2hhaW4gSUQgaXMgMC4gSWYgaXQgaXMgbm90LCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDEzODogYE5vdCBhIGJhc2VjaGFpbiBhZGRyZXNzYC4K" +
+ "Ly8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZXMoKSB7Ci8vLyAgICAgbGV0IHNvbWVCYXNlY2hhaW5BZGRyZXNzOiBBZGRyZXNzID0KLy8vICAgICAgICAgbmV3" +
+ "QWRkcmVzcygwLCAweDgzZGZkNTUyZTYzNzI5YjQ3MmZjYmNjOGM0NWViY2M2NjkxNzAyNTU4YjY4ZWM3NTI3ZTFiYTQwM2EwZjMxYTgpOwovLy8KLy8vICAgICBsZXQg" +
+ "c29tZU1hc3RlcmNoYWluQWRkcmVzczogQWRkcmVzcyA9Ci8vLyAgICAgICAgIG5ld0FkZHJlc3MoLTEsIDB4ODNkZmQ1NTJlNjM3MjliNDcyZmNiY2M4YzQ1ZWJjYzY2" +
+ "OTE3MDI1NThiNjhlYzc1MjdlMWJhNDAzYTBmMzFhOCk7Ci8vLwovLy8gICAgIC8vIERvZXMgbm90IHRocm93IGJlY2F1c2UgdGhlIGNoYWluIElEIGlzIDAKLy8vICAg" +
+ "ICBmb3JjZUJhc2VjaGFpbihzb21lQmFzZWNoYWluQWRkcmVzcyk7Ci8vLwovLy8gICAgIHRyeSB7Ci8vLyAgICAgICAgIC8vIFRocm93cyBiZWNhdXNlIHRoZSBjaGFp" +
+ "biBJRCBpcyAtMSAobWFzdGVyY2hhaW4pCi8vLyAgICAgICAgIGZvcmNlQmFzZWNoYWluKHNvbWVNYXN0ZXJjaGFpbkFkZHJlc3MpOwovLy8gICAgIH0gY2F0Y2ggKGV4" +
+ "aXRDb2RlKSB7Ci8vLyAgICAgICAgIC8vIGV4aXRDb2RlIGlzIDEzOAovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3Qt" +
+ "bGFuZy5vcmcvcmVmL2NvcmUtYWRkcmVzc2VzI2ZvcmNlYmFzZWNoYWluCi8vLwphc20gZnVuIGZvcmNlQmFzZWNoYWluKGFkZHJlc3M6IEFkZHJlc3MpIHsgUkVXUklU" +
+ "RVNUREFERFIgRFJPUCAxMzggVEhST1dJRiB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuNC4KLy8vCi8vLyBDaGVja3Mgd2hl" +
+ "dGhlciB0aGUgYGFkZHJlc3NgIGlzIGluIHRoZSBgd29ya2NoYWluYCwgaS5lLiwgaXRzIGNoYWluIElEIGlzIGVxdWFsIHRvIGB3b3JrY2hhaW5gLiBJZiBpdCBpcyBu" +
+ "b3QsIHRocm93cyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgYGVycm9yQ29kZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8gICAg" +
+ "IGxldCBzb21lQmFzZWNoYWluQWRkcmVzczogQWRkcmVzcyA9Ci8vLyAgICAgICAgIG5ld0FkZHJlc3MoMCwgMHg4M2RmZDU1MmU2MzcyOWI0NzJmY2JjYzhjNDVlYmNj" +
+ "NjY5MTcwMjU1OGI2OGVjNzUyN2UxYmE0MDNhMGYzMWE4KTsKLy8vCi8vLyAgICAgbGV0IHNvbWVNYXN0ZXJjaGFpbkFkZHJlc3M6IEFkZHJlc3MgPQovLy8gICAgICAg" +
+ "ICBuZXdBZGRyZXNzKC0xLCAweDgzZGZkNTUyZTYzNzI5YjQ3MmZjYmNjOGM0NWViY2M2NjkxNzAyNTU4YjY4ZWM3NTI3ZTFiYTQwM2EwZjMxYTgpOwovLy8KLy8vICAg" +
+ "ICAvLyBEb2VzIG5vdCB0aHJvdyBiZWNhdXNlIHRoZSBjaGFpbiBJRCBtYXRjaGVzIHdvcmtjaGFpbiBwYXJhbWV0ZXIKLy8vICAgICBmb3JjZVdvcmtjaGFpbihzb21l" +
+ "QmFzZWNoYWluQWRkcmVzcywgMCwgNTkzKTsKLy8vICAgICBmb3JjZVdvcmtjaGFpbihzb21lTWFzdGVyY2hhaW5BZGRyZXNzLCAtMSwgNTkzKTsKLy8vCi8vLyAgICAg" +
+ "dHJ5IHsKLy8vICAgICAgICAgLy8gVGhyb3dzIGJlY2F1c2UgdGhlIGNoYWluIElEIGlzIDAgd2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgd29ya2NoYWluIHBhcmFtZXRl" +
+ "ciwgLTEKLy8vICAgICAgICAgZm9yY2VXb3JrY2hhaW4oc29tZUJhc2VjaGFpbkFkZHJlc3MsIC0xLCA1OTMpOwovLy8gICAgIH0gY2F0Y2ggKGV4aXRDb2RlKSB7Ci8v" +
+ "LyAgICAgICAgIC8vIGV4aXRDb2RlIGlzIDU5MwovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" +
+ "L2NvcmUtYWRkcmVzc2VzI2ZvcmNld29ya2NoYWluCi8vLwphc20oZXJyb3JDb2RlIHdvcmtjaGFpbiBhZGRyZXNzKSBmdW4gZm9yY2VXb3JrY2hhaW4oYWRkcmVzczog" +
+ "QWRkcmVzcywgd29ya2NoYWluOiBJbnQsIGVycm9yQ29kZTogSW50KSB7CiAgICBSRVdSSVRFU1REQUREUgogICAgRFJPUAogICAgQ01QCiAgICBUSFJPV0FOWUlGCn0K";
files["std/internal/base.tact"] =
"Ly8vIERlc2NyaWJlcyB0aGUgYmFzZSBsb2dpYyB0aGF0IGlzIGF2YWlsYWJsZSBpbiBhbGwgY29udHJhY3RzIGFuZCB0cmFpdHMgYnkgZGVmYXVsdC4KLy8vCi8vLyBU" +
"aGlzIHRyYWl0IGlzIGltcGxpY2l0bHkgaW5oZXJpdGVkIGJ5IGV2ZXJ5IG90aGVyIGNvbnRyYWN0IGFuZCB0cmFpdC4KLy8vIEl0IGNvbnRhaW5zIGEgbnVtYmVyIG9m" +
@@ -339,587 +342,587 @@ files["std/internal/base.tact"] =
"d2FyZCgpYCBmdW5jdGlvbiwKICAgIC8vLyAgICAgLy8gY2F1c2luZyBpdCB0byB0cnkgcmVzZXJ2aW5nIHRoaXMgYW1vdW50IG9mIG5hbm9Ub25jb2lucyBiZWZvcmUK" +
"ICAgIC8vLyAgICAgLy8gZm9yd2FyZGluZyBhIG1lc3NhZ2Ugd2l0aCBgU2VuZFJlbWFpbmluZ0JhbGFuY2VgIG1vZGUKICAgIC8vLyAgICAgb3ZlcnJpZGUgY29uc3Qg" +
"c3RvcmFnZVJlc2VydmU6IEludCA9IHRvbigiMC4xIik7CiAgICAvLy8gfQogICAgLy8vIGBgYAogICAgLy8vCiAgICAvLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1s" +
- "YW5nLm9yZy9yZWYvY29yZS1iYXNlLyNzZWxmLWZvcndhcmQKICAgIHZpcnR1YWwgY29uc3Qgc3RvcmFnZVJlc2VydmU6IEludCA9IDA7CiAgICAKICAgIC8vLyBTZW5k" +
- "cyBhIGJvdW5jZWFibGUgbWVzc2FnZSBiYWNrIHRvIHRoZSBzZW5kZXIgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZS4KICAgIC8vLyBBbiBhbGlhcyBmdW5jdGlvbiB0byBj" +
- "YWxsaW5nIHRoZSBgc2VsZi5mb3J3YXJkKClgIGZ1bmN0aW9uIHdpdGgKICAgIC8vLyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKICAgIC8vLwogICAgLy8vIGBgYHRh" +
- "Y3QKICAgIC8vLyBzZWxmLmZvcndhcmQoc2VuZGVyKCksIGJvZHksIHRydWUsIG51bGwpOwogICAgLy8vICAgICAgICAgICAgICDihpEgICAgICAgICDihpEgICAgIOKG" +
- "kSAgICAg4oaRCiAgICAvLy8gICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICB8ICAgICBpbml0OiBTdGF0ZUluaXQ/CiAgICAvLy8gICAgICAgICAgICAgIHwgICAg" +
- "ICAgICB8ICAgICBib3VuY2U6IEJvb2wKICAgIC8vLyAgICAgICAgICAgICAgfCAgICAgICAgIGJvZHk6IENlbGw/CiAgICAvLy8gICAgICAgICAgICAgIHRvOiBBZGRy" +
- "ZXNzCiAgICAvLy8gYGBgCiAgICB2aXJ0dWFsIGlubGluZSBmdW4gcmVwbHkoYm9keTogQ2VsbD8pIHsKICAgICAgICBzZWxmLmZvcndhcmQoc2VuZGVyKCksIGJvZHks" +
- "IHRydWUsIG51bGwpOwogICAgfQoKICAgIC8vLyBTZW5kcyBhIG5vbi1ib3VuY2VhYmxlIG1lc3NhZ2UgYmFjayB0byB0aGUgc2VuZGVyIG9mIHRoZSBjdXJyZW50IG1l" +
- "c3NhZ2UuCiAgICAvLy8gQW4gYWxpYXMgZnVuY3Rpb24gdG8gY2FsbGluZyB0aGUgYHNlbGYuZm9yd2FyZCgpYCBmdW5jdGlvbiB3aXRoCiAgICAvLy8gdGhlIGZvbGxv" +
- "d2luZyBhcmd1bWVudHM6CiAgICAvLy8KICAgIC8vLyBgYGB0YWN0CiAgICAvLy8gc2VsZi5mb3J3YXJkKHNlbmRlcigpLCBib2R5LCBmYWxzZSwgbnVsbCk7CiAgICAv" +
- "Ly8gICAgICAgICAgICAgIOKGkSAgICAgICAgIOKGkSAgICAg4oaRICAgICDihpEKICAgIC8vLyAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHwgICAgIGluaXQ6" +
- "IFN0YXRlSW5pdD8KICAgIC8vLyAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIGJvdW5jZTogQm9vbAogICAgLy8vICAgICAgICAgICAgICB8ICAgICAgICAgYm9k" +
- "eTogQ2VsbD8KICAgIC8vLyAgICAgICAgICAgICAgdG86IEFkZHJlc3MKICAgIC8vLyBgYGAKICAgIHZpcnR1YWwgaW5saW5lIGZ1biBub3RpZnkoYm9keTogQ2VsbD8p" +
- "IHsKICAgICAgICBzZWxmLmZvcndhcmQoc2VuZGVyKCksIGJvZHksIGZhbHNlLCBudWxsKTsKICAgIH0KCiAgICAvLy8gUXVldWVzIHRoZSBtZXNzYWdlIChib3VuY2Vh" +
- "YmxlIG9yIG5vbi1ib3VuY2VhYmxlKSB0byBiZSBzZW50IHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgdG9gLgogICAgLy8vIE9wdGlvbmFsbHksIHlvdSBtYXkgcHJv" +
- "dmlkZSBhIGBib2R5YCBvZiB0aGUgbWVzc2FnZSBhbmQgdGhlIGBpbml0YCBwYWNrYWdlIHdpdGggYGluaXRPZmAuCiAgICAvLy8gCiAgICAvLy8gV2hlbiBgc2VsZi5z" +
- "dG9yYWdlUmVzZXJ2ZWAgY29uc3RhbnQgaXMgb3ZlcndyaXR0ZW4gdG8gYmUgZ3JlYXRlciB0aGFuIHplcm8sIGJlZm9yZSBzZW5kaW5nIGEKICAgIC8vLyBtZXNzYWdl" +
- "IGl0IGFsc28gdHJpZXMgdG8gcmVzZXJ2ZSB0aGUgYHNlbGYuc3RvcmFnZVJlc2VydmVgIGFtb3VudCBvZiBuYW5vVG9uY29pbnMgZnJvbSB0aGUKICAgIC8vLyByZW1h" +
- "aW5pbmcgYmFsYW5jZSBiZWZvcmUgbWFraW5nIHRoZSBzZW5kIGluIHRoZSBgU2VuZFJlbWFpbmluZ0JhbGFuY2VgICgxMjgpIG1vZGUuCiAgICAvLy8KICAgIC8vLyBJ" +
- "biBjYXNlIHJlc2VydmF0aW9uIGF0dGVtcHQgZmFpbHMgYW5kIGluIHRoZSBkZWZhdWx0IGNhc2Ugd2l0aG91dCB0aGUgYXR0ZW1wdCwgdGhlIG1lc3NhZ2UgCiAgICAv" +
- "Ly8gaXMgc2VudCB3aXRoIHRoZSBgU2VuZFJlbWFpbmluZ1ZhbHVlYCAoNjQpIG1vZGUgaW5zdGVhZC4KICAgIC8vLwogICAgLy8vID4gTm90ZSB0aGF0IGBzZWxmLmZv" +
- "cndhcmQoKWAgbmV2ZXIgc2VuZHMgYWRkaXRpb25hbCBuYW5vVG9uY29pbnMgb24gdG9wIG9mIHdoYXTigJlzIGF2YWlsYWJsZSBvbiB0aGUgYmFsYW5jZS4KICAgIC8v" +
- "LyA+IFRvIGJlIGFibGUgdG8gc2VuZCBtb3JlIG5hbm9Ub25jb2lucyB3aXRoIGEgc2luZ2xlIG1lc3NhZ2UsIHVzZSB0aGUgdGhlIGBzZW5kYCBmdW5jdGlvbi4KICAg" +
- "IC8vLwogICAgLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYmFzZS8jc2VsZi1mb3J3YXJkIGZvciBleGFtcGxlcy4KICAgIHZpcnR1" +
- "YWwgZnVuIGZvcndhcmQodG86IEFkZHJlc3MsIGJvZHk6IENlbGw/LCBib3VuY2U6IEJvb2wsIGluaXQ6IFN0YXRlSW5pdD8pIHsKICAgICAgICBsZXQgY29kZTogQ2Vs" +
- "bD8gPSBudWxsOwogICAgICAgIGxldCBkYXRhOiBDZWxsPyA9IG51bGw7CiAgICAgICAgaWYgKGluaXQgIT0gbnVsbCkgewogICAgICAgICAgICBsZXQgaW5pdDI6IFN0" +
- "YXRlSW5pdCA9IGluaXQhITsKICAgICAgICAgICAgY29kZSA9IGluaXQyLmNvZGU7CiAgICAgICAgICAgIGRhdGEgPSBpbml0Mi5kYXRhOwogICAgICAgIH0KCiAgICAg" +
- "ICAgLy8gTG9jayBzdG9yYWdlIGlmIG5lZWRlZAogICAgICAgIGlmIChzZWxmLnN0b3JhZ2VSZXNlcnZlID4gMCkgeyAvLyBPcHRpbWl6ZWQgaW4gY29tcGlsZS10aW1l" +
- "CiAgICAgICAgICAgIGxldCBjdHg6IENvbnRleHQgPSBjb250ZXh0KCk7CiAgICAgICAgICAgIGxldCBiYWxhbmNlOiBJbnQgPSBteUJhbGFuY2UoKTsKICAgICAgICAg" +
- "ICAgbGV0IGJhbGFuY2VCZWZvcmVNZXNzYWdlOiBJbnQgPSBiYWxhbmNlIC0gY3R4LnZhbHVlOwogICAgICAgICAgICBpZiAoYmFsYW5jZUJlZm9yZU1lc3NhZ2UgPCBz" +
- "ZWxmLnN0b3JhZ2VSZXNlcnZlKSB7CiAgICAgICAgICAgICAgICBuYXRpdmVSZXNlcnZlKHNlbGYuc3RvcmFnZVJlc2VydmUsIFJlc2VydmVFeGFjdCk7CiAgICAgICAg" +
- "ICAgICAgICBzZW5kKFNlbmRQYXJhbWV0ZXJzewogICAgICAgICAgICAgICAgICAgIGJvdW5jZSwKICAgICAgICAgICAgICAgICAgICB0bywKICAgICAgICAgICAgICAg" +
- "ICAgICB2YWx1ZTogMCwKICAgICAgICAgICAgICAgICAgICBtb2RlOiBTZW5kUmVtYWluaW5nQmFsYW5jZSB8IFNlbmRJZ25vcmVFcnJvcnMsCiAgICAgICAgICAgICAg" +
- "ICAgICAgYm9keSwKICAgICAgICAgICAgICAgICAgICBjb2RlLAogICAgICAgICAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg" +
- "ICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gSnVzdCBzZW5kIHdpdGggcmVtYWluaW5nIGJhbGFuY2UKICAgICAgICBzZW5kKFNl" +
- "bmRQYXJhbWV0ZXJzewogICAgICAgICAgICBib3VuY2UsCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICB2YWx1ZTogMCwKICAgICAgICAgICAgbW9kZTogU2VuZFJl" +
- "bWFpbmluZ1ZhbHVlIHwgU2VuZElnbm9yZUVycm9ycywKICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgY29kZSwKICAgICAgICAgICAgZGF0YSwKICAgICAgICB9" +
- "KTsKICAgIH0KfQo=";
+ "YW5nLm9yZy9yZWYvY29yZS1iYXNlI3NlbGYtZm9yd2FyZAogICAgLy8vCiAgICB2aXJ0dWFsIGNvbnN0IHN0b3JhZ2VSZXNlcnZlOiBJbnQgPSAwOwogICAgCiAgICAv" +
+ "Ly8gU2VuZHMgYSBib3VuY2VhYmxlIG1lc3NhZ2UgYmFjayB0byB0aGUgc2VuZGVyIG9mIHRoZSBjdXJyZW50IG1lc3NhZ2UuCiAgICAvLy8gQW4gYWxpYXMgZnVuY3Rp" +
+ "b24gdG8gY2FsbGluZyB0aGUgYHNlbGYuZm9yd2FyZCgpYCBmdW5jdGlvbiB3aXRoCiAgICAvLy8gdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CiAgICAvLy8KICAgIC8v" +
+ "LyBgYGB0YWN0CiAgICAvLy8gc2VsZi5mb3J3YXJkKHNlbmRlcigpLCBib2R5LCB0cnVlLCBudWxsKTsKICAgIC8vLyAgICAgICAgICAgICAg4oaRICAgICAgICAg4oaR" +
+ "ICAgICDihpEgICAgIOKGkQogICAgLy8vICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgfCAgICAgaW5pdDogU3RhdGVJbml0PwogICAgLy8vICAgICAgICAgICAg" +
+ "ICB8ICAgICAgICAgfCAgICAgYm91bmNlOiBCb29sCiAgICAvLy8gICAgICAgICAgICAgIHwgICAgICAgICBib2R5OiBDZWxsPwogICAgLy8vICAgICAgICAgICAgICB0" +
+ "bzogQWRkcmVzcwogICAgLy8vIGBgYAogICAgLy8vCiAgICAvLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1iYXNlI3NlbGYtZm9yd2Fy" +
+ "ZAogICAgLy8vCiAgICB2aXJ0dWFsIGlubGluZSBmdW4gcmVwbHkoYm9keTogQ2VsbD8pIHsKICAgICAgICBzZWxmLmZvcndhcmQoc2VuZGVyKCksIGJvZHksIHRydWUs" +
+ "IG51bGwpOwogICAgfQoKICAgIC8vLyBTZW5kcyBhIG5vbi1ib3VuY2VhYmxlIG1lc3NhZ2UgYmFjayB0byB0aGUgc2VuZGVyIG9mIHRoZSBjdXJyZW50IG1lc3NhZ2Uu" +
+ "CiAgICAvLy8gQW4gYWxpYXMgZnVuY3Rpb24gdG8gY2FsbGluZyB0aGUgYHNlbGYuZm9yd2FyZCgpYCBmdW5jdGlvbiB3aXRoCiAgICAvLy8gdGhlIGZvbGxvd2luZyBh" +
+ "cmd1bWVudHM6CiAgICAvLy8KICAgIC8vLyBgYGB0YWN0CiAgICAvLy8gc2VsZi5mb3J3YXJkKHNlbmRlcigpLCBib2R5LCBmYWxzZSwgbnVsbCk7CiAgICAvLy8gICAg" +
+ "ICAgICAgICAgIOKGkSAgICAgICAgIOKGkSAgICAg4oaRICAgICDihpEKICAgIC8vLyAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHwgICAgIGluaXQ6IFN0YXRl" +
+ "SW5pdD8KICAgIC8vLyAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIGJvdW5jZTogQm9vbAogICAgLy8vICAgICAgICAgICAgICB8ICAgICAgICAgYm9keTogQ2Vs" +
+ "bD8KICAgIC8vLyAgICAgICAgICAgICAgdG86IEFkZHJlc3MKICAgIC8vLyBgYGAKICAgIC8vLwogICAgLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcv" +
+ "cmVmL2NvcmUtYmFzZSNzZWxmLWZvcndhcmQKICAgIC8vLwogICAgdmlydHVhbCBpbmxpbmUgZnVuIG5vdGlmeShib2R5OiBDZWxsPykgewogICAgICAgIHNlbGYuZm9y" +
+ "d2FyZChzZW5kZXIoKSwgYm9keSwgZmFsc2UsIG51bGwpOwogICAgfQoKICAgIC8vLyBRdWV1ZXMgdGhlIG1lc3NhZ2UgKGJvdW5jZWFibGUgb3Igbm9uLWJvdW5jZWFi" +
+ "bGUpIHRvIGJlIHNlbnQgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzIGB0b2AuCiAgICAvLy8gT3B0aW9uYWxseSwgeW91IG1heSBwcm92aWRlIGEgYGJvZHlgIG9mIHRo" +
+ "ZSBtZXNzYWdlIGFuZCB0aGUgYGluaXRgIHBhY2thZ2Ugd2l0aCBgaW5pdE9mYC4KICAgIC8vLyAKICAgIC8vLyBXaGVuIGBzZWxmLnN0b3JhZ2VSZXNlcnZlYCBjb25z" +
+ "dGFudCBpcyBvdmVyd3JpdHRlbiB0byBiZSBncmVhdGVyIHRoYW4gemVybywgYmVmb3JlIHNlbmRpbmcgYQogICAgLy8vIG1lc3NhZ2UgaXQgYWxzbyB0cmllcyB0byBy" +
+ "ZXNlcnZlIHRoZSBgc2VsZi5zdG9yYWdlUmVzZXJ2ZWAgYW1vdW50IG9mIG5hbm9Ub25jb2lucyBmcm9tIHRoZQogICAgLy8vIHJlbWFpbmluZyBiYWxhbmNlIGJlZm9y" +
+ "ZSBtYWtpbmcgdGhlIHNlbmQgaW4gdGhlIGBTZW5kUmVtYWluaW5nQmFsYW5jZWAgKDEyOCkgbW9kZS4KICAgIC8vLwogICAgLy8vIEluIGNhc2UgcmVzZXJ2YXRpb24g" +
+ "YXR0ZW1wdCBmYWlscyBhbmQgaW4gdGhlIGRlZmF1bHQgY2FzZSB3aXRob3V0IHRoZSBhdHRlbXB0LCB0aGUgbWVzc2FnZSAKICAgIC8vLyBpcyBzZW50IHdpdGggdGhl" +
+ "IGBTZW5kUmVtYWluaW5nVmFsdWVgICg2NCkgbW9kZSBpbnN0ZWFkLgogICAgLy8vCiAgICAvLy8gPiBOb3RlIHRoYXQgYHNlbGYuZm9yd2FyZCgpYCBuZXZlciBzZW5k" +
+ "cyBhZGRpdGlvbmFsIG5hbm9Ub25jb2lucyBvbiB0b3Agb2Ygd2hhdOKAmXMgYXZhaWxhYmxlIG9uIHRoZSBiYWxhbmNlLgogICAgLy8vID4gVG8gYmUgYWJsZSB0byBz" +
+ "ZW5kIG1vcmUgbmFub1RvbmNvaW5zIHdpdGggYSBzaW5nbGUgbWVzc2FnZSwgdXNlIHRoZSB0aGUgYHNlbmRgIGZ1bmN0aW9uLgogICAgLy8vCiAgICAvLy8gU2VlOiBo" +
+ "dHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1iYXNlI3NlbGYtZm9yd2FyZAogICAgLy8vCiAgICB2aXJ0dWFsIGZ1biBmb3J3YXJkKHRvOiBBZGRyZXNz" +
+ "LCBib2R5OiBDZWxsPywgYm91bmNlOiBCb29sLCBpbml0OiBTdGF0ZUluaXQ/KSB7CiAgICAgICAgbGV0IGNvZGU6IENlbGw/ID0gbnVsbDsKICAgICAgICBsZXQgZGF0" +
+ "YTogQ2VsbD8gPSBudWxsOwogICAgICAgIGlmIChpbml0ICE9IG51bGwpIHsKICAgICAgICAgICAgbGV0IGluaXQyOiBTdGF0ZUluaXQgPSBpbml0ISE7CiAgICAgICAg" +
+ "ICAgIGNvZGUgPSBpbml0Mi5jb2RlOwogICAgICAgICAgICBkYXRhID0gaW5pdDIuZGF0YTsKICAgICAgICB9CgogICAgICAgIC8vIExvY2sgc3RvcmFnZSBpZiBuZWVk" +
+ "ZWQKICAgICAgICBpZiAoc2VsZi5zdG9yYWdlUmVzZXJ2ZSA+IDApIHsgLy8gT3B0aW1pemVkIGluIGNvbXBpbGUtdGltZQogICAgICAgICAgICBsZXQgY3R4OiBDb250" +
+ "ZXh0ID0gY29udGV4dCgpOwogICAgICAgICAgICBsZXQgYmFsYW5jZTogSW50ID0gbXlCYWxhbmNlKCk7CiAgICAgICAgICAgIGxldCBiYWxhbmNlQmVmb3JlTWVzc2Fn" +
+ "ZTogSW50ID0gYmFsYW5jZSAtIGN0eC52YWx1ZTsKICAgICAgICAgICAgaWYgKGJhbGFuY2VCZWZvcmVNZXNzYWdlIDwgc2VsZi5zdG9yYWdlUmVzZXJ2ZSkgewogICAg" +
+ "ICAgICAgICAgICAgbmF0aXZlUmVzZXJ2ZShzZWxmLnN0b3JhZ2VSZXNlcnZlLCBSZXNlcnZlRXhhY3QpOwogICAgICAgICAgICAgICAgc2VuZChTZW5kUGFyYW1ldGVy" +
+ "c3sKICAgICAgICAgICAgICAgICAgICBib3VuY2UsCiAgICAgICAgICAgICAgICAgICAgdG8sCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICAg" +
+ "ICAgICAgICAgbW9kZTogU2VuZFJlbWFpbmluZ0JhbGFuY2UgfCBTZW5kSWdub3JlRXJyb3JzLAogICAgICAgICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgICAg" +
+ "ICAgICAgY29kZSwKICAgICAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0K" +
+ "ICAgICAgICB9CgogICAgICAgIC8vIEp1c3Qgc2VuZCB3aXRoIHJlbWFpbmluZyBiYWxhbmNlCiAgICAgICAgc2VuZChTZW5kUGFyYW1ldGVyc3sKICAgICAgICAgICAg" +
+ "Ym91bmNlLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICAgIG1vZGU6IFNlbmRSZW1haW5pbmdWYWx1ZSB8IFNlbmRJZ25vcmVF" +
+ "cnJvcnMsCiAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgIGNvZGUsCiAgICAgICAgICAgIGRhdGEsCiAgICAgICAgfSk7CiAgICB9Cn0K";
files["std/internal/cells.tact"] =
- "Ly8KLy8gQnVpbGRlcgovLwoKLy8vIENyZWF0ZXMgYSBuZXcgZW1wdHkgYEJ1aWxkZXJgLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAg" +
- "ICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" +
- "L2NvcmUtY2VsbHMvI2JlZ2luY2VsbAovLy8gCmFzbSBmdW4gYmVnaW5DZWxsKCk6IEJ1aWxkZXIgeyBORVdDIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRo" +
- "ZSBgQnVpbGRlcmAgdHlwZS4KLy8vCi8vLyBTdG9yZXMgYSBzaWduZWQgYGJpdHNgLWJpdCBgdmFsdWVgIGludG8gdGhlIGNvcHkgb2YgdGhlIGBCdWlsZGVyYCBmb3Ig" +
- "MCDiiaQgYGJpdHNgIOKJpCAyNTcuCi8vLyBSZXR1cm5zIHRoYXQgY29weSBvZiB0aGUgYEJ1aWxkZXJgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHByb3ZpZGUgYW4gaW5z" +
- "dWZmaWNpZW50IG9yIG91dC1vZi1ib3VuZHMgYGJpdHNgIG51bWJlciB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCAKLy8vIFtleGl0IGNvZGUgNV06IGBJbnRlZ2VyIG91" +
- "dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7" +
- "Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlSW50KDQyLCA3KTsKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50" +
- "YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1aWxkZXJzdG9yZWludAovLy8gCi8vLyBbZXhpdCBjb2RlIDVdOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9i" +
- "b29rL2V4aXQtY29kZXMjNQovLy8KQG5hbWUoc3RvcmVfaW50KSAvLyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0" +
- "aCBhc20gIlNUSVgiCmV4dGVuZHMgbmF0aXZlIHN0b3JlSW50KHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQsIGJpdHM6IEludCk6IEJ1aWxkZXI7CgovLy8gRXh0ZW5z" +
- "aW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuCi8vLwovLy8gU3RvcmVzIGFuIHVuc2lnbmVkIGBiaXRzYC1iaXQgYHZhbHVlYCBpbnRvIHRoZSBjb3B5" +
- "IG9mIHRoZSBgQnVpbGRlcmAgZm9yIDAg4omkIGBiaXRzYCDiiaQgMjU2LgovLy8gUmV0dXJucyB0aGF0IGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4KLy8vCi8vLyBBdHRl" +
- "bXB0cyB0byBzdG9yZSBhIG5lZ2F0aXZlIGB2YWx1ZWAgb3IgcHJvdmlkZSBhbiBpbnN1ZmZpY2llbnQgb3Igb3V0LW9mLWJvdW5kcyBgYml0c2AgCi8vLyBudW1iZXIg" +
- "dGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggW2V4aXQgY29kZSA1XTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVu" +
- "IGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogQnVpbGRlciA9IGIuc3RvcmVVaW50KDQyLCA2" +
- "KTsKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1aWxkZXJzdG9yZXVpbnQK" +
- "Ly8vIAovLy8gW2V4aXQgY29kZSA1XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzUKLy8vIApAbmFtZShzdG9yZV91aW50KSAvLyBz" +
- "cGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIlNUVVgiCmV4dGVuZHMgbmF0aXZlIHN0b3JlVWludChzZWxm" +
- "OiBCdWlsZGVyLCB2YWx1ZTogSW50LCBiaXRzOiBJbnQpOiBCdWlsZGVyOwoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8g" +
- "Ci8vLyBTdG9yZXMgYSBgQm9vbGAgYHZhbHVlYCBpbnRvIHRoZSBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuIAovLy8gV3JpdGVzIDEgYXMgYSBzaW5nbGUgYml0IGlmIGB2" +
- "YWx1ZWAgaXMgYHRydWVgLCBhbmQgd3JpdGVzIDAgb3RoZXJ3aXNlLgovLy8gUmV0dXJucyB0aGF0IGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4KLy8vIAovLy8gYGBgdGFj" +
- "dAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogQnVpbGRlciA9IGIuc3RvcmVC" +
- "b29sKHRydWUpOyAgLy8gd3JpdGVzIDEKLy8vICAgICBsZXQgYnV6ejogQnVpbGRlciA9IGIuc3RvcmVCb29sKGZhbHNlKTsgLy8gd3JpdGVzIDAKLy8vIH0KLy8vIGBg" +
- "YAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JlYm9vbAovLy8KYXNtKHZhbHVlIHNl" +
- "bGYpIGV4dGVuZHMgZnVuIHN0b3JlQm9vbChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogQm9vbCk6IEJ1aWxkZXIgeyAxIFNUSSB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9u" +
- "IGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIEFsaWFzIHRvIGBCdWlsZGVyLnN0b3JlQm9vbCgpYC4KLy8v" +
- "Ci8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVy" +
- "ID0gYi5zdG9yZUJpdCh0cnVlKTsgIC8vIHdyaXRlcyAxCi8vLyAgICAgbGV0IGJ1eno6IEJ1aWxkZXIgPSBiLnN0b3JlQml0KGZhbHNlKTsgLy8gd3JpdGVzIDAKLy8v" +
- "IH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JlYml0Ci8vLwphc20odmFsdWUg" +
- "c2VsZikgZXh0ZW5kcyBmdW4gc3RvcmVCaXQoc2VsZjogQnVpbGRlciwgdmFsdWU6IEJvb2wpOiBCdWlsZGVyIHsgMSBTVEkgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlv" +
- "biBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8KLy8vIFN0b3JlcyAoc2VyaWFsaXplcykgYW4gdW5zaWduZWQgYEludGAgYHZhbHVlYCBpbiB0aGUgcmFuZ2UgZnJv" +
- "bSAwIHRvIDJeMTIwIOKIkiAxIGluY2x1c2l2ZSBpbnRvIHRoZSBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuIFRoZSBzZXJpYWxpemF0aW9uIG9mIGB2YWx1ZWAgY29uc2lz" +
- "dHMgb2YgYSA0LWJpdCB1bnNpZ25lZCBiaWctZW5kaWFuIGludGVnZXIgYGxgLCB3aGljaCBpcyB0aGUgc21hbGxlc3QgaW50ZWdlciBgbGAg4omlIDAsIHN1Y2ggdGhh" +
- "dCBgdmFsdWVgIDwgMl4oOCAqIGBsYCksIGZvbGxvd2VkIGJ5IGFuIDggKiBgbGAtYml0IHVuc2lnbmVkIGJpZy1lbmRpYW4gcmVwcmVzZW50YXRpb24gb2YgYHZhbHVl" +
- "YC4gUmV0dXJucyB0aGF0IGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBzdG9yZSBhbiBvdXQtb2YtYm91bmRzIGB2YWx1ZWAgdGhyb3cg" +
- "YW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24g" +
- "d2F5IG9mIHN0b3JpbmcgbmFub1RvbmNvaW5zLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5D" +
- "ZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlQ29pbnMoNDIpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmVjb2lucwovLy8KYXNtIGV4dGVuZHMgZnVuIHN0b3JlQ29pbnMoc2VsZjogQnVpbGRlciwgdmFsdWU6" +
- "IEludCk6IEJ1aWxkZXIgeyBTVFZBUlVJTlQxNiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBU" +
- "YWN0IDEuNi4wLgovLy8KLy8vIEFsaWFzIHRvIGBCdWlsZGVyLnN0b3JlQ29pbnMoKWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAg" +
- "bGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogQnVpbGRlciA9IGIuc3RvcmVWYXJVaW50MTYoNDIpOwovLy8gfQovLy8gYGBgCi8v" +
- "LwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmV2YXJ1aW50MTYKLy8vICogaHR0cHM6Ly9k" +
- "b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JlY29pbnMKLy8vCmFzbSBleHRlbmRzIGZ1biBzdG9yZVZhclVpbnQxNihzZWxmOiBCdWls" +
- "ZGVyLCB2YWx1ZTogSW50KTogQnVpbGRlciB7IFNUVkFSVUlOVDE2IH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4gQXZhaWxh" +
- "YmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2ltaWxhciB0byBgQnVpbGRlci5zdG9yZUNvaW5zKClgLCBidXQgd2l0aCBhIGRpZmZlcmVudCBgdmFsdWVgIHJh" +
- "bmdlOiBmcm9tIC0yXjExOSB0byAyXjExOSAtIDEgaW5jbHVzaXZlLgovLy8KLy8vIEF0dGVtcHRzIHRvIHN0b3JlIGFuIG91dC1vZi1ib3VuZHMgYHZhbHVlYCB0aHJv" +
- "dyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBs" +
- "ZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVyID0gYi5zdG9yZVZhckludDE2KC00Mik7Ci8v" +
- "LyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1aWxkZXJzdG9yZXZhcmludDE2Ci8vLwphc20g" +
- "ZXh0ZW5kcyBmdW4gc3RvcmVWYXJJbnQxNihzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50KTogQnVpbGRlciB7IFNUVkFSSU5UMTYgfQoKLy8vIEV4dGVuc2lvbiBmdW5j" +
- "dGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTdG9yZXMgKHNlcmlhbGl6ZXMpIGFuIHVuc2lnbmVk" +
- "IGBJbnRgIGB2YWx1ZWAgaW4gdGhlIHJhbmdlIGZyb20gMCB0byAyXjI0OCDiiJIgMSBpbmNsdXNpdmUgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBUaGUg" +
- "c2VyaWFsaXphdGlvbiBvZiBgdmFsdWVgIGNvbnNpc3RzIG9mIGEgNS1iaXQgdW5zaWduZWQgYmlnLWVuZGlhbiBpbnRlZ2VyIGBsYCwgd2hpY2ggaXMgdGhlIHNtYWxs" +
- "ZXN0IGludGVnZXIgYGxgIOKJpSAwLCBzdWNoIHRoYXQgYHZhbHVlYCA8IDJeOCAqIGBsYCwgZm9sbG93ZWQgYnkgYW4gOCAqIGBsYC1iaXQgdW5zaWduZWQgYmlnLWVu" +
- "ZGlhbiByZXByZXNlbnRhdGlvbiBvZiBgdmFsdWVgLiBSZXR1cm5zIHRoYXQgY29weSBvZiB0aGUgYEJ1aWxkZXJgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHN0b3JlIGFu" +
- "IG91dC1vZi1ib3VuZHMgYHZhbHVlYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8v" +
- "Ci8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVy" +
- "ID0gYi5zdG9yZVZhclVpbnQzMig0MjAwMDApOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxs" +
- "cyNidWlsZGVyc3RvcmV2YXJ1aW50MzIKLy8vCmFzbSBleHRlbmRzIGZ1biBzdG9yZVZhclVpbnQzMihzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50KTogQnVpbGRlciB7" +
- "IFNUVkFSVUlOVDMyIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwov" +
- "Ly8gU2ltaWxhciB0byBgQnVpbGRlci5zdG9yZVZhclVpbnQzMigpYCwgYnV0IHdpdGggYSBkaWZmZXJlbnQgYHZhbHVlYCByYW5nZTogZnJvbSAtMl4yNDcgdG8gMl4y" +
- "NDcgLSAxIGluY2x1c2l2ZS4KLy8vCi8vLyBBdHRlbXB0cyB0byBzdG9yZSBhbiBvdXQtb2YtYm91bmRzIGB2YWx1ZWAgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhp" +
- "dCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1" +
- "aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogQnVpbGRlciA9IGIuc3RvcmVWYXJJbnQzMigtNDIwMDAwKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8v" +
- "IFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JldmFyaW50MzIKLy8vCmFzbSBleHRlbmRzIGZ1biBzdG9yZVZh" +
- "ckludDMyKHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsgU1RWQVJJTlQzMiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxk" +
- "ZXJgIHR5cGUuCi8vLyAKLy8vIFN0b3JlcyBhIHJlZmVyZW5jZSBgY2VsbGAgaW50byBhIGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4KLy8vIFJldHVybnMgdGhhdCBjb3B5" +
- "IG9mIHRoZSBgQnVpbGRlcmAuCi8vLyAKLy8vIEFzIGEgc2luZ2xlIGBDZWxsYCBjYW4gc3RvcmUgdXAgdG8gNCByZWZlcmVuY2VzLCBhdHRlbXB0cyB0byBzdG9yZSBt" +
- "b3JlIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA4XTogYENlbGwgb3ZlcmZsb3dgLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBs" +
- "ZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVyID0gYi5zdG9yZVJlZihlbXB0eUNlbGwoKSk7" +
- "Ci8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmVyZWYKLy8v" +
- "IAovLy8gW2V4aXQgY29kZSA4XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzgKLy8vIAphc20oY2VsbCBzZWxmKSBleHRlbmRzIGZ1" +
- "biBzdG9yZVJlZihzZWxmOiBCdWlsZGVyLCBjZWxsOiBDZWxsKTogQnVpbGRlciB7IFNUUkVGIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRl" +
- "cmAgdHlwZS4KLy8vIAovLy8gU3RvcmVzIGEgYHNsaWNlYCBpbnRvIGEgY29weSBvZiB0aGUgYEJ1aWxkZXJgLgovLy8gUmV0dXJucyB0aGF0IGNvcHkgb2YgdGhlIGBC" +
- "dWlsZGVyYC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQg" +
- "czogU2xpY2UgPSBlbXB0eUNlbGwoKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlU2xpY2Uocyk7Ci8vLyB9Ci8vLyBgYGAKLy8v" +
- "IAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmVzbGljZQovLy8gCmFzbSBleHRlbmRzIGZ1" +
- "biBzdG9yZVNsaWNlKHNlbGY6IEJ1aWxkZXIsIHNsaWNlOiBTbGljZSk6IEJ1aWxkZXIgeyBTVFNMSUNFUiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUg" +
- "YEJ1aWxkZXJgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIEFwcGVuZHMgYWxsIGRhdGEgZnJvbSBhIGBCdWlsZGVyYCBgY2VsbGAgdG8g" +
- "dGhlIGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4gUmV0dXJucyB0aGF0IGNvcHkuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6" +
- "IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKS5zdG9yZUNvaW5zKDQyKTsKLy8vICAgICBsZXQgZml6ejogQnVpbGRlciA9IGJlZ2luQ2VsbCgpLnN0b3JlQnVpbGRlcihiKTsK" +
- "Ly8vICAgICBiLmVuZENlbGwoKSA9PSBmaXp6LmVuZENlbGwoKTsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
- "Lm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmVidWlsZGVyCi8vLwphc20gZXh0ZW5kcyBmdW4gc3RvcmVCdWlsZGVyKHNlbGY6IEJ1aWxkZXIsIGNlbGw6IEJ1" +
- "aWxkZXIpOiBCdWlsZGVyIHsgU1RCUiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEu" +
- "NS4wLgovLy8KLy8vIElmIHRoZSBgY2VsbGAgaXMgbm90IGBudWxsYCwgc3RvcmVzIDEgYXMgYSBzaW5nbGUgYml0IGFuZCB0aGVuIHJlZmVyZW5jZSBgY2VsbGAgaW50" +
- "byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBSZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBJZiB0aGUgYGNlbGxgIGlzIGBudWxsYCwgb25seSBzdG9yZXMgMCBh" +
- "cyBhIHNpbmdsZSBiaXQgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBSZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBBcyBhIHNpbmdsZSBgQ2VsbGAgY2Fu" +
- "IHN0b3JlIHVwIHRvIDQgcmVmZXJlbmNlcywgYXR0ZW1wdHMgdG8gc3RvcmUgbW9yZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3Zl" +
- "cmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZp" +
- "eno6IEJ1aWxkZXIgPSBiCi8vLyAgICAgICAgIC5zdG9yZU1heWJlUmVmKGVtcHR5Q2VsbCgpKSAvLyAxLCB0aGVuIGVtcHR5IGNlbGwKLy8vICAgICAgICAgLnN0b3Jl" +
- "TWF5YmVSZWYobnVsbCk7ICAgICAgIC8vIDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMj" +
- "YnVpbGRlcnN0b3JlbWF5YmVyZWYKLy8vCmFzbShjZWxsIHNlbGYpIGV4dGVuZHMgZnVuIHN0b3JlTWF5YmVSZWYoc2VsZjogQnVpbGRlciwgY2VsbDogQ2VsbD8pOiBC" +
- "dWlsZGVyIHsgU1RPUFRSRUYgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8gCi8vLyBDb252ZXJ0cyBhIGBCdWlsZGVy" +
- "YCBpbnRvIGFuIG9yZGluYXJ5IGBDZWxsYC4KLy8vCi8vLyBOT1RFOiAqKkdhcyBleHBlbnNpdmUhKiogVGhpcyBmdW5jdGlvbiB1c2VzIDUwMCBnYXMgdW5pdHMgb3Ig" +
- "bW9yZS4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgYzog" +
- "Q2VsbCA9IGIuZW5kQ2VsbCgpOwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMj" +
- "YnVpbGRlcmVuZGNlbGwKLy8vIAphc20gZXh0ZW5kcyBmdW4gZW5kQ2VsbChzZWxmOiBCdWlsZGVyKTogQ2VsbCB7IEVOREMgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlv" +
- "biBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8gCi8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2VsbCByZWZlcmVuY2VzIGFscmVhZHkgc3RvcmVkIGluIHRoZSBg" +
- "QnVpbGRlcmAgYXMgYW4gYEludGAuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7" +
- "Ci8vLyAgICAgbGV0IHJlZnM6IEludCA9IGIucmVmcygpOyAvLyAwCi8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
- "Lm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVycmVmcwovLy8gCmFzbSBleHRlbmRzIGZ1biByZWZzKHNlbGY6IEJ1aWxkZXIpOiBJbnQgeyBCUkVGUyB9CgovLy8gRXh0" +
- "ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyBhbHJlYWR5IHN0b3JlZCBp" +
- "biB0aGUgYEJ1aWxkZXJgIGFzIGFuIGBJbnRgLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2lu" +
- "Q2VsbCgpOwovLy8gICAgIGxldCBiaXRzOiBJbnQgPSBiLmJpdHMoKTsgLy8gMAovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRh" +
- "Y3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcmJpdHMKLy8vIAphc20gZXh0ZW5kcyBmdW4gYml0cyhzZWxmOiBCdWlsZGVyKTogSW50IHsgQkJJVFMgfQoK" +
- "Ly8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDb21wdXRlcyBhbmQg" +
- "cmV0dXJucyB0aGUgYEludGAgZGVwdGggb2YgdGhlIGBCdWlsZGVyYC4gUHJvZHVjZXMgMCBpZiB0aGUgYEJ1aWxkZXJgIGhhcyBubyByZWZlcmVuY2VzIHN0b3JlZCBz" +
- "byBmYXIsIG90aGVyd2lzZSAxIHBsdXMgdGhlIG1heGltdW0gb2YgdGhlIGRlcHRocyBvZiB0aGUgcmVmZXJlbmNlZCBjZWxscy4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBm" +
- "dW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KTsKLy8vICAgICBsZXQgZGVwdGg6IEludCA9IGIu" +
- "ZGVwdGgoKTsgLy8gMAovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyZGVwdGgK" +
- "Ly8vCmFzbSBleHRlbmRzIGZ1biBkZXB0aChzZWxmOiBCdWlsZGVyKTogSW50IHsgQkRFUFRIIH0KCi8vCi8vIFNsaWNlCi8vCgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9u" +
- "IGZvciB0aGUgYENlbGxgIHR5cGUuCi8vLwovLy8gT3BlbnMgdGhlIGBDZWxsYCBmb3IgcGFyc2luZyBhbmQgcmV0dXJucyBpdCBhcyBhIGBTbGljZWAuCi8vLwovLy8g" +
- "YGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGM6IENlbGwgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgczogU2xpY2UgPSBjLmJlZ2luUGFy" +
- "c2UoKTsKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxiZWdpbnBhcnNl" +
- "Ci8vLyAKYXNtIGV4dGVuZHMgZnVuIGJlZ2luUGFyc2Uoc2VsZjogQ2VsbCk6IFNsaWNlIHsgQ1RPUyB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZv" +
- "ciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBMb2FkcyB0aGUgbmV4dCByZWZlcmVuY2UgZnJvbSB0aGUgYFNsaWNlYCBhcyBhIGBDZWxsYC4KLy8vIAovLy8gQXR0" +
- "ZW1wdHMgdG8gbG9hZCBzdWNoIHJlZmVyZW5jZSBgQ2VsbGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCAKLy8v" +
- "IFtleGl0IGNvZGUgOF06IGBDZWxsIG92ZXJmbG93YC4KLy8vIAovLy8gQXR0ZW1wdHMgdG8gbG9hZCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93" +
- "IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8v" +
- "LyAgICAgbGV0IHMxOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IENlbGwgPSBzMS5s" +
- "b2FkUmVmKCk7Ci8vLyAgICAgCi8vLyAgICAgbGV0IHMyOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAgICAgIC5zdG9yZVJlZihlbXB0eUNlbGwoKSkKLy8vICAg" +
- "ICAgICAgLnN0b3JlUmVmKHMxLmFzQ2VsbCgpKQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8gICAgIGxldCByZWYxOiBDZWxsID0gczIubG9hZFJlZigpOwovLy8g" +
- "ICAgIGxldCByZWYyOiBDZWxsID0gczIubG9hZFJlZigpOwovLy8gICAgIHJlZjEgPT0gcmVmMjsgLy8gZmFsc2UKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBbZXhpdCBj" +
- "b2RlIDhdOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOAovLy8gW2V4aXQgY29kZSA5XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" +
- "cmcvYm9vay9leGl0LWNvZGVzIzkKLy8vIAphc20oLT4gMSAwKSBleHRlbmRzIG11dGF0ZXMgZnVuIGxvYWRSZWYoc2VsZjogU2xpY2UpOiBDZWxsIHsgTERSRUYgfQoK" +
- "Ly8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLyAKLy8vIFNraXBz" +
- "IHRoZSBuZXh0IHJlZmVyZW5jZSBmcm9tIHRoZSBgU2xpY2VgLiBTaW1pbGFyIHRvIGRpc2NhcmRpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgU2xpY2UubG9hZFJlZigp" +
- "YC4KLy8vIAovLy8gQXR0ZW1wdHMgdG8gc2tpcCBzdWNoIHJlZmVyZW5jZSBgQ2VsbGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNl" +
- "cHRpb24gd2l0aCAKLy8vIFtleGl0IGNvZGUgOF06IGBDZWxsIG92ZXJmbG93YC4KLy8vIAovLy8gQXR0ZW1wdHMgdG8gc2tpcCBtb3JlIGRhdGEgdGhhbiBgU2xpY2Vg" +
- "IGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVu" +
- "IGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHMxOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAgICAgIC5zdG9yZVJlZihlbXB0eUNlbGwoKSkKLy8vICAgICAgICAg" +
- "LnN0b3JlVWludCg0MiwgMzIpCi8vLyAgICAgICAgIC5hc1NsaWNlKCk7Ci8vLwovLy8gICAgIHMxLnNraXBSZWYoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gczEu" +
- "bG9hZFVpbnQoMzIpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFtleGl0IGNvZGUgOF06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1j" +
- "b2RlcyM4Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8gCmFzbSBleHRlbmRzIG11dGF0ZXMg" +
- "ZnVuIHNraXBSZWYoc2VsZjogU2xpY2UpIHsgTERSRUYgTklQIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBz" +
- "aW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIFByZWxvYWRzIHRoZSBuZXh0IHJlZmVyZW5jZSBmcm9tIHRoZSBgU2xpY2VgIGFzIGEgYENlbGxgLiBEb2Vzbid0IG1vZGlm" +
- "eSB0aGUgb3JpZ2luYWwgYFNsaWNlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBwcmVsb2FkIHN1Y2ggcmVmZXJlbmNlIGBDZWxsYCB3aGVuIGBTbGljZWAgZG9lc24ndCBj" +
- "b250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJlbG9hZCBtb3Jl" +
- "IGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRh" +
- "Y3QKLy8vIGZ1biBleGFtcGxlcygpIHsKLy8vICAgICBsZXQgczE6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8v" +
- "ICAgICBsZXQgZml6ejogQ2VsbCA9IHMxLnByZWxvYWRSZWYoKTsgLy8gZGlkbid0IG1vZGlmeSBzMQovLy8KLy8vICAgICBsZXQgczI6IFNsaWNlID0gYmVnaW5DZWxs" +
- "KCkKLy8vICAgICAgICAgLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKQovLy8gICAgICAgICAuc3RvcmVSZWYoczEuYXNDZWxsKCkpCi8vLyAgICAgICAgIC5hc1NsaWNlKCk7" +
- "Ci8vLwovLy8gICAgIGxldCByZWYxOiBDZWxsID0gczIucHJlbG9hZFJlZigpOwovLy8gICAgIGxldCByZWYyOiBDZWxsID0gczIucHJlbG9hZFJlZigpOwovLy8gICAg" +
- "IHJlZjEgPT0gcmVmMjsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxs" +
- "cyNzbGljZXByZWxvYWRyZWYKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzCi8vLwphc20gZXh0ZW5kcyBmdW4gcHJlbG9hZFJl" +
- "ZihzZWxmOiBTbGljZSk6IENlbGwgeyBQTERSRUYgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxl" +
- "IHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gTG9hZHMgYSBzaW5nbGUgYml0IGZyb20gdGhlIGBTbGljZWA6IGlmIGl0J3MgMSwgdGhlbiB0aGUgcmVmZXJlbmNlZCBg" +
- "Q2VsbGAgaXMgbG9hZGVkIGFuZCByZXR1cm5lZC4gSWYgdGhlIGxvYWRlZCBiaXQgaXMgMCwgdGhlbiBub3RoaW5nIGVsc2UgaXMgbG9hZGVkIGFuZCBgbnVsbGAgaXMg" +
- "cmV0dXJuZWQuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNoIHJlZmVyZW5jZSBgQ2VsbGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBh" +
- "biBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxvYWQgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBj" +
- "b250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgp" +
- "IHsKLy8vICAgICBsZXQgcyA9IG1zZy5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IG91dEFjdGlvbnMgPSBzLmxvYWRNYXliZVJlZigpOwovLy8KLy8vICAgICBpZiAob3V0" +
- "QWN0aW9ucyAhPSBudWxsKSB7Ci8vLyAgICAgICAgIGxldCBhY3Rpb25zID0gb3V0QWN0aW9ucyEhOwovLy8gICAgICAgICAvLyAuLi5wcm9jZXNzIGFjdGlvbnMuLi4K" +
- "Ly8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbG9hZG1h" +
- "eWJlcmVmCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcwovLy8KYXNtKC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBsb2Fk" +
- "TWF5YmVSZWYoc2VsZjogU2xpY2UpOiBDZWxsPyB7IExET1BUUkVGIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUu" +
- "IEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4yLgovLy8KLy8vIFNraXBzIGBDZWxsP2AgZnJvbSB0aGUgYFNsaWNlYC4gU2ltaWxhciB0byBkaXNjYXJkaW5nIHRoZSBy" +
- "ZXR1cm4gdmFsdWUgb2YgYFNsaWNlLmxvYWRNYXliZVJlZigpYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBza2lwIHN1Y2ggcmVmZXJlbmNlIGBDZWxsYCB3aGVuIGBTbGlj" +
- "ZWAgZG9lc24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8g" +
- "c2tpcCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8K" +
- "Ly8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzMTogU2xpY2UgPSBiZWdpbkNlbGwoKQovLy8gICAgICAgICAuc3RvcmVNYXliZVJlZihl" +
- "bXB0eUNlbGwoKSkKLy8vICAgICAgICAgLnN0b3JlVWludCg0MiwgMzIpCi8vLyAgICAgICAgIC5hc1NsaWNlKCk7Ci8vLwovLy8gICAgIHMxLnNraXBNYXliZVJlZigp" +
- "OwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzMS5sb2FkVWludCgzMik7IC8vIDQyCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50" +
- "YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbG9hZG1heWJlcmVmCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2Rlcwov" +
- "Ly8KYXNtIGV4dGVuZHMgbXV0YXRlcyBmdW4gc2tpcE1heWJlUmVmKHNlbGY6IFNsaWNlKSB7IExET1BUUkVGIE5JUCB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZv" +
- "ciB0aGUgYFNsaWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBQcmVsb2FkcyBhIHNpbmdsZSBiaXQgZnJvbSB0aGUgYFNsaWNlYDog" +
- "aWYgaXQncyAxLCB0aGVuIHRoZSByZWZlcmVuY2VkIGBDZWxsYCBpcyBwcmVsb2FkZWQgYW5kIHJldHVybmVkLiBJZiB0aGUgcHJlbG9hZGVkIGJpdCBpcyAwLCB0aGVu" +
- "IGBudWxsYCBpcyByZXR1cm5lZC4gRG9lc24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJlbG9hZCBzdWNoIHJlZmVy" +
- "ZW5jZSBgQ2VsbGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dg" +
- "LgovLy8KLy8vIEF0dGVtcHRzIHRvIHByZWxvYWQgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUg" +
- "OTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZXMoKSB7Ci8vLyAgICAgbGV0IHMxOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0" +
- "b3JlTWF5YmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogQ2VsbCA9IHMxLnByZWxvYWRNYXliZVJlZigpOyAvLyByZXR1cm5zIGVt" +
- "cHR5Q2VsbCgpIGFuZCBkb2Vzbid0IG1vZGlmeSBzMQovLy8KLy8vICAgICBsZXQgczI6IFNsaWNlID0gYmVnaW5DZWxsKCkKLy8vICAgICAgICAgLnN0b3JlTWF5YmVS" +
- "ZWYobnVsbCkKLy8vICAgICAgICAgLnN0b3JlTWF5YmVSZWYoczEuYXNDZWxsKCkpCi8vLyAgICAgICAgIC5hc1NsaWNlKCk7Ci8vLwovLy8gICAgIGxldCByZWYxOiBD" +
- "ZWxsID0gczIucHJlbG9hZE1heWJlUmVmKCk7IC8vIHJldHVybnMgbnVsbCBhbmQgZG9lc24ndCBtb2RpZnkgczIKLy8vICAgICBsZXQgcmVmMjogQ2VsbCA9IHMyLnBy" +
- "ZWxvYWRNYXliZVJlZigpOyAvLyBzYW1lIGVmZmVjdAovLy8gICAgIHJlZjEgPT0gbnVsbDsgLy8gdHJ1ZQovLy8gICAgIHJlZjEgPT0gcmVmMjsgLy8gdHJ1ZQovLy8g" +
- "fQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZXByZWxvYWRtYXliZXJlZgovLy8g" +
- "KiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMKLy8vCmFzbSBleHRlbmRzIGZ1biBwcmVsb2FkTWF5YmVSZWYoc2VsZjogU2xpY2UpOiBD" +
- "ZWxsPyB7IFBMRE9QVFJFRiB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBMb2FkcyAwIOKJpCBg" +
- "bGAg4omkIDEwMjMgYml0cyBmcm9tIHRoZSBgU2xpY2VgIGFuZCByZXR1cm5zIHRoZW0gYXMgYSBzZXBhcmF0ZSBgU2xpY2VgLgovLy8gCi8vLyBBdHRlbXB0cyB0byBz" +
- "cGVjaWZ5IGFuIG91dC1vZi1ib3VuZHMgYGxgIHZhbHVlIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA1XTogYEludGVnZXIgb3V0IG9mIGV4" +
- "cGVjdGVkIHJhbmdlYC4KLy8vIAovLy8gQXR0ZW1wdHMgdG8gbG9hZCBtb3JlIGRhdGEgdGhhbiB0aGUgYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24g" +
- "d2l0aCAKLy8vIFtleGl0IGNvZGUgOV06IGBDZWxsIHVuZGVyZmxvd2AuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBT" +
- "bGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IFNsaWNlID0gcy5sb2FkQml0cyg3KTsKLy8vIH0KLy8v" +
- "IGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzLyNzbGljZWxvYWRiaXRzCi8vLyAKLy8vIFtleGl0" +
- "IGNvZGUgNV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM1Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
- "Lm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8gCkBuYW1lKGxvYWRfYml0cykgLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxh" +
- "Y2VkIHdpdGggYXNtICJMRFNMSUNFWCIKZXh0ZW5kcyBtdXRhdGVzIG5hdGl2ZSBsb2FkQml0cyhzZWxmOiBTbGljZSwgbDogSW50KTogU2xpY2U7CgovLy8gRXh0ZW5z" +
- "aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBQcmVsb2FkcyAwIOKJpCBgbGAg4omkIDEwMjMgYml0cyBmcm9tIHRoZSBgU2xpY2VgIGFu" +
- "ZCByZXR1cm5zIHRoZW0gYXMgYSBzZXBhcmF0ZSBgU2xpY2VgLgovLy8gRG9lc24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsIGBTbGljZWAuCi8vLyAKLy8vIEF0dGVtcHRz" +
- "IHRvIHNwZWNpZnkgYW4gb3V0LW9mLWJvdW5kcyBgbGAgdmFsdWUgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggCi8vLyBbZXhpdCBjb2RlIDVdOiBgSW50ZWdlciBvdXQg" +
- "b2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8gCi8vLyBBdHRlbXB0cyB0byBwcmVsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4" +
- "Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAg" +
- "bGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBzLnByZWxvYWRCaXRzKDcp" +
- "OwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VwcmVsb2FkYml0cwov" +
- "Ly8gCi8vLyBbZXhpdCBjb2RlIDVdOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjNQovLy8gW2V4aXQgY29kZSA5XTogaHR0cHM6Ly9k" +
- "b2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzkKLy8vIApAbmFtZShwcmVsb2FkX2JpdHMpIC8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMgY29tcGls" +
- "ZXIsIHNvIG5vdCByZXBsYWNlZCB3aXRoIGFzbSAiUExEU0xJQ0VYIgpleHRlbmRzIG5hdGl2ZSBwcmVsb2FkQml0cyhzZWxmOiBTbGljZSwgbDogSW50KTogU2xpY2U7" +
- "CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBMb2FkcyBhbmQgcmV0dXJucyBhIHNpZ25lZCBgbGAt" +
- "Yml0IGBJbnRgIGZyb20gdGhlIGBTbGljZWAsIGZvciAwIOKJpCBsIOKJpCAyNTcuCi8vLyAKLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYW4gb3V0LW9mLWJvdW5kcyBg" +
- "bGAgdmFsdWUgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggCi8vLyBbZXhpdCBjb2RlIDVdOiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8gCi8vLyBB" +
- "dHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA5XTog" +
- "YENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVJ" +
- "bnQoNDIsIDcpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5sb2FkSW50KDcpOwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0" +
- "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkaW50Ci8vLyAKLy8vIFtleGl0IGNvZGUgNV06IGh0dHBzOi8vZG9jcy50YWN0LWxh" +
- "bmcub3JnL2Jvb2svZXhpdC1jb2RlcyM1Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8gCkBu" +
- "YW1lKGxvYWRfaW50KSAvLyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIkxESVgiCmV4dGVuZHMgbXV0" +
- "YXRlcyBuYXRpdmUgbG9hZEludChzZWxmOiBTbGljZSwgbDogSW50KTogSW50OwoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8v" +
- "IAovLy8gUHJlbG9hZHMgYW5kIHJldHVybnMgYSBzaWduZWQgYGxgLWJpdCBgSW50YCBmcm9tIHRoZSBgU2xpY2VgLCBmb3IgMCDiiaQgbCDiiaQgMjU3LgovLy8gRG9l" +
- "c24ndCBtb2RpZnkgdGhlIGBTbGljZWAuCi8vLyAKLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYW4gb3V0LW9mLWJvdW5kcyBgbGAgdmFsdWUgdGhyb3cgYW4gZXhjZXB0" +
- "aW9uIHdpdGggCi8vLyBbZXhpdCBjb2RlIDVdOiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8gCi8vLyBBdHRlbXB0cyB0byBwcmVsb2FkIG1vcmUg" +
- "ZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4KLy8v" +
- "IAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmFzU2xpY2UoKTsK" +
- "Ly8vICAgICBsZXQgZml6ejogSW50ID0gcy5wcmVsb2FkSW50KDcpOwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFu" +
- "Zy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VwcmVsb2FkaW50Ci8vLyAKLy8vIFtleGl0IGNvZGUgNV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhp" +
- "dC1jb2RlcyM1Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8gCkBuYW1lKHByZWxvYWRfaW50" +
- "KSAvLyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIlBMRElYIgpleHRlbmRzIG5hdGl2ZSBwcmVsb2Fk" +
- "SW50KHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBJbnQ7CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBM" +
- "b2FkcyBhbmQgcmV0dXJucyBhbiB1bnNpZ25lZCBgbGAtYml0IGBJbnRgIGZyb20gdGhlIGBTbGljZWAsIGZvciAwIOKJpCBsIOKJpCAyNTYuCi8vLyAKLy8vIEF0dGVt" +
- "cHRzIHRvIHNwZWNpZnkgYW4gb3V0LW9mLWJvdW5kcyBgbGAgdmFsdWUgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggCi8vLyBbZXhpdCBjb2RlIDVdOiBgSW50ZWdlciBv" +
- "dXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8gCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4" +
- "Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAg" +
- "bGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVVaW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFVpbnQoNyk7Ci8v" +
- "LyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR1aW50Ci8vLyAKLy8v" +
- "IFtleGl0IGNvZGUgNV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM1Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8gCkBuYW1lKGxvYWRfdWludCkgLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90" +
- "IHJlcGxhY2VkIHdpdGggYXNtICJMRFVYIgpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRVaW50KHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBJbnQ7CgovLy8gRXh0ZW5z" +
- "aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBQcmVsb2FkcyBhbmQgcmV0dXJucyBhbiB1bnNpZ25lZCBgbGAtYml0IGBJbnRgIGZyb20g" +
- "dGhlIGBTbGljZWAsIGZvciAwIOKJpCBsIOKJpCAyNTYuCi8vLyBEb2Vzbid0IG1vZGlmeSB0aGUgYFNsaWNlYC4KLy8vIAovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBh" +
- "biBvdXQtb2YtYm91bmRzIGBsYCB2YWx1ZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCAKLy8vIFtleGl0IGNvZGUgNV06IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCBy" +
- "YW5nZWAuCi8vLyAKLy8vIEF0dGVtcHRzIHRvIHByZWxvYWQgbW9yZSBkYXRhIHRoYW4gdGhlIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGgg" +
- "Ci8vLyBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2Ug" +
- "PSBiZWdpbkNlbGwoKS5zdG9yZVVpbnQoNDIsIDcpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5wcmVsb2FkVWludCg3KTsKLy8vIH0KLy8vIGBg" +
- "YAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlcHJlbG9hZHVpbnQKLy8vIAovLy8gW2V4aXQg" +
- "Y29kZSA1XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzUKLy8vIFtleGl0IGNvZGUgOV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcu" +
- "b3JnL2Jvb2svZXhpdC1jb2RlcyM5Ci8vLyAKQG5hbWUocHJlbG9hZF91aW50KSAvLyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNvbXBpbGVyLCBzbyBub3QgcmVw" +
- "bGFjZWQgd2l0aCBhc20gIlBMRFVYIgpleHRlbmRzIG5hdGl2ZSBwcmVsb2FkVWludChzZWxmOiBTbGljZSwgbDogSW50KTogSW50OwoKLy8vIEV4dGVuc2lvbiBtdXRh" +
- "dGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8vIAovLy8gTG9hZHMgYSBzaW5nbGUgYml0IGFuZCByZXR1cm5zIGEgYEJvb2xgIHZhbHVlIGZyb20g" +
- "dGhlIGBTbGljZWAuIAovLy8gUmVhZHMgYHRydWVgIGlmIHRoZSBsb2FkZWQgYml0IGlzIGVxdWFsIHRvIDEsIGFuZCByZWFkcyBgZmFsc2VgIG90aGVyd2lzZS4KLy8v" +
- "IAovLy8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNoIGBCb29sYCB3aGVuIHRoZSBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCAK" +
- "Ly8vIFtleGl0IGNvZGUgOF06IGBDZWxsIG92ZXJmbG93YC4KLy8vIAovLy8gQXR0ZW1wdHMgdG8gbG9hZCBtb3JlIGRhdGEgdGhhbiB0aGUgYFNsaWNlYCBjb250YWlu" +
- "cyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCAKLy8vIFtleGl0IGNvZGUgOV06IGBDZWxsIHVuZGVyZmxvd2AuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxl" +
- "KCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlQm9vbCh0cnVlKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJvb2wgPSBzLmxv" +
- "YWRCb29sKCk7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBbZXhpdCBjb2RlIDhdOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29k" +
- "ZXMjOAovLy8gW2V4aXQgY29kZSA5XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzkKLy8vIAphc20oLT4gMSAwKSBleHRlbmRzIG11" +
- "dGF0ZXMgZnVuIGxvYWRCb29sKHNlbGY6IFNsaWNlKTogQm9vbCB7IDEgTERJIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2Vg" +
- "IHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4yLgovLy8gCi8vLyBTa2lwcyBhIHNpbmdsZSBiaXQgZnJvbSB0aGUgYFNsaWNlYC4gU2ltaWxhciB0byBkaXNj" +
- "YXJkaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYFNsaWNlLmxvYWRCb29sKClgLgovLy8gCi8vLyBBdHRlbXB0cyB0byBsb2FkIHN1Y2ggYEJvb2xgIHdoZW4gdGhlIGBT" +
- "bGljZWAgZG9lc24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA4XTogYENlbGwgb3ZlcmZsb3dgLgovLy8gCi8vLyBB" +
- "dHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSA5XTog" +
- "YENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkKLy8vICAg" +
- "ICAgICAgLnN0b3JlQm9vbCh0cnVlKQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCA3KQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8gICAgIAovLy8gICAgIHMu" +
- "c2tpcEJvb2woKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5sb2FkVWludCg3KTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBbZXhpdCBjb2RlIDhdOiBo" +
- "dHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOAovLy8gW2V4aXQgY29kZSA5XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9l" +
- "eGl0LWNvZGVzIzkKLy8vIAphc20gZXh0ZW5kcyBtdXRhdGVzIGZ1biBza2lwQm9vbChzZWxmOiBTbGljZSkgeyAxIExESSBOSVAgfQoKLy8vIEV4dGVuc2lvbiBtdXRh" +
- "dGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQWxpYXMgdG8gYFNsaWNlLmxvYWRCb29s" +
- "KClgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlQm9vbCh0cnVlKS5hc1Ns" +
- "aWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJvb2wgPSBzLmxvYWRCaXQoKTsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRiaXQKLy8vCmFzbSgtPiAxIDApIGV4dGVuZHMgbXV0YXRlcyBmdW4gbG9hZEJpdChzZWxmOiBTbGljZSk6" +
- "IEJvb2wgeyAxIExESSB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIExvYWRzIGFuZCByZXR1cm5z" +
- "IGEgc2VyaWFsaXplZCB1bnNpZ25lZCBgSW50YCB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDJeMTIwIC0gMSBpbmNsdXNpdmUgZnJvbSB0aGUgYFNsaWNlYC4g" +
- "VGhpcyB2YWx1ZSB1c3VhbGx5IHJlcHJlc2VudHMgdGhlIGFtb3VudCBpbiBuYW5vVG9uY29pbnMuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNoIGBJbnRgIHdo" +
- "ZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBBdHRl" +
- "bXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6IGBDZWxsIHVuZGVyZmxv" +
- "d2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVDb2lucyg0MikuYXNTbGlj" +
- "ZSgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRDb2lucygpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1s" +
- "YW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRjb2lucwovLy8KYXNtKCAtPiAxIDApIGV4dGVuZHMgbXV0YXRlcyBmdW4gbG9hZENvaW5zKHNlbGY6IFNsaWNl" +
- "KTogSW50IHsgTERWQVJVSU5UMTYgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRh" +
- "Y3QgMS42LjIuCi8vLyAKLy8vIFNraXBzIGEgc2VyaWFsaXplZCB1bnNpZ25lZCBgSW50YCB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDJeMTIwIC0gMSBpbmNs" +
- "dXNpdmUgZnJvbSB0aGUgYFNsaWNlYC4gU2ltaWxhciB0byBkaXNjYXJkaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYFNsaWNlLmxvYWRDb2lucygpYC4KLy8vCi8vLyBB" +
- "dHRlbXB0cyB0byBza2lwIHN1Y2ggYEludGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODog" +
- "YENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0" +
- "aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVn" +
- "aW5DZWxsKCkKLy8vICAgICAgICAgLnN0b3JlQ29pbnMoMjM5KQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCA3KQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8g" +
- "ICAgIAovLy8gICAgIHMuc2tpcENvaW5zKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFVpbnQoNyk7IC8vIDQyCi8vLyB9Ci8vLyBgYGAKLy8vIAovLy8g" +
- "U2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRjb2lucwovLy8gCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVuIHNraXBD" +
- "b2lucyhzZWxmOiBTbGljZSkgeyBMRFZBUlVJTlQxNiBOSVAgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZh" +
- "aWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQWxpYXMgdG8gYFNsaWNlLmxvYWRDb2lucygpYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgp" +
- "IHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZVZhclVpbnQxNig0MikuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxv" +
- "YWRWYXJVaW50MTYoKTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMj" +
- "c2xpY2Vsb2FkdmFydWludDE2Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbG9hZGNvaW5zCi8vLwphc20oIC0+IDEg" +
- "MCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBsb2FkVmFyVWludDE2KHNlbGY6IFNsaWNlKTogSW50IHsgTERWQVJVSU5UMTYgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBm" +
- "dW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwovLy8gQWxpYXMgdG8gYFNsaWNlLnNraXBDb2lucygpYC4K" +
- "Ly8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKQovLy8gICAgICAgICAuc3RvcmVWYXJVaW50" +
- "MTYoMjM5KQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCA3KQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8gICAgIAovLy8gICAgIHMuc2tpcFZhclVpbnQxNigp" +
- "OwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRVaW50KDcpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR2YXJ1aW50MTYKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xp" +
- "Y2Vsb2FkY29pbnMKLy8vCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVuIHNraXBWYXJVaW50MTYoc2VsZjogU2xpY2UpeyBMRFZBUlVJTlQxNiBOSVAgfQoKLy8vIEV4dGVu" +
- "c2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2ltaWxhciB0byBgU2xp" +
- "Y2UubG9hZENvaW5zKClgLCBidXQgd2l0aCBhIGRpZmZlcmVudCBgdmFsdWVgIHJhbmdlOiBmcm9tIC0yXjExOSB0byAyXjExOSAtIDEgaW5jbHVzaXZlLgovLy8KLy8v" +
- "IEF0dGVtcHRzIHRvIGxvYWQgc3VjaCBgSW50YCB3aGVuIGBTbGljZWAgZG9lc24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4" +
- "OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3" +
- "aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJl" +
- "Z2luQ2VsbCgpLnN0b3JlVmFySW50MTYoLTQyKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFZhckludDE2KCk7IC8vIC00MgovLy8gfQov" +
- "Ly8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR2YXJpbnQxNgovLy8KYXNtKCAtPiAxIDAp" +
- "IGV4dGVuZHMgbXV0YXRlcyBmdW4gbG9hZFZhckludDE2KHNlbGY6IFNsaWNlKTogSW50IHsgTERWQVJJTlQxNiB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0" +
- "aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMi4KLy8vCi8vLyBTaW1pbGFyIHRvIGBTbGljZS5za2lwQ29pbnMoKWAsIGJ1" +
- "dCB3aXRoIGEgZGlmZmVyZW50IGB2YWx1ZWAgcmFuZ2U6IGZyb20gLTJeMTE5IHRvIDJeMTE5IC0gMSBpbmNsdXNpdmUuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc2tpcCBz" +
- "dWNoIGBJbnRgIHdoZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93YC4K" +
- "Ly8vCi8vLyBBdHRlbXB0cyB0byBza2lwIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6IGBD" +
- "ZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkKLy8vICAgICAg" +
- "ICAgLnN0b3JlVmFySW50MTYoLTIzOSkKLy8vICAgICAgICAgLnN0b3JlVWludCg0MiwgNykKLy8vICAgICAgICAgLmFzU2xpY2UoKTsKLy8vICAgICAKLy8vICAgICBz" +
- "LnNraXBWYXJJbnQxNigpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRVaW50KDcpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczov" +
- "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR2YXJpbnQxNgovLy8KYXNtIGV4dGVuZHMgbXV0YXRlcyBmdW4gc2tpcFZhckludDE2KHNl" +
- "bGY6IFNsaWNlKSB7IExEVkFSSU5UMTYgTklQIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBz" +
- "aW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIExvYWRzIGFuZCByZXR1cm5zIGEgc2VyaWFsaXplZCB1bnNpZ25lZCBgSW50YCB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAw" +
- "IHRvIDJeMjQ4IOKIkiAxIGluY2x1c2l2ZSBmcm9tIHRoZSBgU2xpY2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxvYWQgc3VjaCBgSW50YCB3aGVuIGBTbGljZWAgZG9l" +
+ "Ly8KLy8gQnVpbGRlcgovLwoKLy8vIENyZWF0ZXMgYSBuZXcgZW1wdHkgYEJ1aWxkZXJgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAg" +
+ "IGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNl" +
+ "bGxzI2JlZ2luY2VsbAovLy8KYXNtIGZ1biBiZWdpbkNlbGwoKTogQnVpbGRlciB7IE5FV0MgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVy" +
+ "YCB0eXBlLgovLy8KLy8vIFN0b3JlcyBhIHNpZ25lZCBgYml0c2AtYml0IGB2YWx1ZWAgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgIGZvciAwIOKJpCBgYml0" +
+ "c2Ag4omkIDI1Ny4KLy8vIFJldHVybnMgdGhhdCBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJvdmlkZSBhbiBpbnN1ZmZpY2llbnQg" +
+ "b3Igb3V0LW9mLWJvdW5kcyBgYml0c2AgbnVtYmVyIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDVdOiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0" +
+ "ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0" +
+ "IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlSW50KDQyLCA3KTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
+ "cmUtY2VsbHMjYnVpbGRlcnN0b3JlaW50Ci8vLwovLy8gW2V4aXQgY29kZSA1XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzUKLy8v" +
+ "CkBuYW1lKHN0b3JlX2ludCkgLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJTVElYIgpleHRlbmRz" +
+ "IG5hdGl2ZSBzdG9yZUludChzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50LCBiaXRzOiBJbnQpOiBCdWlsZGVyOwoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhl" +
+ "IGBCdWlsZGVyYCB0eXBlLgovLy8KLy8vIFN0b3JlcyBhbiB1bnNpZ25lZCBgYml0c2AtYml0IGB2YWx1ZWAgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgIGZv" +
+ "ciAwIOKJpCBgYml0c2Ag4omkIDI1Ni4KLy8vIFJldHVybnMgdGhhdCBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3RvcmUgYSBuZWdh" +
+ "dGl2ZSBgdmFsdWVgIG9yIHByb3ZpZGUgYW4gaW5zdWZmaWNpZW50IG9yIG91dC1vZi1ib3VuZHMgYGJpdHNgCi8vLyBudW1iZXIgdGhyb3cgYW4gZXhjZXB0aW9uIHdp" +
+ "dGggW2V4aXQgY29kZSA1XTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBs" +
+ "ZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVyID0gYi5zdG9yZVVpbnQoNDIsIDYpOwovLy8gfQovLy8gYGBgCi8vLwov" +
+ "Ly8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmV1aW50Ci8vLwovLy8gW2V4aXQgY29kZSA1XTog" +
+ "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzUKLy8vCkBuYW1lKHN0b3JlX3VpbnQpIC8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMg" +
+ "Y29tcGlsZXIsIHNvIG5vdCByZXBsYWNlZCB3aXRoIGFzbSAiU1RVWCIKZXh0ZW5kcyBuYXRpdmUgc3RvcmVVaW50KHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQsIGJp" +
+ "dHM6IEludCk6IEJ1aWxkZXI7CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuCi8vLwovLy8gU3RvcmVzIGEgYEJvb2xgIGB2YWx1" +
+ "ZWAgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLgovLy8gV3JpdGVzIDEgYXMgYSBzaW5nbGUgYml0IGlmIGB2YWx1ZWAgaXMgYHRydWVgLCBhbmQgd3JpdGVz" +
+ "IDAgb3RoZXJ3aXNlLgovLy8gUmV0dXJucyB0aGF0IGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAg" +
+ "ICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVyID0gYi5zdG9yZUJvb2wodHJ1ZSk7ICAvLyB3cml0ZXMgMQovLy8g" +
+ "ICAgIGxldCBidXp6OiBCdWlsZGVyID0gYi5zdG9yZUJvb2woZmFsc2UpOyAvLyB3cml0ZXMgMAovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczov" +
+ "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmVib29sCi8vLwphc20odmFsdWUgc2VsZikgZXh0ZW5kcyBmdW4gc3RvcmVCb29sKHNl" +
+ "bGY6IEJ1aWxkZXIsIHZhbHVlOiBCb29sKTogQnVpbGRlciB7IDEgU1RJIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4gQXZh" +
+ "aWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQWxpYXMgdG8gYEJ1aWxkZXIuc3RvcmVCb29sKClgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxl" +
+ "KCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlQml0KHRydWUpOyAgLy8gd3Jp" +
+ "dGVzIDEKLy8vICAgICBsZXQgYnV6ejogQnVpbGRlciA9IGIuc3RvcmVCaXQoZmFsc2UpOyAvLyB3cml0ZXMgMAovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRw" +
+ "czovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmViaXQKLy8vCmFzbSh2YWx1ZSBzZWxmKSBleHRlbmRzIGZ1biBzdG9yZUJpdChz" +
+ "ZWxmOiBCdWlsZGVyLCB2YWx1ZTogQm9vbCk6IEJ1aWxkZXIgeyAxIFNUSSB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuCi8v" +
+ "LwovLy8gU3RvcmVzIChzZXJpYWxpemVzKSBhbiB1bnNpZ25lZCBgSW50YCBgdmFsdWVgIGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMl4xMjAg4oiSIDEgaW5jbHVzaXZl" +
+ "IGludG8gdGhlIGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4gVGhlIHNlcmlhbGl6YXRpb24gb2YgYHZhbHVlYCBjb25zaXN0cyBvZiBhIDQtYml0IHVuc2lnbmVkIGJpZy1l" +
+ "bmRpYW4gaW50ZWdlciBgbGAsIHdoaWNoIGlzIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGBsYCDiiaUgMCwgc3VjaCB0aGF0IGB2YWx1ZWAgPCAyXig4ICogYGxgKSwgZm9s" +
+ "bG93ZWQgYnkgYW4gOCAqIGBsYC1iaXQgdW5zaWduZWQgYmlnLWVuZGlhbiByZXByZXNlbnRhdGlvbiBvZiBgdmFsdWVgLiBSZXR1cm5zIHRoYXQgY29weSBvZiB0aGUg" +
+ "YEJ1aWxkZXJgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHN0b3JlIGFuIG91dC1vZi1ib3VuZHMgYHZhbHVlYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUg" +
+ "NTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiB3YXkgb2Ygc3RvcmluZyBuYW5vVG9uY29pbnMu" +
+ "Ci8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogQnVp" +
+ "bGRlciA9IGIuc3RvcmVDb2lucyg0Mik7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1" +
+ "aWxkZXJzdG9yZWNvaW5zCi8vLwphc20gZXh0ZW5kcyBmdW4gc3RvcmVDb2lucyhzZWxmOiBCdWlsZGVyLCB2YWx1ZTogSW50KTogQnVpbGRlciB7IFNUVkFSVUlOVDE2" +
+ "IH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQWxpYXMgdG8g" +
+ "YEJ1aWxkZXIuc3RvcmVDb2lucygpYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgp" +
+ "OwovLy8gICAgIGxldCBmaXp6OiBCdWlsZGVyID0gYi5zdG9yZVZhclVpbnQxNig0Mik7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9j" +
+ "cy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1aWxkZXJzdG9yZXZhcnVpbnQxNgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1j" +
+ "ZWxscyNidWlsZGVyc3RvcmVjb2lucwovLy8KYXNtIGV4dGVuZHMgZnVuIHN0b3JlVmFyVWludDE2KHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsg" +
+ "U1RWQVJVSU5UMTYgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8v" +
+ "LyBTaW1pbGFyIHRvIGBCdWlsZGVyLnN0b3JlQ29pbnMoKWAsIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGB2YWx1ZWAgcmFuZ2U6IGZyb20gLTJeMTE5IHRvIDJeMTE5IC0g" +
+ "MSBpbmNsdXNpdmUuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3RvcmUgYW4gb3V0LW9mLWJvdW5kcyBgdmFsdWVgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29k" +
+ "ZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVy" +
+ "ID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlVmFySW50MTYoLTQyKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0" +
+ "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JldmFyaW50MTYKLy8vCmFzbSBleHRlbmRzIGZ1biBzdG9yZVZhckludDE2KHNl" +
+ "bGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsgU1RWQVJJTlQxNiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUu" +
+ "IEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFN0b3JlcyAoc2VyaWFsaXplcykgYW4gdW5zaWduZWQgYEludGAgYHZhbHVlYCBpbiB0aGUgcmFuZ2Ug" +
+ "ZnJvbSAwIHRvIDJeMjQ4IOKIkiAxIGluY2x1c2l2ZSBpbnRvIHRoZSBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuIFRoZSBzZXJpYWxpemF0aW9uIG9mIGB2YWx1ZWAgY29u" +
+ "c2lzdHMgb2YgYSA1LWJpdCB1bnNpZ25lZCBiaWctZW5kaWFuIGludGVnZXIgYGxgLCB3aGljaCBpcyB0aGUgc21hbGxlc3QgaW50ZWdlciBgbGAg4omlIDAsIHN1Y2gg" +
+ "dGhhdCBgdmFsdWVgIDwgMl44ICogYGxgLCBmb2xsb3dlZCBieSBhbiA4ICogYGxgLWJpdCB1bnNpZ25lZCBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIG9mIGB2YWx1" +
+ "ZWAuIFJldHVybnMgdGhhdCBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3RvcmUgYW4gb3V0LW9mLWJvdW5kcyBgdmFsdWVgIHRocm93" +
+ "IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxl" +
+ "KCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiLnN0b3JlVmFyVWludDMyKDQyMDAwMCk7" +
+ "Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1aWxkZXJzdG9yZXZhcnVpbnQzMgovLy8K" +
+ "YXNtIGV4dGVuZHMgZnVuIHN0b3JlVmFyVWludDMyKHNlbGY6IEJ1aWxkZXIsIHZhbHVlOiBJbnQpOiBCdWlsZGVyIHsgU1RWQVJVSU5UMzIgfQoKLy8vIEV4dGVuc2lv" +
+ "biBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTaW1pbGFyIHRvIGBCdWlsZGVyLnN0b3Jl" +
+ "VmFyVWludDMyKClgLCBidXQgd2l0aCBhIGRpZmZlcmVudCBgdmFsdWVgIHJhbmdlOiBmcm9tIC0yXjI0NyB0byAyXjI0NyAtIDEgaW5jbHVzaXZlLgovLy8KLy8vIEF0" +
+ "dGVtcHRzIHRvIHN0b3JlIGFuIG91dC1vZi1ib3VuZHMgYHZhbHVlYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4" +
+ "cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAg" +
+ "IGxldCBmaXp6OiBCdWlsZGVyID0gYi5zdG9yZVZhckludDMyKC00MjAwMDApOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
+ "Lm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmV2YXJpbnQzMgovLy8KYXNtIGV4dGVuZHMgZnVuIHN0b3JlVmFySW50MzIoc2VsZjogQnVpbGRlciwgdmFsdWU6" +
+ "IEludCk6IEJ1aWxkZXIgeyBTVFZBUklOVDMyIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4KLy8vCi8vLyBTdG9yZXMgYSBy" +
+ "ZWZlcmVuY2UgYGNlbGxgIGludG8gYSBjb3B5IG9mIHRoZSBgQnVpbGRlcmAuCi8vLyBSZXR1cm5zIHRoYXQgY29weSBvZiB0aGUgYEJ1aWxkZXJgLgovLy8KLy8vIEFz" +
+ "IGEgc2luZ2xlIGBDZWxsYCBjYW4gc3RvcmUgdXAgdG8gNCByZWZlcmVuY2VzLCBhdHRlbXB0cyB0byBzdG9yZSBtb3JlIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8v" +
+ "LyBbZXhpdCBjb2RlIDhdOiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBi" +
+ "ZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogQnVpbGRlciA9IGIuc3RvcmVSZWYoZW1wdHlDZWxsKCkpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8g" +
+ "KiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmVyZWYKLy8vCi8vLyBbZXhpdCBjb2RlIDhdOiBodHRwczovL2RvY3Mu" +
+ "dGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOAovLy8KYXNtKGNlbGwgc2VsZikgZXh0ZW5kcyBmdW4gc3RvcmVSZWYoc2VsZjogQnVpbGRlciwgY2VsbDogQ2Vs" +
+ "bCk6IEJ1aWxkZXIgeyBTVFJFRiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuCi8vLwovLy8gU3RvcmVzIGEgYHNsaWNlYCBp" +
+ "bnRvIGEgY29weSBvZiB0aGUgYEJ1aWxkZXJgLgovLy8gUmV0dXJucyB0aGF0IGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhh" +
+ "bXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBzOiBTbGljZSA9IGVtcHR5Q2VsbCgpLmFzU2xpY2UoKTsKLy8v" +
+ "ICAgICBsZXQgZml6ejogQnVpbGRlciA9IGIuc3RvcmVTbGljZShzKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFu" +
+ "Zy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3Jlc2xpY2UKLy8vCmFzbSBleHRlbmRzIGZ1biBzdG9yZVNsaWNlKHNlbGY6IEJ1aWxkZXIsIHNsaWNlOiBTbGlj" +
+ "ZSk6IEJ1aWxkZXIgeyBTVFNMSUNFUiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEu" +
+ "NS4wLgovLy8KLy8vIEFwcGVuZHMgYWxsIGRhdGEgZnJvbSBhIGBCdWlsZGVyYCBgY2VsbGAgdG8gdGhlIGNvcHkgb2YgdGhlIGBCdWlsZGVyYC4gUmV0dXJucyB0aGF0" +
+ "IGNvcHkuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKS5zdG9yZUNvaW5zKDQyKTsK" +
+ "Ly8vICAgICBsZXQgZml6ejogQnVpbGRlciA9IGJlZ2luQ2VsbCgpLnN0b3JlQnVpbGRlcihiKTsKLy8vICAgICBiLmVuZENlbGwoKSA9PSBmaXp6LmVuZENlbGwoKTsg" +
+ "Ly8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyc3RvcmVidWlsZGVy" +
+ "Ci8vLwphc20gZXh0ZW5kcyBmdW4gc3RvcmVCdWlsZGVyKHNlbGY6IEJ1aWxkZXIsIGNlbGw6IEJ1aWxkZXIpOiBCdWlsZGVyIHsgU1RCUiB9CgovLy8gRXh0ZW5zaW9u" +
+ "IGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIElmIHRoZSBgY2VsbGAgaXMgbm90IGBudWxs" +
+ "YCwgc3RvcmVzIDEgYXMgYSBzaW5nbGUgYml0IGFuZCB0aGVuIHJlZmVyZW5jZSBgY2VsbGAgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1aWxkZXJgLiBSZXR1cm5zIHRo" +
+ "YXQgY29weS4KLy8vCi8vLyBJZiB0aGUgYGNlbGxgIGlzIGBudWxsYCwgb25seSBzdG9yZXMgMCBhcyBhIHNpbmdsZSBiaXQgaW50byB0aGUgY29weSBvZiB0aGUgYEJ1" +
+ "aWxkZXJgLiBSZXR1cm5zIHRoYXQgY29weS4KLy8vCi8vLyBBcyBhIHNpbmdsZSBgQ2VsbGAgY2FuIHN0b3JlIHVwIHRvIDQgcmVmZXJlbmNlcywgYXR0ZW1wdHMgdG8g" +
+ "c3RvcmUgbW9yZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxl" +
+ "KCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJ1aWxkZXIgPSBiCi8vLyAgICAgICAgIC5zdG9yZU1heWJl" +
+ "UmVmKGVtcHR5Q2VsbCgpKSAvLyAxLCB0aGVuIGVtcHR5IGNlbGwKLy8vICAgICAgICAgLnN0b3JlTWF5YmVSZWYobnVsbCk7ICAgICAgIC8vIDAKLy8vIH0KLy8vIGBg" +
+ "YAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcnN0b3JlbWF5YmVyZWYKLy8vCmFzbShjZWxsIHNlbGYp" +
+ "IGV4dGVuZHMgZnVuIHN0b3JlTWF5YmVSZWYoc2VsZjogQnVpbGRlciwgY2VsbDogQ2VsbD8pOiBCdWlsZGVyIHsgU1RPUFRSRUYgfQoKLy8vIEV4dGVuc2lvbiBmdW5j" +
+ "dGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8KLy8vIENvbnZlcnRzIGEgYEJ1aWxkZXJgIGludG8gYW4gb3JkaW5hcnkgYENlbGxgLgovLy8KLy8vIE5PVEU6" +
+ "ICoqR2FzIGV4cGVuc2l2ZSEqKiBUaGlzIGZ1bmN0aW9uIHVzZXMgNTAwIGdhcyB1bml0cyBvciBtb3JlLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkg" +
+ "ewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGM6IENlbGwgPSBiLmVuZENlbGwoKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8v" +
+ "IFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcmVuZGNlbGwKLy8vCmFzbSBleHRlbmRzIGZ1biBlbmRDZWxs" +
+ "KHNlbGY6IEJ1aWxkZXIpOiBDZWxsIHsgRU5EQyB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyB0" +
+ "aGUgbnVtYmVyIG9mIGNlbGwgcmVmZXJlbmNlcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgYEJ1aWxkZXJgIGFzIGFuIGBJbnRgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1" +
+ "biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IHJlZnM6IEludCA9IGIucmVmcygpOyAvLyAwCi8vLyB9" +
+ "Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2J1aWxkZXJyZWZzCi8vLwphc20gZXh0ZW5k" +
+ "cyBmdW4gcmVmcyhzZWxmOiBCdWlsZGVyKTogSW50IHsgQlJFRlMgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8KLy8v" +
+ "IFJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgYWxyZWFkeSBzdG9yZWQgaW4gdGhlIGBCdWlsZGVyYCBhcyBhbiBgSW50YC4KLy8vCi8vLyBgYGB0YWN0Ci8v" +
+ "LyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBiaXRzOiBJbnQgPSBiLmJpdHMoKTsgLy8gMAov" +
+ "Ly8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyYml0cwovLy8KYXNtIGV4" +
+ "dGVuZHMgZnVuIGJpdHMoc2VsZjogQnVpbGRlcik6IEludCB7IEJCSVRTIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4gQXZh" +
+ "aWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIGBJbnRgIGRlcHRoIG9mIHRoZSBgQnVpbGRlcmAuIFByb2R1Y2Vz" +
+ "IDAgaWYgdGhlIGBCdWlsZGVyYCBoYXMgbm8gcmVmZXJlbmNlcyBzdG9yZWQgc28gZmFyLCBvdGhlcndpc2UgMSBwbHVzIHRoZSBtYXhpbXVtIG9mIHRoZSBkZXB0aHMg" +
+ "b2YgdGhlIHJlZmVyZW5jZWQgY2VsbHMuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwo" +
+ "KS5zdG9yZUludCg0MiwgNyk7Ci8vLyAgICAgbGV0IGRlcHRoOiBJbnQgPSBiLmRlcHRoKCk7IC8vIDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9k" +
+ "b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcmRlcHRoCi8vLwphc20gZXh0ZW5kcyBmdW4gZGVwdGgoc2VsZjogQnVpbGRlcik6IEludCB7IEJE" +
+ "RVBUSCB9CgovLwovLyBTbGljZQovLwoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBDZWxsYCB0eXBlLgovLy8KLy8vIE9wZW5zIHRoZSBgQ2VsbGAgZm9y" +
+ "IHBhcnNpbmcgYW5kIHJldHVybnMgaXQgYXMgYSBgU2xpY2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBjOiBDZWxsID0g" +
+ "YmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYy5iZWdpblBhcnNlKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9j" +
+ "cy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxiZWdpbnBhcnNlCi8vLwphc20gZXh0ZW5kcyBmdW4gYmVnaW5QYXJzZShzZWxmOiBDZWxsKTogU2xpY2Ug" +
+ "eyBDVE9TIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuCi8vLwovLy8gTG9hZHMgdGhlIG5leHQgcmVmZXJlbmNl" +
+ "IGZyb20gdGhlIGBTbGljZWAgYXMgYSBgQ2VsbGAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNoIHJlZmVyZW5jZSBgQ2VsbGAgd2hlbiBgU2xpY2VgIGRvZXNu" +
+ "J3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aAovLy8gW2V4aXQgY29kZSA4XTogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxv" +
+ "YWQgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aAovLy8gW2V4aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4K" +
+ "Ly8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczE6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFz" +
+ "U2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogQ2VsbCA9IHMxLmxvYWRSZWYoKTsKLy8vCi8vLyAgICAgbGV0IHMyOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAg" +
+ "ICAgIC5zdG9yZVJlZihlbXB0eUNlbGwoKSkKLy8vICAgICAgICAgLnN0b3JlUmVmKHMxLmFzQ2VsbCgpKQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8gICAgIGxl" +
+ "dCByZWYxOiBDZWxsID0gczIubG9hZFJlZigpOwovLy8gICAgIGxldCByZWYyOiBDZWxsID0gczIubG9hZFJlZigpOwovLy8gICAgIHJlZjEgPT0gcmVmMjsgLy8gZmFs" +
+ "c2UKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFtleGl0IGNvZGUgOF06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM4Ci8vLyBbZXhpdCBj" +
+ "b2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8KYXNtKC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBsb2FkUmVm" +
+ "KHNlbGY6IFNsaWNlKTogQ2VsbCB7IExEUkVGIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBz" +
+ "aW5jZSBUYWN0IDEuNi4yLgovLy8KLy8vIFNraXBzIHRoZSBuZXh0IHJlZmVyZW5jZSBmcm9tIHRoZSBgU2xpY2VgLiBTaW1pbGFyIHRvIGRpc2NhcmRpbmcgdGhlIHJl" +
+ "dHVybiB2YWx1ZSBvZiBgU2xpY2UubG9hZFJlZigpYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBza2lwIHN1Y2ggcmVmZXJlbmNlIGBDZWxsYCB3aGVuIGBTbGljZWAgZG9l" +
+ "c24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDhdOiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8g" +
+ "c2tpcCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dg" +
+ "LgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzMTogU2xpY2UgPSBiZWdpbkNlbGwoKQovLy8gICAgICAgICAuc3RvcmVSZWYo" +
+ "ZW1wdHlDZWxsKCkpCi8vLyAgICAgICAgIC5zdG9yZVVpbnQoNDIsIDMyKQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8KLy8vICAgICBzMS5za2lwUmVmKCk7Ci8v" +
+ "LyAgICAgbGV0IGZpeno6IEludCA9IHMxLmxvYWRVaW50KDMyKTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFtleGl0IGNvZGUgOF06IGh0dHBzOi8vZG9jcy50" +
+ "YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM4Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQov" +
+ "Ly8KYXNtIGV4dGVuZHMgbXV0YXRlcyBmdW4gc2tpcFJlZihzZWxmOiBTbGljZSkgeyBMRFJFRiBOSVAgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBT" +
+ "bGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gUHJlbG9hZHMgdGhlIG5leHQgcmVmZXJlbmNlIGZyb20gdGhlIGBTbGljZWAgYXMg" +
+ "YSBgQ2VsbGAuIERvZXNuJ3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBgU2xpY2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHByZWxvYWQgc3VjaCByZWZlcmVuY2UgYENlbGxg" +
+ "IHdoZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBB" +
+ "dHRlbXB0cyB0byBwcmVsb2FkIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6IGBDZWxsIHVu" +
+ "ZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8gICAgIGxldCBzMTogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZVJlZihlbXB0" +
+ "eUNlbGwoKSkuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBDZWxsID0gczEucHJlbG9hZFJlZigpOyAvLyBkaWRuJ3QgbW9kaWZ5IHMxCi8vLwovLy8gICAgIGxl" +
+ "dCBzMjogU2xpY2UgPSBiZWdpbkNlbGwoKQovLy8gICAgICAgICAuc3RvcmVSZWYoZW1wdHlDZWxsKCkpCi8vLyAgICAgICAgIC5zdG9yZVJlZihzMS5hc0NlbGwoKSkK" +
+ "Ly8vICAgICAgICAgLmFzU2xpY2UoKTsKLy8vCi8vLyAgICAgbGV0IHJlZjE6IENlbGwgPSBzMi5wcmVsb2FkUmVmKCk7Ci8vLyAgICAgbGV0IHJlZjI6IENlbGwgPSBz" +
+ "Mi5wcmVsb2FkUmVmKCk7Ci8vLyAgICAgcmVmMSA9PSByZWYyOyAvLyB0cnVlCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0" +
+ "LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlcHJlbG9hZHJlZgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMKLy8vCmFz" +
+ "bSBleHRlbmRzIGZ1biBwcmVsb2FkUmVmKHNlbGY6IFNsaWNlKTogQ2VsbCB7IFBMRFJFRiB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUg" +
+ "YFNsaWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBMb2FkcyBhIHNpbmdsZSBiaXQgZnJvbSB0aGUgYFNsaWNlYDogaWYgaXQncyAx" +
+ "LCB0aGVuIHRoZSByZWZlcmVuY2VkIGBDZWxsYCBpcyBsb2FkZWQgYW5kIHJldHVybmVkLiBJZiB0aGUgbG9hZGVkIGJpdCBpcyAwLCB0aGVuIG5vdGhpbmcgZWxzZSBp" +
+ "cyBsb2FkZWQgYW5kIGBudWxsYCBpcyByZXR1cm5lZC4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIHN1Y2ggcmVmZXJlbmNlIGBDZWxsYCB3aGVuIGBTbGljZWAgZG9l" +
"c24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBt" +
"b3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBg" +
- "YHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlVmFyVWludDMyKDQyMDAwMCkuYXNTbGljZSgpOwov" +
- "Ly8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRWYXJVaW50MzIoKTsgLy8gNDIwMDAwCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0" +
- "LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbG9hZHZhcnVpbnQzMgovLy8KYXNtKCAtPiAxIDApIGV4dGVuZHMgbXV0YXRlcyBmdW4gbG9hZFZhclVpbnQzMihz" +
- "ZWxmOiBTbGljZSk6IEludCB7IExEVkFSVUlOVDMyIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJs" +
- "ZSBzaW5jZSBUYWN0IDEuNi4yLgovLy8KLy8vIFNraXBzIGEgc2VyaWFsaXplZCB1bnNpZ25lZCBgSW50YCB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDJeMjQ4" +
- "IOKIkiAxIGluY2x1c2l2ZSBmcm9tIHRoZSBgU2xpY2VgLiBTaW1pbGFyIHRvIGRpc2NhcmRpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgU2xpY2UubG9hZFZhclVpbnQz" +
- "MigpYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBza2lwIHN1Y2ggYEludGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0" +
- "aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBh" +
- "biBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQg" +
- "czogU2xpY2UgPSBiZWdpbkNlbGwoKQovLy8gICAgICAgICAuc3RvcmVWYXJVaW50MzIoMjM5KQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCA3KQovLy8gICAgICAg" +
- "ICAuYXNTbGljZSgpOwovLy8gICAgIAovLy8gICAgIHMuc2tpcFZhclVpbnQzMigpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRVaW50KDcpOyAvLyA0Mgov" +
- "Ly8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR2YXJ1aW50MzIKLy8vCmFzbSBl" +
- "eHRlbmRzIG11dGF0ZXMgZnVuIHNraXBWYXJVaW50MzIoc2VsZjogU2xpY2UpIHsgTERWQVJVSU5UMzIgTklQIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rp" +
- "b24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNpbWlsYXIgdG8gYFNsaWNlLmxvYWRWYXJVaW50MzIoKWAs" +
- "IGJ1dCB3aXRoIGEgZGlmZmVyZW50IGB2YWx1ZWAgcmFuZ2U6IGZyb20gLTJeMjQ3IHRvIDJeMjQ3IC0gMSBpbmNsdXNpdmUuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9h" +
- "ZCBzdWNoIGBJbnRgIHdoZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93" +
- "YC4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6" +
- "IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVW" +
- "YXJJbnQzMigtNDIwMDAwKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFZhckludDMyKCk7IC8vIC00MjAwMDAKLy8vIH0KLy8vIGBgYAov" +
- "Ly8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkdmFyaW50MzIKLy8vCmFzbSggLT4gMSAwKSBleHRlbmRz" +
- "IG11dGF0ZXMgZnVuIGxvYWRWYXJJbnQzMihzZWxmOiBTbGljZSk6IEludCB7IExEVkFSSU5UMzIgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3Ig" +
- "dGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwovLy8gU2ltaWxhciB0byBgU2xpY2Uuc2tpcFZhclVpbnQzMigpYCwgYnV0IHdp" +
- "dGggYSBkaWZmZXJlbnQgYHZhbHVlYCByYW5nZTogZnJvbSAtMl4yNDcgdG8gMl4yNDcgLSAxIGluY2x1c2l2ZS4KLy8vCi8vLyBBdHRlbXB0cyB0byBza2lwIHN1Y2gg" +
- "YEludGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8K" +
- "Ly8vIEF0dGVtcHRzIHRvIHNraXAgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwg" +
- "dW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKQovLy8gICAgICAgICAu" +
- "c3RvcmVWYXJJbnQzMigtMjM5KQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCA3KQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8gICAgIAovLy8gICAgIHMuc2tp" +
- "cFZhckludDMyKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFVpbnQoNyk7IC8vIDQyCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9j" +
- "cy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbG9hZHZhcnVpbnQzMgovLy8KYXNtIGV4dGVuZHMgbXV0YXRlcyBmdW4gc2tpcFZhckludDMyKHNlbGY6" +
- "IFNsaWNlKSB7IExEVkFSSU5UMzIgTklQIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuCi8vLyAKLy8vIExvYWRz" +
- "IGFsbCBidXQgdGhlIGZpcnN0IDAg4omkIGBsYCDiiaQgMTAyMyBiaXRzIGZyb20gdGhlIGBTbGljZWAuCi8vLyAKLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYW4gb3V0" +
- "LW9mLWJvdW5kcyBgbGAgdmFsdWUgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggCi8vLyBbZXhpdCBjb2RlIDVdOiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2Vg" +
- "LgovLy8gCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4" +
- "aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5D" +
- "ZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmFzU2xpY2UoKTsKLy8vICAgICBzLnNraXBCaXRzKDUpOyAgICAgICAgICAgICAgICAgICAvLyBhbGwgYnV0IGZpcnN0IDUgYml0" +
- "cwovLy8gICAgIGxldCBmaXp6OiBTbGljZSA9IHMubG9hZEJpdHMoMSk7IC8vIGxvYWQgb25seSAxIGJpdAovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZTogaHR0cHM6" +
- "Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vza2lwYml0cwovLy8gCi8vLyBbZXhpdCBjb2RlIDVdOiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
- "Lm9yZy9ib29rL2V4aXQtY29kZXMjNQovLy8gW2V4aXQgY29kZSA5XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzkKLy8vIAphc20g" +
- "ZXh0ZW5kcyBtdXRhdGVzIGZ1biBza2lwQml0cyhzZWxmOiBTbGljZSwgbDogSW50KSB7IFNEU0tJUEZJUlNUIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRo" +
- "ZSBgU2xpY2VgIHR5cGUuCi8vLyAKLy8vIENoZWNrcyB3aGV0aGVyIHRoZSBgU2xpY2VgIGlzIGVtcHR5IChpLmUuLCBjb250YWlucyBubyBiaXRzIG9mIGRhdGEgYW5k" +
- "IG5vIGNlbGwgcmVmZXJlbmNlcykuCi8vLyBJZiBpdCBpcyBub3QsIGl0IHRocm93cyBhbiBleGNlcHRpb24gd2l0aCBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZs" +
- "b3dgLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZW1wdHlPbmU6IFNsaWNlID0gZW1wdHlTbGljZSgpOwovLy8gICAgIGVt" +
- "cHR5T25lLmVuZFBhcnNlKCk7IC8vIG5vdGhpbmcsIGFzIGl0J3MgZW1wdHkKLy8vIAovLy8gICAgIGxldCBwYXVsOiBTbGljZSA9ICJGZWFyIGlzIHRoZSBtaW5kLWtp" +
- "bGxlciIuYXNTbGljZSgpOwovLy8gICAgIHRyeSB7Ci8vLyAgICAgICAgIHBhdWwuZW5kUGFyc2UoKTsgLy8gdGhyb3dzIGV4aXQgY29kZSA5Ci8vLyAgICAgfQovLy8g" +
- "fQovLy8gYGBgCi8vLyAKLy8vIFtleGl0IGNvZGUgOV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM5Ci8vLyAKYXNtIGV4dGVuZHMg" +
- "ZnVuIGVuZFBhcnNlKHNlbGY6IFNsaWNlKSB7IEVORFMgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNl" +
- "IFRhY3QgMS42LjAuCi8vLwovLy8gUHJlbG9hZHMgYWxsIGJ1dCB0aGUgbGFzdCAwIOKJpCBgbGVuYCDiiaQgMTAyMyBiaXRzIGZyb20gdGhlIGBTbGljZWAuCi8vLwov" +
- "Ly8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBvdXQtb2YtYm91bmRzIGBsZW5gIHZhbHVlIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdl" +
- "ciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHByZWxvYWQgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBl" +
- "eGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczog" +
- "U2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZUludCg0MiwgNykuYXNTbGljZSgpOwovLy8gICAgIGxldCBhbGxCdXRMYXN0Rml2ZTogU2xpY2UgPSBzLnNraXBMYXN0Qml0" +
- "cyg1KTsgLy8gYWxsIGJ1dCBsYXN0IDUgYml0cywKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGkuZS4gb25s" +
- "eSBmaXJzdCAyCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlc2tpcGxhc3RiaXRz" +
- "Ci8vLwphc20gZXh0ZW5kcyBmdW4gc2tpcExhc3RCaXRzKHNlbGY6IFNsaWNlLCBsZW46IEludCk6IFNsaWNlIHsgU0RTS0lQTEFTVCB9CgovLy8gRXh0ZW5zaW9uIGZ1" +
- "bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBQcmVsb2FkcyB0aGUgZmlyc3QgMCDiiaQgYGxlbmAg" +
- "4omkIDEwMjMgYml0cyBmcm9tIHRoZSBgU2xpY2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYW4gb3V0LW9mLWJvdW5kcyBgbGVuYCB2YWx1ZSB0aHJvdyBh" +
- "biBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBwcmVsb2FkIG1vcmUg" +
- "ZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFj" +
- "dAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQg" +
- "Zmlyc3RGaXZlOiBTbGljZSA9IHMuZmlyc3RCaXRzKDUpOyAvLyBmaXJzdCA1IGJpdHMKLy8vIH0KLy8vIGBgYAovLy8KLy8vIEluIG9yZGVyIHRvIHJlZHVjZSBnYXMg" +
- "dXNhZ2UsIHByZWZlciBjYWxsaW5nIGBTbGljZS5wcmVsb2FkQml0cygpYCBvdmVyIHVzaW5nIHRoaXMgZnVuY3Rpb24gc2luY2UgdGhlIGZvcm1lciBpcyBtb3JlIG9w" +
- "dGltaXplZC4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlZmlyc3RiaXRzCi8vLyAqIGh0dHBz" +
- "Oi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlcHJlbG9hZGJpdHMKLy8vCmFzbSBleHRlbmRzIGZ1biBmaXJzdEJpdHMoc2VsZjogU2xpY2Us" +
- "IGxlbjogSW50KTogU2xpY2UgeyBTRENVVEZJUlNUIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBU" +
- "YWN0IDEuNi4wLgovLy8KLy8vIFByZWxvYWRzIHRoZSBsYXN0IDAg4omkIGBsZW5gIOKJpCAxMDIzIGJpdHMgZnJvbSB0aGUgYFNsaWNlYC4KLy8vCi8vLyBBdHRlbXB0" +
- "cyB0byBzcGVjaWZ5IGFuIG91dC1vZi1ib3VuZHMgYGxlbmAgdmFsdWUgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBl" +
- "eHBlY3RlZCByYW5nZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJlbG9hZCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3" +
- "aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJl" +
- "Z2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGxhc3RGaXZlOiBTbGljZSA9IHMubGFzdEJpdHMoNSk7IC8vIGxhc3QgNSBiaXRz" +
- "Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbGFzdGJpdHMKLy8vCmFzbSBleHRl" +
- "bmRzIGZ1biBsYXN0Qml0cyhzZWxmOiBTbGljZSwgbGVuOiBJbnQpOiBTbGljZSB7IFNEQ1VUTEFTVCB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNs" +
- "aWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgYEludGAgZGVwdGggb2YgdGhlIGBTbGlj" +
- "ZWAuIFByb2R1Y2VzIDAgaWYgdGhlIGBTbGljZWAgaGFzIG5vIHJlZmVyZW5jZXMsIG90aGVyd2lzZSAxIHBsdXMgdGhlIG1heGltdW0gb2YgdGhlIGRlcHRocyBvZiB0" +
- "aGUgcmVmZXJlbmNlZCBjZWxscy4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9y" +
- "ZUludCg0MiwgNykuYXNTbGljZSgpOwovLy8gICAgIGxldCBkZXB0aDogSW50ID0gcy5kZXB0aCgpOyAvLyAwCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBz" +
- "Oi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlZGVwdGgKLy8vCmFzbSBleHRlbmRzIGZ1biBkZXB0aChzZWxmOiBTbGljZSk6IEludCB7IFNE" +
- "RVBUSCB9CgovLwovLyBTbGljZSBzaXplCi8vCgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBSZXR1cm5zIHRoZSBu" +
- "dW1iZXIgb2YgcmVmZXJlbmNlcyBpbiB0aGUgYFNsaWNlYCBhcyBhbiBgSW50YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0" +
- "IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5yZWZzKCk7Ci8vLyB9" +
- "Ci8vLyBgYGAKLy8vIAovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZXJyZWZzCi8vLyAKYXNtIGV4dGVuZHMgZnVu" +
- "IHJlZnMoc2VsZjogU2xpY2UpOiBJbnQgeyBTUkVGUyB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8vLyBSZXR1cm5z" +
- "IHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIGluIHRoZSBgU2xpY2VgIGFzIGFuIGBJbnRgLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAg" +
- "ICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZVJlZihlbXB0eUNlbGwoKSkuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmJpdHMoKTsK" +
- "Ly8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlYml0cwovLy8gCmFzbSBleHRlbmRz" +
- "IGZ1biBiaXRzKHNlbGY6IFNsaWNlKTogSW50IHsgU0JJVFMgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8vIAovLy8gQ2hl" +
- "Y2tzIHdoZXRoZXIgdGhlIGBTbGljZWAgaXMgZW1wdHkgKGkuZS4sIGNvbnRhaW5zIG5vIGJpdHMgb2YgZGF0YSBhbmQgbm8gY2VsbCByZWZlcmVuY2VzKS4KLy8vIFJl" +
- "dHVybnMgYHRydWVgIGlmIGl0IGlzIGVtcHR5LCBgZmFsc2VgIG90aGVyd2lzZS4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0" +
- "IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogQm9vbCA9IHMuZW1wdHkoKTsgICAg" +
- "ICAgICAgICAgICAgICAgICAvLyBmYWxzZQovLy8gICAgIGxldCBidXp6OiBCb29sID0gYmVnaW5DZWxsKCkuYXNTbGljZSgpLmVtcHR5KCk7IC8vIHRydWUKLy8vIH0K" +
- "Ly8vIGBgYAovLy8gCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlZW1wdHkKLy8vIAphc20gZXh0ZW5kcyBmdW4g" +
- "ZW1wdHkoc2VsZjogU2xpY2UpOiBCb29sIHsgU0VNUFRZIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuCi8vLyAKLy8vIENoZWNr" +
- "cyB3aGV0aGVyIHRoZSBgU2xpY2VgIGhhcyBubyBiaXRzIG9mIGRhdGEuCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgbm8gZGF0YSwgYGZhbHNlYCBvdGhlcndp" +
- "c2UuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlUmVmKGVtcHR5Q2VsbCgp" +
- "KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJvb2wgPSBzLmRhdGFFbXB0eSgpOyAgLy8gdHJ1ZQovLy8gICAgIAovLy8gICAgIGxldCBzMjogU2xpY2UgPSBi" +
- "ZWdpbkNlbGwoKS5zdG9yZUludCg0MiwgNykuYXNTbGljZSgpOwovLy8gICAgIGxldCBidXp6OiBCb29sID0gczIuZGF0YUVtcHR5KCk7IC8vIGZhbHNlCi8vLyB9Ci8v" +
- "LyBgYGAKLy8vIAovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWRhdGFlbXB0eQovLy8gCmFzbSBleHRlbmRzIGZ1" +
- "biBkYXRhRW1wdHkoc2VsZjogU2xpY2UpOiBCb29sIHsgU0RFTVBUWSB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8gCi8v" +
- "LyBDaGVja3Mgd2hldGhlciB0aGUgYFNsaWNlYCBoYXMgbm8gcmVmZXJlbmNlcy4KLy8vIFJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBubyByZWZlcmVuY2VzLCBgZmFs" +
- "c2VgIG90aGVyd2lzZS4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYo" +
- "ZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogQm9vbCA9IHMucmVmc0VtcHR5KCk7ICAgICAgICAgICAgICAgICAgICAgLy8gZmFsc2UKLy8v" +
- "ICAgICBsZXQgYnV6ejogQm9vbCA9IGJlZ2luQ2VsbCgpLmFzU2xpY2UoKS5yZWZzRW1wdHkoKTsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZTogaHR0" +
- "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VyZnNlbXB0eQovLy8gCmFzbSBleHRlbmRzIGZ1biByZWZzRW1wdHkoc2VsZjogU2xpY2Up" +
- "OiBCb29sIHsgU1JFTVBUWSB9CgovLwovLyBDb252ZXJzaW9ucwovLwoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBCdWlsZGVyYCB0eXBlLgovLy8gCi8v" +
- "LyBDb252ZXJ0cyB0aGUgYEJ1aWxkZXJgIGludG8gYSBgU2xpY2VgIGFuZCByZXR1cm5zIGl0LgovLy8gQW4gYWxpYXMgdG8gYHNlbGYuZW5kQ2VsbCgpLmJlZ2luUGFy" +
- "c2UoKWAuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBiOiBCdWlsZGVyID0gYmVnaW5DZWxsKCk7Ci8vLyAgICAgbGV0IGZp" +
- "eno6IFNsaWNlID0gYi5hc1NsaWNlKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNi" +
- "dWlsZGVyYXNTbGljZQovLy8gCmlubGluZSBleHRlbmRzIGZ1biBhc1NsaWNlKHNlbGY6IEJ1aWxkZXIpOiBTbGljZSB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCku" +
- "YmVnaW5QYXJzZSgpOwp9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYENlbGxgIHR5cGUuCi8vLyAKLy8vIENvbnZlcnRzIHRoZSBgQ2VsbGAgdG8gYSBg" +
- "U2xpY2VgIGFuZCByZXR1cm5zIGl0LgovLy8gQW4gYWxpYXMgdG8gYHNlbGYuYmVnaW5QYXJzZSgpYC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7" +
- "Ci8vLyAgICAgbGV0IGM6IENlbGwgPSBlbXB0eUNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBjLmFzU2xpY2UoKTsKLy8vIH0KLy8vIGBgYAovLy8gCi8v" +
- "LyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxhc1NsaWNlCi8vLyAKaW5saW5lIGV4dGVuZHMgZnVuIGFzU2xpY2Uoc2Vs" +
- "ZjogQ2VsbCk6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmJlZ2luUGFyc2UoKTsKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4K" +
- "Ly8vIAovLy8gQ29udmVydHMgdGhlIGBTbGljZWAgdG8gYSBgQ2VsbGAgYW5kIHJldHVybnMgaXQuCi8vLyBBbiBhbGlhcyB0byBgYmVnaW5DZWxsKCkuc3RvcmVTbGlj" +
- "ZShzZWxmKS5lbmRDZWxsKClgLgovLy8gCi8vLyBOT1RFOiAqKkdhcyBleHBlbnNpdmUhKiogVGhpcyBmdW5jdGlvbiB1c2VzIDUwMCBnYXMgdW5pdHMgb3IgbW9yZS4K" +
- "Ly8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuYXNTbGljZSgpOwovLy8gICAgIGxldCBm" +
- "aXp6OiBDZWxsID0gcy5hc0NlbGwoKTsKLy8vICAgICBsZXQgYnV6ejogQ2VsbCA9IGJlZ2luQ2VsbCgpLnN0b3JlU2xpY2UocykuZW5kQ2VsbCgpOwovLy8gICAgIAov" +
- "Ly8gICAgIGZpenogPT0gYnV6ejsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2Vs" +
- "bHMjc2xpY2Vhc2NlbGwKLy8vIAppbmxpbmUgZXh0ZW5kcyBmdW4gYXNDZWxsKHNlbGY6IFNsaWNlKTogQ2VsbCB7CiAgICByZXR1cm4gYmVnaW5DZWxsKCkKICAgICAg" +
- "ICAuc3RvcmVTbGljZShzZWxmKQogICAgICAgIC5lbmRDZWxsKCk7Cn0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4KLy8vIAov" +
- "Ly8gQ29udmVydHMgdGhlIGBCdWlsZGVyYCBpbnRvIGEgYENlbGxgIGFuZCByZXR1cm5zIGl0LgovLy8gQW4gYWxpYXMgdG8gYHNlbGYuZW5kQ2VsbCgpYC4KLy8vIAov" +
- "Ly8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogQ2VsbCA9IGIu" +
- "YXNDZWxsKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNidWlsZGVyYXNjZWxsCi8v" +
- "LyAKaW5saW5lIGV4dGVuZHMgZnVuIGFzQ2VsbChzZWxmOiBCdWlsZGVyKTogQ2VsbCB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCk7Cn0KCi8vLyBDcmVhdGVzIGFu" +
- "ZCByZXR1cm5zIGFuIGVtcHR5IGBDZWxsYCAod2l0aG91dCBkYXRhIGFuZCByZWZlcmVuY2VzKS4KLy8vIEFuIGFsaWFzIHRvIGBiZWdpbkNlbGwoKS5lbmRDZWxsKClg" +
- "LgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZml6ejogQ2VsbCA9IGVtcHR5Q2VsbCgpOwovLy8gICAgIGxldCBidXp6OiBD" +
- "ZWxsID0gYmVnaW5DZWxsKCkuZW5kQ2VsbCgpOwovLy8gICAgIAovLy8gICAgIGZpenogPT0gYnV6ejsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZTog" +
- "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMvI2VtcHR5Y2VsbAovLy8gCmFzbSBmdW4gZW1wdHlDZWxsKCk6IENlbGwgewogICAgPGIgYj4g" +
- "UFVTSFJFRiAvLyBQdXJlIEZpZnQ6ICI8YiIgY3JlYXRlcyBhIGJ1aWxkZXIsICJiPiIgdHVybnMgaXQgaW50byBhIGNlbGwgYXQgY29tcGlsZSB0aW1lCn0KCi8vLyBD" +
- "cmVhdGVzIGFuZCByZXR1cm5zIGFuIGVtcHR5IGBTbGljZWAgKHdpdGhvdXQgZGF0YSBhbmQgcmVmZXJlbmNlcykuCi8vLyBBbiBhbGlhcyB0byBgZW1wdHlDZWxsKCku" +
- "YXNTbGljZSgpYC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZpeno6IFNsaWNlID0gZW1wdHlTbGljZSgpOwovLy8gICAg" +
- "IGxldCBidXp6OiBTbGljZSA9IGVtcHR5Q2VsbCgpLmFzU2xpY2UoKTsKLy8vICAgICAKLy8vICAgICBmaXp6ID09IGJ1eno7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAov" +
- "Ly8gCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzLyNlbXB0eXNsaWNlCi8vLyAKYXNtIGZ1biBlbXB0eVNsaWNlKCk6IFNs" +
- "aWNlIHsKICAgIGJ7fSBQVVNIU0xJQ0UKfQoKLy8vIFN0cnVjdCBmb3IgaG9sZGluZyB2YWx1ZXMgY29tcHV0ZWQgYnkgdGhlIGBDZWxsLmNvbXB1dGVEYXRhU2l6ZSgp" +
- "YCBhbmQgYFNsaWNlLmNvbXB1dGVEYXRhU2l6ZSgpYCBleHRlbnNpb24gZnVuY3Rpb25zLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTZWU6Ci8v" +
- "LyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxjb21wdXRlZGF0YXNpemUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" +
- "cmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vjb21wdXRlZGF0YXNpemUKLy8vCnN0cnVjdCBEYXRhU2l6ZSB7CiAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQg" +
- "Y2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgY2VsbHM6IEludDsKCiAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIGluIGFsbCBuZXN0" +
- "ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgYml0czogSW50OwoKICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIHJlZnMgaW4gYWxsIG5l" +
- "c3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICByZWZzOiBJbnQ7Cn0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ2VsbGAg" +
- "dHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBkaXN0aW5jdCBjZWxscywgYml0" +
- "cyBhbmQgcmVmcyBpbiB0aGUgYENlbGxgIGJ5IHVzaW5nIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIChERlMpIGFsZ29yaXRobSwgcmVjdXJzaXZlbHkgdHJhdmVyc2luZyBl" +
- "YWNoIHJlZmVyZW5jZWQgY2VsbC4gVGhpcyBmdW5jdGlvbiBpcyBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlIGFuZCBjYW4gY29uc3VtZSBhIGxvdCBvZiBnYXMuIElm" +
- "IGBzZWxmYCBpcyBgbnVsbGAsIHJldHVybnMgYERhdGFTaXplYCB3aXRoIGFsbCBmaWVsZHMgc2V0IHRvIDAuCi8vLwovLy8gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBp" +
- "bnRvIGEgYERhdGFTaXplYCBTdHJ1Y3QgY29uc2lzdGluZyBvZjoKLy8vICogYGNlbGxzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5j" +
- "bHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYGJpdHM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRp" +
- "bmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgcmVmczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiByZWZzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0" +
- "aGUgc3RhcnRpbmcgb25lCi8vLwovLy8gSWYgdGhlIHNwZWNpZmllZCBgbWF4Q2VsbHNgIHZhbHVlIGlzbid0IGVub3VnaCB0byB0cmF2ZXJzZSBhbGwgY2VsbHMgaW5j" +
- "bHVkaW5nIHRoZSBzdGFydGluZyBvbmUsIGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4IGlzIHRocm93bjogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVt" +
- "cHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBgbWF4Q2VsbHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQg" +
- "b2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBjOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVJ" +
- "bnQoNDIsIDcpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5lbmRDZWxsKCk7Ci8vLyAgICAgdHJ5IHsKLy8vICAgICAgICAgbGV0IGRhdGFTaXplOiBEYXRhU2l6ZSA9IGMu" +
- "Y29tcHV0ZURhdGFTaXplKDIpOwovLy8gICAgICAgICBkYXRhU2l6ZS5jZWxsczsgLy8gMgovLy8gICAgICAgICBkYXRhU2l6ZS5iaXRzOyAgLy8gNwovLy8gICAgICAg" +
- "ICBkYXRhU2l6ZS5yZWZzOyAgLy8gMQovLy8gICAgIH0gY2F0Y2ggKGV4aXRDb2RlKSB7Ci8vLyAgICAgICAgIC8vIGlmIG1heENlbGxzIHdhcyBpbnN1ZmZpY2llbnQg" +
- "dG8gdHJhdmVyc2UgdGhlIGNlbGwKLy8vICAgICAgICAgLy8gYW5kIGFsbCBvZiBpdHMgcmVmZXJlbmNlcywgdGhlIGV4aXRDb2RlIGhlcmUgd291bGQgYmUgOAovLy8g" +
- "ICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjY2VsbGNvbXB1dGVkYXRhc2l6ZQov" +
- "Ly8KYXNtIGV4dGVuZHMgZnVuIGNvbXB1dGVEYXRhU2l6ZShzZWxmOiBDZWxsPywgbWF4Q2VsbHM6IEludCk6IERhdGFTaXplIHsgQ0RBVEFTSVpFIH0KCi8vLyBFeHRl" +
- "bnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNpbWlsYXIgdG8gYENlbGwuY29tcHV0" +
- "ZURhdGFTaXplKClgLCBidXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgY2VsbCB0aGF0IGNvbnRhaW5zIHRoZSBgU2xpY2VgIGl0c2VsZi4gSG93ZXZlciwg" +
- "YWNjb3VudHMgZm9yIGl0cyBiaXRzIGFuZCByZWZzLgovLy8KLy8vIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIGBEYXRhU2l6ZWAgU3RydWN0IGNvbnNpc3Rp" +
- "bmcgb2Y6Ci8vLyAqIGBjZWxsczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLyAqIGBi" +
- "aXRzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYHJlZnM6" +
- "IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVmcyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8KLy8vIElmIHRoZSBz" +
- "cGVjaWZpZWQgYG1heENlbGxzYCB2YWx1ZSBpc24ndCBlbm91Z2ggdG8gdHJhdmVyc2UgYWxsIGNlbGxzICoqbm90KiogaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUs" +
- "IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4IGlzIHRocm93bjogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2" +
- "ZSB2YWx1ZSBvZiBgbWF4Q2VsbHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8K" +
- "Ly8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5zdG9yZVJlZihlbXB0" +
- "eUNlbGwoKSkuYXNTbGljZSgpOwovLy8gICAgIHRyeSB7Ci8vLyAgICAgICAgIGxldCBkYXRhU2l6ZTogRGF0YVNpemUgPSBzLmNvbXB1dGVEYXRhU2l6ZSgxKTsKLy8v" +
- "ICAgICAgICAgZGF0YVNpemUuY2VsbHM7IC8vIDEKLy8vICAgICAgICAgZGF0YVNpemUuYml0czsgIC8vIDcKLy8vICAgICAgICAgZGF0YVNpemUucmVmczsgIC8vIDEK" +
- "Ly8vICAgICB9IGNhdGNoIChleGl0Q29kZSkgewovLy8gICAgICAgICAvLyBpZiBtYXhDZWxscyB3YXMgaW5zdWZmaWNpZW50IHRvIHRyYXZlcnNlIHRoZSBjZWxsCi8v" +
- "LyAgICAgICAgIC8vIGFuZCBhbGwgb2YgaXRzIHJlZmVyZW5jZXMsIHRoZSBleGl0Q29kZSBoZXJlIHdvdWxkIGJlIDgKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8v" +
- "Ci8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlY29tcHV0ZWRhdGFzaXplCi8vLwphc20gZXh0ZW5kcyBmdW4gY29t" +
- "cHV0ZURhdGFTaXplKHNlbGY6IFNsaWNlLCBtYXhDZWxsczogSW50KTogRGF0YVNpemUgeyBTREFUQVNJWkUgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhl" +
- "IGBDZWxsYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgYEludGAgZGVwdGggb2YgdGhlIGBD" +
- "ZWxsYC4gUHJvZHVjZXMgMCBpZiB0aGUgYENlbGxgIGhhcyBubyByZWZlcmVuY2VzLCBvdGhlcndpc2UgMSBwbHVzIHRoZSBtYXhpbXVtIG9mIHRoZSBkZXB0aHMgb2Yg" +
- "dGhlIHJlZmVyZW5jZWQgY2VsbHMuIElmIGMgaXMgbnVsbCwgcmV0dXJucyB6ZXJvLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxl" +
- "dCBjOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmVuZENlbGwoKTsKLy8vICAgICBsZXQgZGVwdGg6IEludCA9IGMuZGVwdGgoKTsgLy8gMAovLy8g" +
- "fQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNjZWxsZGVwdGgKLy8vCmFzbSBleHRlbmRzIGZ1biBk" +
- "ZXB0aChzZWxmOiBDZWxsPyk6IEludCB7IENERVBUSCB9Cg==";
+ "YHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzID0gbXNnLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgb3V0QWN0aW9ucyA9IHMubG9hZE1heWJlUmVm" +
+ "KCk7Ci8vLwovLy8gICAgIGlmIChvdXRBY3Rpb25zICE9IG51bGwpIHsKLy8vICAgICAgICAgbGV0IGFjdGlvbnMgPSBvdXRBY3Rpb25zISE7Ci8vLyAgICAgICAgIC8v" +
+ "IC4uLnByb2Nlc3MgYWN0aW9ucy4uLgovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" +
+ "L2NvcmUtY2VsbHMjc2xpY2Vsb2FkbWF5YmVyZWYKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzCi8vLwphc20oLT4gMSAwKSBl" +
+ "eHRlbmRzIG11dGF0ZXMgZnVuIGxvYWRNYXliZVJlZihzZWxmOiBTbGljZSk6IENlbGw/IHsgTERPUFRSRUYgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlv" +
+ "biBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwovLy8gU2tpcHMgYENlbGw/YCBmcm9tIHRoZSBgU2xpY2VgLiBTaW1p" +
+ "bGFyIHRvIGRpc2NhcmRpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgU2xpY2UubG9hZE1heWJlUmVmKClgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgc3VjaCByZWZl" +
+ "cmVuY2UgYENlbGxgIHdoZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93" +
+ "YC4KLy8vCi8vLyBBdHRlbXB0cyB0byBza2lwIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6" +
+ "IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHMxOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAg" +
+ "ICAgICAgIC5zdG9yZU1heWJlUmVmKGVtcHR5Q2VsbCgpKQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCAzMikKLy8vICAgICAgICAgLmFzU2xpY2UoKTsKLy8vCi8v" +
+ "LyAgICAgczEuc2tpcE1heWJlUmVmKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMxLmxvYWRVaW50KDMyKTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNl" +
+ "ZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkbWF5YmVyZWYKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFu" +
+ "Zy5vcmcvYm9vay9leGl0LWNvZGVzCi8vLwphc20gZXh0ZW5kcyBtdXRhdGVzIGZ1biBza2lwTWF5YmVSZWYoc2VsZjogU2xpY2UpIHsgTERPUFRSRUYgTklQIH0KCi8v" +
+ "LyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFByZWxvYWRzIGEgc2luZ2xl" +
+ "IGJpdCBmcm9tIHRoZSBgU2xpY2VgOiBpZiBpdCdzIDEsIHRoZW4gdGhlIHJlZmVyZW5jZWQgYENlbGxgIGlzIHByZWxvYWRlZCBhbmQgcmV0dXJuZWQuIElmIHRoZSBw" +
+ "cmVsb2FkZWQgYml0IGlzIDAsIHRoZW4gYG51bGxgIGlzIHJldHVybmVkLiBEb2Vzbid0IG1vZGlmeSB0aGUgb3JpZ2luYWwgYFNsaWNlYC4KLy8vCi8vLyBBdHRlbXB0" +
+ "cyB0byBwcmVsb2FkIHN1Y2ggcmVmZXJlbmNlIGBDZWxsYCB3aGVuIGBTbGljZWAgZG9lc24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQg" +
+ "Y29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJlbG9hZCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4" +
+ "Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlcygpIHsKLy8vICAgICBsZXQgczE6" +
+ "IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVNYXliZVJlZihlbXB0eUNlbGwoKSkuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBDZWxsID0gczEucHJlbG9hZE1h" +
+ "eWJlUmVmKCk7IC8vIHJldHVybnMgZW1wdHlDZWxsKCkgYW5kIGRvZXNuJ3QgbW9kaWZ5IHMxCi8vLwovLy8gICAgIGxldCBzMjogU2xpY2UgPSBiZWdpbkNlbGwoKQov" +
+ "Ly8gICAgICAgICAuc3RvcmVNYXliZVJlZihudWxsKQovLy8gICAgICAgICAuc3RvcmVNYXliZVJlZihzMS5hc0NlbGwoKSkKLy8vICAgICAgICAgLmFzU2xpY2UoKTsK" +
+ "Ly8vCi8vLyAgICAgbGV0IHJlZjE6IENlbGwgPSBzMi5wcmVsb2FkTWF5YmVSZWYoKTsgLy8gcmV0dXJucyBudWxsIGFuZCBkb2Vzbid0IG1vZGlmeSBzMgovLy8gICAg" +
+ "IGxldCByZWYyOiBDZWxsID0gczIucHJlbG9hZE1heWJlUmVmKCk7IC8vIHNhbWUgZWZmZWN0Ci8vLyAgICAgcmVmMSA9PSBudWxsOyAvLyB0cnVlCi8vLyAgICAgcmVm" +
+ "MSA9PSByZWYyOyAvLyB0cnVlCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3Ns" +
+ "aWNlcHJlbG9hZG1heWJlcmVmCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcwovLy8KYXNtIGV4dGVuZHMgZnVuIHByZWxvYWRN" +
+ "YXliZVJlZihzZWxmOiBTbGljZSk6IENlbGw/IHsgUExET1BUUkVGIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUu" +
+ "Ci8vLwovLy8gTG9hZHMgMCDiiaQgYGxgIOKJpCAxMDIzIGJpdHMgZnJvbSB0aGUgYFNsaWNlYCBhbmQgcmV0dXJucyB0aGVtIGFzIGEgc2VwYXJhdGUgYFNsaWNlYC4K" +
+ "Ly8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IGFuIG91dC1vZi1ib3VuZHMgYGxgIHZhbHVlIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDVd" +
+ "OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxvYWQgbW9yZSBkYXRhIHRoYW4gdGhlIGBTbGljZWAgY29udGFpbnMg" +
+ "dGhyb3cgYW4gZXhjZXB0aW9uIHdpdGgKLy8vIFtleGl0IGNvZGUgOV06IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7" +
+ "Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBzLmxvYWRC" +
+ "aXRzKDcpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRiaXRz" +
+ "Ci8vLwovLy8gW2V4aXQgY29kZSA1XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzUKLy8vIFtleGl0IGNvZGUgOV06IGh0dHBzOi8v" +
+ "ZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM5Ci8vLwpAbmFtZShsb2FkX2JpdHMpIC8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMgY29tcGlsZXIs" +
+ "IHNvIG5vdCByZXBsYWNlZCB3aXRoIGFzbSAiTERTTElDRVgiCmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgbG9hZEJpdHMoc2VsZjogU2xpY2UsIGw6IEludCk6IFNsaWNl" +
+ "OwoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8vCi8vLyBQcmVsb2FkcyAwIOKJpCBgbGAg4omkIDEwMjMgYml0cyBmcm9tIHRo" +
+ "ZSBgU2xpY2VgIGFuZCByZXR1cm5zIHRoZW0gYXMgYSBzZXBhcmF0ZSBgU2xpY2VgLgovLy8gRG9lc24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsIGBTbGljZWAuCi8vLwov" +
+ "Ly8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBvdXQtb2YtYm91bmRzIGBsYCB2YWx1ZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aAovLy8gW2V4aXQgY29kZSA1XTogYElu" +
+ "dGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBwcmVsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRo" +
+ "cm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewov" +
+ "Ly8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IFNsaWNlID0gcy5wcmVsb2Fk" +
+ "Qml0cyg3KTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VwcmVsb2Fk" +
+ "Yml0cwovLy8KLy8vIFtleGl0IGNvZGUgNV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM1Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRw" +
+ "czovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8KQG5hbWUocHJlbG9hZF9iaXRzKSAvLyBzcGVjaWFsIHRyZWF0bWVudCBpbiBGdW5jIGNv" +
+ "bXBpbGVyLCBzbyBub3QgcmVwbGFjZWQgd2l0aCBhc20gIlBMRFNMSUNFWCIKZXh0ZW5kcyBuYXRpdmUgcHJlbG9hZEJpdHMoc2VsZjogU2xpY2UsIGw6IEludCk6IFNs" +
+ "aWNlOwoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8vCi8vLyBMb2FkcyBhbmQgcmV0dXJucyBhIHNpZ25lZCBg" +
+ "bGAtYml0IGBJbnRgIGZyb20gdGhlIGBTbGljZWAsIGZvciAwIOKJpCBsIOKJpCAyNTcuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBvdXQtb2YtYm91bmRz" +
+ "IGBsYCB2YWx1ZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aAovLy8gW2V4aXQgY29kZSA1XTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBB" +
+ "dHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDldOiBg" +
+ "Q2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50" +
+ "KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZEludCg3KTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6" +
+ "Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkaW50Ci8vLwovLy8gW2V4aXQgY29kZSA1XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" +
+ "cmcvYm9vay9leGl0LWNvZGVzIzUKLy8vIFtleGl0IGNvZGUgOV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM5Ci8vLwpAbmFtZShs" +
+ "b2FkX2ludCkgLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJMRElYIgpleHRlbmRzIG11dGF0ZXMg" +
+ "bmF0aXZlIGxvYWRJbnQoc2VsZjogU2xpY2UsIGw6IEludCk6IEludDsKCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuCi8vLwovLy8g" +
+ "UHJlbG9hZHMgYW5kIHJldHVybnMgYSBzaWduZWQgYGxgLWJpdCBgSW50YCBmcm9tIHRoZSBgU2xpY2VgLCBmb3IgMCDiiaQgbCDiiaQgMjU3LgovLy8gRG9lc24ndCBt" +
+ "b2RpZnkgdGhlIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBvdXQtb2YtYm91bmRzIGBsYCB2YWx1ZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0" +
+ "aAovLy8gW2V4aXQgY29kZSA1XTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBwcmVsb2FkIG1vcmUgZGF0YSB0aGFu" +
+ "IHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRh" +
+ "Y3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0" +
+ "IGZpeno6IEludCA9IHMucHJlbG9hZEludCg3KTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
+ "cmUtY2VsbHMjc2xpY2VwcmVsb2FkaW50Ci8vLwovLy8gW2V4aXQgY29kZSA1XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzUKLy8v" +
+ "IFtleGl0IGNvZGUgOV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM5Ci8vLwpAbmFtZShwcmVsb2FkX2ludCkgLy8gc3BlY2lhbCB0" +
+ "cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJQTERJWCIKZXh0ZW5kcyBuYXRpdmUgcHJlbG9hZEludChzZWxmOiBTbGlj" +
+ "ZSwgbDogSW50KTogSW50OwoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8vCi8vLyBMb2FkcyBhbmQgcmV0dXJu" +
+ "cyBhbiB1bnNpZ25lZCBgbGAtYml0IGBJbnRgIGZyb20gdGhlIGBTbGljZWAsIGZvciAwIOKJpCBsIOKJpCAyNTYuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBh" +
+ "biBvdXQtb2YtYm91bmRzIGBsYCB2YWx1ZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aAovLy8gW2V4aXQgY29kZSA1XTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJh" +
+ "bmdlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBb" +
+ "ZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2lu" +
+ "Q2VsbCgpLnN0b3JlVWludCg0MiwgNykuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRVaW50KDcpOwovLy8gfQovLy8gYGBgCi8vLwovLy8g" +
+ "U2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR1aW50Ci8vLwovLy8gW2V4aXQgY29kZSA1XTogaHR0cHM6" +
+ "Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzUKLy8vIFtleGl0IGNvZGUgOV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1j" +
+ "b2RlcyM5Ci8vLwpAbmFtZShsb2FkX3VpbnQpIC8vIHNwZWNpYWwgdHJlYXRtZW50IGluIEZ1bmMgY29tcGlsZXIsIHNvIG5vdCByZXBsYWNlZCB3aXRoIGFzbSAiTERV" +
+ "WCIKZXh0ZW5kcyBtdXRhdGVzIG5hdGl2ZSBsb2FkVWludChzZWxmOiBTbGljZSwgbDogSW50KTogSW50OwoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBT" +
+ "bGljZWAgdHlwZS4KLy8vCi8vLyBQcmVsb2FkcyBhbmQgcmV0dXJucyBhbiB1bnNpZ25lZCBgbGAtYml0IGBJbnRgIGZyb20gdGhlIGBTbGljZWAsIGZvciAwIOKJpCBs" +
+ "IOKJpCAyNTYuCi8vLyBEb2Vzbid0IG1vZGlmeSB0aGUgYFNsaWNlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IGFuIG91dC1vZi1ib3VuZHMgYGxgIHZhbHVl" +
+ "IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDVdOiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIEF0dGVtcHRzIHRv" +
+ "IHByZWxvYWQgbW9yZSBkYXRhIHRoYW4gdGhlIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGgKLy8vIFtleGl0IGNvZGUgOV06IGBDZWxsIHVu" +
+ "ZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVVaW50KDQyLCA3" +
+ "KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMucHJlbG9hZFVpbnQoNyk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8v" +
+ "ZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlcHJlbG9hZHVpbnQKLy8vCi8vLyBbZXhpdCBjb2RlIDVdOiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
+ "Lm9yZy9ib29rL2V4aXQtY29kZXMjNQovLy8gW2V4aXQgY29kZSA5XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzkKLy8vCkBuYW1l" +
+ "KHByZWxvYWRfdWludCkgLy8gc3BlY2lhbCB0cmVhdG1lbnQgaW4gRnVuYyBjb21waWxlciwgc28gbm90IHJlcGxhY2VkIHdpdGggYXNtICJQTERVWCIKZXh0ZW5kcyBu" +
+ "YXRpdmUgcHJlbG9hZFVpbnQoc2VsZjogU2xpY2UsIGw6IEludCk6IEludDsKCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5" +
+ "cGUuCi8vLwovLy8gTG9hZHMgYSBzaW5nbGUgYml0IGFuZCByZXR1cm5zIGEgYEJvb2xgIHZhbHVlIGZyb20gdGhlIGBTbGljZWAuCi8vLyBSZWFkcyBgdHJ1ZWAgaWYg" +
+ "dGhlIGxvYWRlZCBiaXQgaXMgZXF1YWwgdG8gMSwgYW5kIHJlYWRzIGBmYWxzZWAgb3RoZXJ3aXNlLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxvYWQgc3VjaCBgQm9vbGAg" +
+ "d2hlbiB0aGUgYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGgKLy8vIFtleGl0IGNvZGUgOF06IGBDZWxsIG92ZXJmbG93YC4K" +
+ "Ly8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBj" +
+ "b2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgp" +
+ "LnN0b3JlQm9vbCh0cnVlKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJvb2wgPSBzLmxvYWRCb29sKCk7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8v" +
+ "IFtleGl0IGNvZGUgOF06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM4Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFj" +
+ "dC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8KYXNtKC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBsb2FkQm9vbChzZWxmOiBTbGljZSk6IEJvb2wgeyAx" +
+ "IExESSB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMi4KLy8vCi8v" +
+ "LyBTa2lwcyBhIHNpbmdsZSBiaXQgZnJvbSB0aGUgYFNsaWNlYC4gU2ltaWxhciB0byBkaXNjYXJkaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYFNsaWNlLmxvYWRCb29s" +
+ "KClgLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxvYWQgc3VjaCBgQm9vbGAgd2hlbiB0aGUgYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9u" +
+ "IHdpdGgKLy8vIFtleGl0IGNvZGUgOF06IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNv" +
+ "bnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFt" +
+ "cGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAgICAgIC5zdG9yZUJvb2wodHJ1ZSkKLy8vICAgICAgICAgLnN0b3JlVWludCg0" +
+ "MiwgNykKLy8vICAgICAgICAgLmFzU2xpY2UoKTsKLy8vCi8vLyAgICAgcy5za2lwQm9vbCgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRVaW50KDcpOyAv" +
+ "LyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gW2V4aXQgY29kZSA4XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzgKLy8vIFtleGl0" +
+ "IGNvZGUgOV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM5Ci8vLwphc20gZXh0ZW5kcyBtdXRhdGVzIGZ1biBza2lwQm9vbChzZWxm" +
+ "OiBTbGljZSkgeyAxIExESSBOSVAgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRh" +
+ "Y3QgMS41LjAuCi8vLwovLy8gQWxpYXMgdG8gYFNsaWNlLmxvYWRCb29sKClgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBz" +
+ "OiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlQm9vbCh0cnVlKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEJvb2wgPSBzLmxvYWRCaXQoKTsgLy8gdHJ1ZQov" +
+ "Ly8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRiaXQKLy8vCmFzbSgtPiAxIDAp" +
+ "IGV4dGVuZHMgbXV0YXRlcyBmdW4gbG9hZEJpdChzZWxmOiBTbGljZSk6IEJvb2wgeyAxIExESSB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0" +
+ "aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIExvYWRzIGFuZCByZXR1cm5zIGEgc2VyaWFsaXplZCB1bnNpZ25lZCBgSW50YCB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAw" +
+ "IHRvIDJeMTIwIC0gMSBpbmNsdXNpdmUgZnJvbSB0aGUgYFNsaWNlYC4gVGhpcyB2YWx1ZSB1c3VhbGx5IHJlcHJlc2VudHMgdGhlIGFtb3VudCBpbiBuYW5vVG9uY29p" +
+ "bnMuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNoIGBJbnRgIHdoZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGgg" +
+ "ZXhpdCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4g" +
+ "ZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6" +
+ "IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVDb2lucyg0MikuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRDb2lucygpOyAvLyA0MgovLy8g" +
+ "fQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWRjb2lucwovLy8KYXNtKCAtPiAxIDAp" +
+ "IGV4dGVuZHMgbXV0YXRlcyBmdW4gbG9hZENvaW5zKHNlbGY6IFNsaWNlKTogSW50IHsgTERWQVJVSU5UMTYgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlv" +
+ "biBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwovLy8gU2tpcHMgYSBzZXJpYWxpemVkIHVuc2lnbmVkIGBJbnRgIHZh" +
+ "bHVlIGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMl4xMjAgLSAxIGluY2x1c2l2ZSBmcm9tIHRoZSBgU2xpY2VgLiBTaW1pbGFyIHRvIGRpc2NhcmRpbmcgdGhlIHJldHVy" +
+ "biB2YWx1ZSBvZiBgU2xpY2UubG9hZENvaW5zKClgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgc3VjaCBgSW50YCB3aGVuIGBTbGljZWAgZG9lc24ndCBjb250YWlu" +
+ "IGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc2tpcCBtb3JlIGRhdGEgdGhh" +
+ "biBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1" +
+ "biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAgICAgIC5zdG9yZUNvaW5zKDIzOSkKLy8vICAgICAgICAgLnN0b3Jl" +
+ "VWludCg0MiwgNykKLy8vICAgICAgICAgLmFzU2xpY2UoKTsKLy8vCi8vLyAgICAgcy5za2lwQ29pbnMoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5sb2FkVWlu" +
+ "dCg3KTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkY29pbnMK" +
+ "Ly8vCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVuIHNraXBDb2lucyhzZWxmOiBTbGljZSkgeyBMRFZBUlVJTlQxNiBOSVAgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBm" +
+ "dW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQWxpYXMgdG8gYFNsaWNlLmxvYWRDb2lucygpYC4K" +
+ "Ly8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZVZhclVpbnQxNig0MikuYXNTbGlj" +
+ "ZSgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRWYXJVaW50MTYoKTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9k" +
+ "b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkdmFydWludDE2Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNl" +
+ "bGxzI3NsaWNlbG9hZGNvaW5zCi8vLwphc20oIC0+IDEgMCkgZXh0ZW5kcyBtdXRhdGVzIGZ1biBsb2FkVmFyVWludDE2KHNlbGY6IFNsaWNlKTogSW50IHsgTERWQVJV" +
+ "SU5UMTYgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwov" +
+ "Ly8gQWxpYXMgdG8gYFNsaWNlLnNraXBDb2lucygpYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdp" +
+ "bkNlbGwoKQovLy8gICAgICAgICAuc3RvcmVWYXJVaW50MTYoMjM5KQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCA3KQovLy8gICAgICAgICAuYXNTbGljZSgpOwov" +
+ "Ly8KLy8vICAgICBzLnNraXBWYXJVaW50MTYoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5sb2FkVWludCg3KTsgLy8gNDIKLy8vIH0KLy8vIGBgYAovLy8KLy8v" +
+ "IFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkdmFydWludDE2Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0" +
+ "LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbG9hZGNvaW5zCi8vLwphc20gZXh0ZW5kcyBtdXRhdGVzIGZ1biBza2lwVmFyVWludDE2KHNlbGY6IFNsaWNlKXsg" +
+ "TERWQVJVSU5UMTYgTklQIH0KCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEu" +
+ "Ni4wLgovLy8KLy8vIFNpbWlsYXIgdG8gYFNsaWNlLmxvYWRDb2lucygpYCwgYnV0IHdpdGggYSBkaWZmZXJlbnQgYHZhbHVlYCByYW5nZTogZnJvbSAtMl4xMTkgdG8g" +
+ "Ml4xMTkgLSAxIGluY2x1c2l2ZS4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIHN1Y2ggYEludGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBh" +
+ "biBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIGxvYWQgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBj" +
+ "b250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgp" +
+ "IHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZVZhckludDE2KC00MikuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxv" +
+ "YWRWYXJJbnQxNigpOyAvLyAtNDIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vs" +
+ "b2FkdmFyaW50MTYKLy8vCmFzbSggLT4gMSAwKSBleHRlbmRzIG11dGF0ZXMgZnVuIGxvYWRWYXJJbnQxNihzZWxmOiBTbGljZSk6IEludCB7IExEVkFSSU5UMTYgfQoK" +
+ "Ly8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwovLy8gU2ltaWxh" +
+ "ciB0byBgU2xpY2Uuc2tpcENvaW5zKClgLCBidXQgd2l0aCBhIGRpZmZlcmVudCBgdmFsdWVgIHJhbmdlOiBmcm9tIC0yXjExOSB0byAyXjExOSAtIDEgaW5jbHVzaXZl" +
+ "LgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgc3VjaCBgSW50YCB3aGVuIGBTbGljZWAgZG9lc24ndCBjb250YWluIGl0IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4" +
+ "aXQgY29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc2tpcCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4" +
+ "Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBT" +
+ "bGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAgICAgIC5zdG9yZVZhckludDE2KC0yMzkpCi8vLyAgICAgICAgIC5zdG9yZVVpbnQoNDIsIDcpCi8vLyAgICAgICAgIC5h" +
+ "c1NsaWNlKCk7Ci8vLwovLy8gICAgIHMuc2tpcFZhckludDE2KCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFVpbnQoNyk7IC8vIDQyCi8vLyB9Ci8vLyBg" +
+ "YGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlbG9hZHZhcmludDE2Ci8vLwphc20gZXh0ZW5kcyBtdXRh" +
+ "dGVzIGZ1biBza2lwVmFySW50MTYoc2VsZjogU2xpY2UpIHsgTERWQVJJTlQxNiBOSVAgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBT" +
+ "bGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gTG9hZHMgYW5kIHJldHVybnMgYSBzZXJpYWxpemVkIHVuc2lnbmVkIGBJbnRgIHZh" +
+ "bHVlIGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMl4yNDgg4oiSIDEgaW5jbHVzaXZlIGZyb20gdGhlIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNo" +
+ "IGBJbnRgIHdoZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDg6IGBDZWxsIG92ZXJmbG93YC4KLy8v" +
+ "Ci8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6IGBDZWxs" +
+ "IHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVWYXJVaW50" +
+ "MzIoNDIwMDAwKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFZhclVpbnQzMigpOyAvLyA0MjAwMDAKLy8vIH0KLy8vIGBgYAovLy8KLy8v" +
+ "IFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkdmFydWludDMyCi8vLwphc20oIC0+IDEgMCkgZXh0ZW5kcyBtdXRh" +
+ "dGVzIGZ1biBsb2FkVmFyVWludDMyKHNlbGY6IFNsaWNlKTogSW50IHsgTERWQVJVSU5UMzIgfQoKLy8vIEV4dGVuc2lvbiBtdXRhdGlvbiBmdW5jdGlvbiBmb3IgdGhl" +
+ "IGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwovLy8gU2tpcHMgYSBzZXJpYWxpemVkIHVuc2lnbmVkIGBJbnRgIHZhbHVlIGluIHRo" +
+ "ZSByYW5nZSBmcm9tIDAgdG8gMl4yNDgg4oiSIDEgaW5jbHVzaXZlIGZyb20gdGhlIGBTbGljZWAuIFNpbWlsYXIgdG8gZGlzY2FyZGluZyB0aGUgcmV0dXJuIHZhbHVl" +
+ "IG9mIGBTbGljZS5sb2FkVmFyVWludDMyKClgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgc3VjaCBgSW50YCB3aGVuIGBTbGljZWAgZG9lc24ndCBjb250YWluIGl0" +
+ "IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4OiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc2tpcCBtb3JlIGRhdGEgdGhhbiBg" +
+ "U2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBl" +
+ "eGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpCi8vLyAgICAgICAgIC5zdG9yZVZhclVpbnQzMigyMzkpCi8vLyAgICAgICAgIC5zdG9y" +
+ "ZVVpbnQoNDIsIDcpCi8vLyAgICAgICAgIC5hc1NsaWNlKCk7Ci8vLwovLy8gICAgIHMuc2tpcFZhclVpbnQzMigpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxv" +
+ "YWRVaW50KDcpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR2" +
+ "YXJ1aW50MzIKLy8vCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVuIHNraXBWYXJVaW50MzIoc2VsZjogU2xpY2UpIHsgTERWQVJVSU5UMzIgTklQIH0KCi8vLyBFeHRlbnNp" +
+ "b24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNpbWlsYXIgdG8gYFNsaWNl" +
+ "LmxvYWRWYXJVaW50MzIoKWAsIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGB2YWx1ZWAgcmFuZ2U6IGZyb20gLTJeMjQ3IHRvIDJeMjQ3IC0gMSBpbmNsdXNpdmUuCi8vLwov" +
+ "Ly8gQXR0ZW1wdHMgdG8gbG9hZCBzdWNoIGBJbnRgIHdoZW4gYFNsaWNlYCBkb2Vzbid0IGNvbnRhaW4gaXQgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2Rl" +
+ "IDg6IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9u" +
+ "IHdpdGggZXhpdCBjb2RlIDk6IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0g" +
+ "YmVnaW5DZWxsKCkuc3RvcmVWYXJJbnQzMigtNDIwMDAwKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMubG9hZFZhckludDMyKCk7IC8vIC00MjAw" +
+ "MDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vsb2FkdmFyaW50MzIKLy8vCmFz" +
+ "bSggLT4gMSAwKSBleHRlbmRzIG11dGF0ZXMgZnVuIGxvYWRWYXJJbnQzMihzZWxmOiBTbGljZSk6IEludCB7IExEVkFSSU5UMzIgfQoKLy8vIEV4dGVuc2lvbiBtdXRh" +
+ "dGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjIuCi8vLwovLy8gU2ltaWxhciB0byBgU2xpY2Uuc2tpcFZh" +
+ "clVpbnQzMigpYCwgYnV0IHdpdGggYSBkaWZmZXJlbnQgYHZhbHVlYCByYW5nZTogZnJvbSAtMl4yNDcgdG8gMl4yNDcgLSAxIGluY2x1c2l2ZS4KLy8vCi8vLyBBdHRl" +
+ "bXB0cyB0byBza2lwIHN1Y2ggYEludGAgd2hlbiBgU2xpY2VgIGRvZXNuJ3QgY29udGFpbiBpdCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgODogYENl" +
+ "bGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNraXAgbW9yZSBkYXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBl" +
+ "eGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNl" +
+ "bGwoKQovLy8gICAgICAgICAuc3RvcmVWYXJJbnQzMigtMjM5KQovLy8gICAgICAgICAuc3RvcmVVaW50KDQyLCA3KQovLy8gICAgICAgICAuYXNTbGljZSgpOwovLy8K" +
+ "Ly8vICAgICBzLnNraXBWYXJJbnQzMigpOwovLy8gICAgIGxldCBmaXp6OiBJbnQgPSBzLmxvYWRVaW50KDcpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2Vl" +
+ "OiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWxvYWR2YXJ1aW50MzIKLy8vCmFzbSBleHRlbmRzIG11dGF0ZXMgZnVuIHNraXBW" +
+ "YXJJbnQzMihzZWxmOiBTbGljZSkgeyBMRFZBUklOVDMyIE5JUCB9CgovLy8gRXh0ZW5zaW9uIG11dGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgov" +
+ "Ly8KLy8vIExvYWRzIGFsbCBidXQgdGhlIGZpcnN0IDAg4omkIGBsYCDiiaQgMTAyMyBiaXRzIGZyb20gdGhlIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3Bl" +
+ "Y2lmeSBhbiBvdXQtb2YtYm91bmRzIGBsYCB2YWx1ZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aAovLy8gW2V4aXQgY29kZSA1XTogYEludGVnZXIgb3V0IG9mIGV4cGVj" +
+ "dGVkIHJhbmdlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBsb2FkIG1vcmUgZGF0YSB0aGFuIHRoZSBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRo" +
+ "Ci8vLyBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9" +
+ "IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgcy5za2lwQml0cyg1KTsgICAgICAgICAgICAgICAgICAgLy8gYWxsIGJ1dCBmaXJz" +
+ "dCA1IGJpdHMKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBzLmxvYWRCaXRzKDEpOyAvLyBsb2FkIG9ubHkgMSBiaXQKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTog" +
+ "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vza2lwYml0cwovLy8KLy8vIFtleGl0IGNvZGUgNV06IGh0dHBzOi8vZG9jcy50YWN0" +
+ "LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM1Ci8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjOQovLy8K" +
+ "YXNtIGV4dGVuZHMgbXV0YXRlcyBmdW4gc2tpcEJpdHMoc2VsZjogU2xpY2UsIGw6IEludCkgeyBTRFNLSVBGSVJTVCB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZv" +
+ "ciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIENoZWNrcyB3aGV0aGVyIHRoZSBgU2xpY2VgIGlzIGVtcHR5IChpLmUuLCBjb250YWlucyBubyBiaXRzIG9mIGRhdGEg" +
+ "YW5kIG5vIGNlbGwgcmVmZXJlbmNlcykuCi8vLyBJZiBpdCBpcyBub3QsIGl0IHRocm93cyBhbiBleGNlcHRpb24gd2l0aCBbZXhpdCBjb2RlIDldOiBgQ2VsbCB1bmRl" +
+ "cmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBlbXB0eU9uZTogU2xpY2UgPSBlbXB0eVNsaWNlKCk7Ci8vLyAgICAg" +
+ "ZW1wdHlPbmUuZW5kUGFyc2UoKTsgLy8gbm90aGluZywgYXMgaXQncyBlbXB0eQovLy8KLy8vICAgICBsZXQgcGF1bDogU2xpY2UgPSAiRmVhciBpcyB0aGUgbWluZC1r" +
+ "aWxsZXIiLmFzU2xpY2UoKTsKLy8vICAgICB0cnkgewovLy8gICAgICAgICBwYXVsLmVuZFBhcnNlKCk7IC8vIHRocm93cyBleGl0IGNvZGUgOQovLy8gICAgIH0KLy8v" +
+ "IH0KLy8vIGBgYAovLy8KLy8vIFtleGl0IGNvZGUgOV06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyM5Ci8vLwphc20gZXh0ZW5kcyBm" +
+ "dW4gZW5kUGFyc2Uoc2VsZjogU2xpY2UpIHsgRU5EUyB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLiBBdmFpbGFibGUgc2luY2Ug" +
+ "VGFjdCAxLjYuMC4KLy8vCi8vLyBQcmVsb2FkcyBhbGwgYnV0IHRoZSBsYXN0IDAg4omkIGBsZW5gIOKJpCAxMDIzIGJpdHMgZnJvbSB0aGUgYFNsaWNlYC4KLy8vCi8v" +
+ "LyBBdHRlbXB0cyB0byBzcGVjaWZ5IGFuIG91dC1vZi1ib3VuZHMgYGxlbmAgdmFsdWUgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2Vy" +
+ "IG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcHJlbG9hZCBtb3JlIGRhdGEgdGhhbiBgU2xpY2VgIGNvbnRhaW5zIHRocm93IGFuIGV4" +
+ "Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBT" +
+ "bGljZSA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGFsbEJ1dExhc3RGaXZlOiBTbGljZSA9IHMuc2tpcExhc3RCaXRz" +
+ "KDUpOyAvLyBhbGwgYnV0IGxhc3QgNSBiaXRzLAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaS5lLiBvbmx5" +
+ "IGZpcnN0IDIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vza2lwbGFzdGJpdHMK" +
+ "Ly8vCmFzbSBleHRlbmRzIGZ1biBza2lwTGFzdEJpdHMoc2VsZjogU2xpY2UsIGxlbjogSW50KTogU2xpY2UgeyBTRFNLSVBMQVNUIH0KCi8vLyBFeHRlbnNpb24gZnVu" +
+ "Y3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFByZWxvYWRzIHRoZSBmaXJzdCAwIOKJpCBgbGVuYCDi" +
+ "iaQgMTAyMyBiaXRzIGZyb20gdGhlIGBTbGljZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBvdXQtb2YtYm91bmRzIGBsZW5gIHZhbHVlIHRocm93IGFu" +
+ "IGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHByZWxvYWQgbW9yZSBk" +
+ "YXRhIHRoYW4gYFNsaWNlYCBjb250YWlucyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0" +
+ "Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZUludCg0MiwgNykuYXNTbGljZSgpOwovLy8gICAgIGxldCBm" +
+ "aXJzdEZpdmU6IFNsaWNlID0gcy5maXJzdEJpdHMoNSk7IC8vIGZpcnN0IDUgYml0cwovLy8gfQovLy8gYGBgCi8vLwovLy8gSW4gb3JkZXIgdG8gcmVkdWNlIGdhcyB1" +
+ "c2FnZSwgcHJlZmVyIGNhbGxpbmcgYFNsaWNlLnByZWxvYWRCaXRzKClgIG92ZXIgdXNpbmcgdGhpcyBmdW5jdGlvbiBzaW5jZSB0aGUgZm9ybWVyIGlzIG1vcmUgb3B0" +
+ "aW1pemVkLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VmaXJzdGJpdHMKLy8vICogaHR0cHM6" +
+ "Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VwcmVsb2FkYml0cwovLy8KYXNtIGV4dGVuZHMgZnVuIGZpcnN0Qml0cyhzZWxmOiBTbGljZSwg" +
+ "bGVuOiBJbnQpOiBTbGljZSB7IFNEQ1VURklSU1QgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRh" +
+ "Y3QgMS42LjAuCi8vLwovLy8gUHJlbG9hZHMgdGhlIGxhc3QgMCDiiaQgYGxlbmAg4omkIDEwMjMgYml0cyBmcm9tIHRoZSBgU2xpY2VgLgovLy8KLy8vIEF0dGVtcHRz" +
+ "IHRvIHNwZWNpZnkgYW4gb3V0LW9mLWJvdW5kcyBgbGVuYCB2YWx1ZSB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4" +
+ "cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBwcmVsb2FkIG1vcmUgZGF0YSB0aGFuIGBTbGljZWAgY29udGFpbnMgdGhyb3cgYW4gZXhjZXB0aW9uIHdp" +
+ "dGggZXhpdCBjb2RlIDk6IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVn" +
+ "aW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgbGFzdEZpdmU6IFNsaWNlID0gcy5sYXN0Qml0cyg1KTsgLy8gbGFzdCA1IGJpdHMK" +
+ "Ly8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VsYXN0Yml0cwovLy8KYXNtIGV4dGVu" +
+ "ZHMgZnVuIGxhc3RCaXRzKHNlbGY6IFNsaWNlLCBsZW46IEludCk6IFNsaWNlIHsgU0RDVVRMQVNUIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xp" +
+ "Y2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIENvbXB1dGVzIGFuZCByZXR1cm5zIHRoZSBgSW50YCBkZXB0aCBvZiB0aGUgYFNsaWNl" +
+ "YC4gUHJvZHVjZXMgMCBpZiB0aGUgYFNsaWNlYCBoYXMgbm8gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIDEgcGx1cyB0aGUgbWF4aW11bSBvZiB0aGUgZGVwdGhzIG9mIHRo" +
+ "ZSByZWZlcmVuY2VkIGNlbGxzLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgpLnN0b3Jl" +
+ "SW50KDQyLCA3KS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGRlcHRoOiBJbnQgPSBzLmRlcHRoKCk7IC8vIDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6" +
+ "Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VkZXB0aAovLy8KYXNtIGV4dGVuZHMgZnVuIGRlcHRoKHNlbGY6IFNsaWNlKTogSW50IHsgU0RF" +
+ "UFRIIH0KCi8vCi8vIFNsaWNlIHNpemUKLy8KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuCi8vLwovLy8gUmV0dXJucyB0aGUgbnVt" +
+ "YmVyIG9mIHJlZmVyZW5jZXMgaW4gdGhlIGBTbGljZWAgYXMgYW4gYEludGAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6" +
+ "IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5yZWZzKCk7Ci8vLyB9Ci8v" +
+ "LyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlcmVmcwovLy8KYXNtIGV4dGVuZHMgZnVuIHJlZnMo" +
+ "c2VsZjogU2xpY2UpOiBJbnQgeyBTUkVGUyB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIFJldHVybnMgdGhlIG51" +
+ "bWJlciBvZiBkYXRhIGJpdHMgaW4gdGhlIGBTbGljZWAgYXMgYW4gYEludGAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6" +
+ "IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogSW50ID0gcy5iaXRzKCk7Ci8vLyB9Ci8v" +
+ "LyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlYml0cwovLy8KYXNtIGV4dGVuZHMgZnVuIGJpdHMo" +
+ "c2VsZjogU2xpY2UpOiBJbnQgeyBTQklUUyB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIENoZWNrcyB3aGV0aGVy" +
+ "IHRoZSBgU2xpY2VgIGlzIGVtcHR5IChpLmUuLCBjb250YWlucyBubyBiaXRzIG9mIGRhdGEgYW5kIG5vIGNlbGwgcmVmZXJlbmNlcykuCi8vLyBSZXR1cm5zIGB0cnVl" +
+ "YCBpZiBpdCBpcyBlbXB0eSwgYGZhbHNlYCBvdGhlcndpc2UuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0g" +
+ "YmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogQm9vbCA9IHMuZW1wdHkoKTsgICAgICAgICAgICAgICAg" +
+ "ICAgICAvLyBmYWxzZQovLy8gICAgIGxldCBidXp6OiBCb29sID0gYmVnaW5DZWxsKCkuYXNTbGljZSgpLmVtcHR5KCk7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8K" +
+ "Ly8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VlbXB0eQovLy8KYXNtIGV4dGVuZHMgZnVuIGVtcHR5KHNlbGY6IFNs" +
+ "aWNlKTogQm9vbCB7IFNFTVBUWSB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIENoZWNrcyB3aGV0aGVyIHRoZSBg" +
+ "U2xpY2VgIGhhcyBubyBiaXRzIG9mIGRhdGEuCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgbm8gZGF0YSwgYGZhbHNlYCBvdGhlcndpc2UuCi8vLwovLy8gYGBg" +
+ "dGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8v" +
+ "ICAgICBsZXQgZml6ejogQm9vbCA9IHMuZGF0YUVtcHR5KCk7ICAvLyB0cnVlCi8vLwovLy8gICAgIGxldCBzMjogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZUludCg0" +
+ "MiwgNykuYXNTbGljZSgpOwovLy8gICAgIGxldCBidXp6OiBCb29sID0gczIuZGF0YUVtcHR5KCk7IC8vIGZhbHNlCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0" +
+ "dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlZGF0YWVtcHR5Ci8vLwphc20gZXh0ZW5kcyBmdW4gZGF0YUVtcHR5KHNlbGY6IFNsaWNl" +
+ "KTogQm9vbCB7IFNERU1QVFkgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8vCi8vLyBDaGVja3Mgd2hldGhlciB0aGUgYFNs" +
+ "aWNlYCBoYXMgbm8gcmVmZXJlbmNlcy4KLy8vIFJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBubyByZWZlcmVuY2VzLCBgZmFsc2VgIG90aGVyd2lzZS4KLy8vCi8vLyBg" +
+ "YGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5zdG9yZVJlZihlbXB0eUNlbGwoKSkuYXNTbGljZSgpOwov" +
+ "Ly8gICAgIGxldCBmaXp6OiBCb29sID0gcy5yZWZzRW1wdHkoKTsgICAgICAgICAgICAgICAgICAgICAvLyBmYWxzZQovLy8gICAgIGxldCBidXp6OiBCb29sID0gYmVn" +
+ "aW5DZWxsKCkuYXNTbGljZSgpLnJlZnNFbXB0eSgpOyAvLyB0cnVlCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3Jl" +
+ "Zi9jb3JlLWNlbGxzI3NsaWNlcmVmc2VtcHR5Ci8vLwphc20gZXh0ZW5kcyBmdW4gcmVmc0VtcHR5KHNlbGY6IFNsaWNlKTogQm9vbCB7IFNSRU1QVFkgfQoKLy8KLy8g" +
+ "Q29udmVyc2lvbnMKLy8KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQnVpbGRlcmAgdHlwZS4KLy8vCi8vLyBDb252ZXJ0cyB0aGUgYEJ1aWxkZXJgIGlu" +
+ "dG8gYSBgU2xpY2VgIGFuZCByZXR1cm5zIGl0LgovLy8gQW4gYWxpYXMgdG8gYHNlbGYuZW5kQ2VsbCgpLmJlZ2luUGFyc2UoKWAuCi8vLwovLy8gYGBgdGFjdAovLy8g" +
+ "ZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBiLmFzU2xpY2UoKTsKLy8v" +
+ "IH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcmFzc2xpY2UKLy8vCmlubGluZSBleHRl" +
+ "bmRzIGZ1biBhc1NsaWNlKHNlbGY6IEJ1aWxkZXIpOiBTbGljZSB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCkuYmVnaW5QYXJzZSgpOwp9CgovLy8gRXh0ZW5zaW9u" +
+ "IGZ1bmN0aW9uIGZvciB0aGUgYENlbGxgIHR5cGUuCi8vLwovLy8gQ29udmVydHMgdGhlIGBDZWxsYCB0byBhIGBTbGljZWAgYW5kIHJldHVybnMgaXQuCi8vLyBBbiBh" +
+ "bGlhcyB0byBgc2VsZi5iZWdpblBhcnNlKClgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBjOiBDZWxsID0gZW1wdHlDZWxs" +
+ "KCk7Ci8vLyAgICAgbGV0IGZpeno6IFNsaWNlID0gYy5hc1NsaWNlKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3Jn" +
+ "L3JlZi9jb3JlLWNlbGxzI2NlbGxhc3NsaWNlCi8vLwppbmxpbmUgZXh0ZW5kcyBmdW4gYXNTbGljZShzZWxmOiBDZWxsKTogU2xpY2UgewogICAgcmV0dXJuIHNlbGYu" +
+ "YmVnaW5QYXJzZSgpOwp9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIENvbnZlcnRzIHRoZSBgU2xpY2VgIHRvIGEg" +
+ "YENlbGxgIGFuZCByZXR1cm5zIGl0LgovLy8gQW4gYWxpYXMgdG8gYGJlZ2luQ2VsbCgpLnN0b3JlU2xpY2Uoc2VsZikuZW5kQ2VsbCgpYC4KLy8vCi8vLyBOT1RFOiAq" +
+ "KkdhcyBleHBlbnNpdmUhKiogVGhpcyBmdW5jdGlvbiB1c2VzIDUwMCBnYXMgdW5pdHMgb3IgbW9yZS4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsK" +
+ "Ly8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNlbGwoKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IENlbGwgPSBzLmFzQ2VsbCgpOwovLy8gICAgIGxldCBi" +
+ "dXp6OiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVTbGljZShzKS5lbmRDZWxsKCk7Ci8vLwovLy8gICAgIGZpenogPT0gYnV6ejsgLy8gdHJ1ZQovLy8gfQovLy8gYGBg" +
+ "Ci8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzY2VsbAovLy8KaW5saW5lIGV4dGVuZHMgZnVuIGFzQ2Vs" +
+ "bChzZWxmOiBTbGljZSk6IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlU2xpY2Uoc2VsZikKICAgICAgICAuZW5kQ2VsbCgpOwp9Cgov" +
+ "Ly8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYEJ1aWxkZXJgIHR5cGUuCi8vLwovLy8gQ29udmVydHMgdGhlIGBCdWlsZGVyYCBpbnRvIGEgYENlbGxgIGFuZCBy" +
+ "ZXR1cm5zIGl0LgovLy8gQW4gYWxpYXMgdG8gYHNlbGYuZW5kQ2VsbCgpYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYjog" +
+ "QnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIGxldCBmaXp6OiBDZWxsID0gYi5hc0NlbGwoKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9k" +
+ "b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjYnVpbGRlcmFzY2VsbAovLy8KaW5saW5lIGV4dGVuZHMgZnVuIGFzQ2VsbChzZWxmOiBCdWlsZGVyKTogQ2Vs" +
+ "bCB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCk7Cn0KCi8vLyBDcmVhdGVzIGFuZCByZXR1cm5zIGFuIGVtcHR5IGBDZWxsYCAod2l0aG91dCBkYXRhIGFuZCByZWZl" +
+ "cmVuY2VzKS4KLy8vIEFuIGFsaWFzIHRvIGBiZWdpbkNlbGwoKS5lbmRDZWxsKClgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxl" +
+ "dCBmaXp6OiBDZWxsID0gZW1wdHlDZWxsKCk7Ci8vLyAgICAgbGV0IGJ1eno6IENlbGwgPSBiZWdpbkNlbGwoKS5lbmRDZWxsKCk7Ci8vLwovLy8gICAgIGZpenogPT0g" +
+ "YnV6ejsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNlbXB0eWNlbGwKLy8v" +
+ "CmFzbSBmdW4gZW1wdHlDZWxsKCk6IENlbGwgewogICAgPGIgYj4gUFVTSFJFRiAvLyBQdXJlIEZpZnQ6ICI8YiIgY3JlYXRlcyBhIGJ1aWxkZXIsICJiPiIgdHVybnMg" +
+ "aXQgaW50byBhIGNlbGwgYXQgY29tcGlsZSB0aW1lCn0KCi8vLyBDcmVhdGVzIGFuZCByZXR1cm5zIGFuIGVtcHR5IGBTbGljZWAgKHdpdGhvdXQgZGF0YSBhbmQgcmVm" +
+ "ZXJlbmNlcykuCi8vLyBBbiBhbGlhcyB0byBgZW1wdHlDZWxsKCkuYXNTbGljZSgpYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBs" +
+ "ZXQgZml6ejogU2xpY2UgPSBlbXB0eVNsaWNlKCk7Ci8vLyAgICAgbGV0IGJ1eno6IFNsaWNlID0gZW1wdHlDZWxsKCkuYXNTbGljZSgpOwovLy8KLy8vICAgICBmaXp6" +
+ "ID09IGJ1eno7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjZW1wdHlzbGlj" +
+ "ZQovLy8KYXNtIGZ1biBlbXB0eVNsaWNlKCk6IFNsaWNlIHsKICAgIGJ7fSBQVVNIU0xJQ0UKfQoKLy8vIFN0cnVjdCBmb3IgaG9sZGluZyB2YWx1ZXMgY29tcHV0ZWQg" +
+ "YnkgdGhlIGBDZWxsLmNvbXB1dGVEYXRhU2l6ZSgpYCBhbmQgYFNsaWNlLmNvbXB1dGVEYXRhU2l6ZSgpYCBleHRlbnNpb24gZnVuY3Rpb25zLiBBdmFpbGFibGUgc2lu" +
+ "Y2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxjb21wdXRlZGF0YXNpemUK" +
+ "Ly8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vjb21wdXRlZGF0YXNpemUKLy8vCnN0cnVjdCBEYXRhU2l6ZSB7CiAgICAv" +
+ "Ly8gVGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgY2VsbHM6IEludDsKCiAgICAvLy8gVGhlIHRv" +
+ "dGFsIG51bWJlciBvZiBiaXRzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgYml0czogSW50OwoKICAgIC8vLyBUaGUg" +
+ "dG90YWwgbnVtYmVyIG9mIHJlZnMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICByZWZzOiBJbnQ7Cn0KCi8vLyBFeHRl" +
+ "bnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ2VsbGAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhl" +
+ "IG51bWJlciBvZiBkaXN0aW5jdCBjZWxscywgYml0cyBhbmQgcmVmcyBpbiB0aGUgYENlbGxgIGJ5IHVzaW5nIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIChERlMpIGFsZ29y" +
+ "aXRobSwgcmVjdXJzaXZlbHkgdHJhdmVyc2luZyBlYWNoIHJlZmVyZW5jZWQgY2VsbC4gVGhpcyBmdW5jdGlvbiBpcyBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlIGFu" +
+ "ZCBjYW4gY29uc3VtZSBhIGxvdCBvZiBnYXMuIElmIGBzZWxmYCBpcyBgbnVsbGAsIHJldHVybnMgYERhdGFTaXplYCB3aXRoIGFsbCBmaWVsZHMgc2V0IHRvIDAuCi8v" +
+ "LwovLy8gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgYERhdGFTaXplYCBTdHJ1Y3QgY29uc2lzdGluZyBvZjoKLy8vICogYGNlbGxzOiBJbnRgLCB0aGUgdG90" +
+ "YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYGJpdHM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0" +
+ "cyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgcmVmczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiByZWZzIGlu" +
+ "IGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLwovLy8gSWYgdGhlIHNwZWNpZmllZCBgbWF4Q2VsbHNgIHZhbHVlIGlzbid0IGVu" +
+ "b3VnaCB0byB0cmF2ZXJzZSBhbGwgY2VsbHMgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUsIGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4IGlzIHRocm93bjog" +
+ "YENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBgbWF4Q2VsbHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3" +
+ "aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxl" +
+ "dCBjOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5lbmRDZWxsKCk7Ci8vLyAgICAgdHJ5IHsKLy8vICAgICAg" +
+ "ICAgbGV0IGRhdGFTaXplOiBEYXRhU2l6ZSA9IGMuY29tcHV0ZURhdGFTaXplKDIpOwovLy8gICAgICAgICBkYXRhU2l6ZS5jZWxsczsgLy8gMgovLy8gICAgICAgICBk" +
+ "YXRhU2l6ZS5iaXRzOyAgLy8gNwovLy8gICAgICAgICBkYXRhU2l6ZS5yZWZzOyAgLy8gMQovLy8gICAgIH0gY2F0Y2ggKGV4aXRDb2RlKSB7Ci8vLyAgICAgICAgIC8v" +
+ "IGlmIG1heENlbGxzIHdhcyBpbnN1ZmZpY2llbnQgdG8gdHJhdmVyc2UgdGhlIGNlbGwKLy8vICAgICAgICAgLy8gYW5kIGFsbCBvZiBpdHMgcmVmZXJlbmNlcywgdGhl" +
+ "IGV4aXRDb2RlIGhlcmUgd291bGQgYmUgOAovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
+ "cmUtY2VsbHMjY2VsbGNvbXB1dGVkYXRhc2l6ZQovLy8KYXNtIGV4dGVuZHMgZnVuIGNvbXB1dGVEYXRhU2l6ZShzZWxmOiBDZWxsPywgbWF4Q2VsbHM6IEludCk6IERh" +
+ "dGFTaXplIHsgQ0RBVEFTSVpFIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgov" +
+ "Ly8KLy8vIFNpbWlsYXIgdG8gYENlbGwuY29tcHV0ZURhdGFTaXplKClgLCBidXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgY2VsbCB0aGF0IGNvbnRhaW5z" +
+ "IHRoZSBgU2xpY2VgIGl0c2VsZi4gSG93ZXZlciwgYWNjb3VudHMgZm9yIGl0cyBiaXRzIGFuZCByZWZzLgovLy8KLy8vIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50" +
+ "byBhIGBEYXRhU2l6ZWAgU3RydWN0IGNvbnNpc3Rpbmcgb2Y6Ci8vLyAqIGBjZWxsczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQgY2VsbHMsIGluY2x1" +
+ "ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLyAqIGBiaXRzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5n" +
+ "IHRoZSBzdGFydGluZyBvbmUKLy8vICogYHJlZnM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVmcyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhl" +
+ "IHN0YXJ0aW5nIG9uZQovLy8KLy8vIElmIHRoZSBzcGVjaWZpZWQgYG1heENlbGxzYCB2YWx1ZSBpc24ndCBlbm91Z2ggdG8gdHJhdmVyc2UgYWxsIGNlbGxzICoqbm90" +
+ "KiogaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUsIGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4IGlzIHRocm93bjogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8v" +
+ "IEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBgbWF4Q2VsbHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdl" +
+ "ciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9IGJlZ2luQ2VsbCgp" +
+ "LnN0b3JlSW50KDQyLCA3KS5zdG9yZVJlZihlbXB0eUNlbGwoKSkuYXNTbGljZSgpOwovLy8gICAgIHRyeSB7Ci8vLyAgICAgICAgIGxldCBkYXRhU2l6ZTogRGF0YVNp" +
+ "emUgPSBzLmNvbXB1dGVEYXRhU2l6ZSgxKTsKLy8vICAgICAgICAgZGF0YVNpemUuY2VsbHM7IC8vIDEKLy8vICAgICAgICAgZGF0YVNpemUuYml0czsgIC8vIDcKLy8v" +
+ "ICAgICAgICAgZGF0YVNpemUucmVmczsgIC8vIDEKLy8vICAgICB9IGNhdGNoIChleGl0Q29kZSkgewovLy8gICAgICAgICAvLyBpZiBtYXhDZWxscyB3YXMgaW5zdWZm" +
+ "aWNpZW50IHRvIHRyYXZlcnNlIHRoZSBjZWxsCi8vLyAgICAgICAgIC8vIGFuZCBhbGwgb2YgaXRzIHJlZmVyZW5jZXMsIHRoZSBleGl0Q29kZSBoZXJlIHdvdWxkIGJl" +
+ "IDgKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI3NsaWNlY29tcHV0ZWRh" +
+ "dGFzaXplCi8vLwphc20gZXh0ZW5kcyBmdW4gY29tcHV0ZURhdGFTaXplKHNlbGY6IFNsaWNlLCBtYXhDZWxsczogSW50KTogRGF0YVNpemUgeyBTREFUQVNJWkUgfQoK" +
+ "Ly8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBDZWxsYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDb21wdXRlcyBhbmQgcmV0" +
+ "dXJucyB0aGUgYEludGAgZGVwdGggb2YgdGhlIGBDZWxsYC4gUHJvZHVjZXMgMCBpZiB0aGUgYENlbGxgIGhhcyBubyByZWZlcmVuY2VzLCBvdGhlcndpc2UgMSBwbHVz" +
+ "IHRoZSBtYXhpbXVtIG9mIHRoZSBkZXB0aHMgb2YgdGhlIHJlZmVyZW5jZWQgY2VsbHMuIElmIGMgaXMgbnVsbCwgcmV0dXJucyB6ZXJvLgovLy8KLy8vIGBgYHRhY3QK" +
+ "Ly8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBjOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmVuZENlbGwoKTsKLy8vICAgICBsZXQgZGVw" +
+ "dGg6IEludCA9IGMuZGVwdGgoKTsgLy8gMAovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNj" +
+ "ZWxsZGVwdGgKLy8vCmFzbSBleHRlbmRzIGZ1biBkZXB0aChzZWxmOiBDZWxsPyk6IEludCB7IENERVBUSCB9Cg==";
files["std/internal/config.tact"] =
- "Ly8vIExvYWRzIGEgW2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVyXSBvZiBUT04gQmxvY2tjaGFpbiBieSBpdHMgYGlkYCBudW1iZXIuCi8vLyAKLy8vIFtjb25maWd1cmF0" +
- "aW9uIHBhcmFtZXRlcl06IGh0dHBzOi8vZG9jcy50b24ub3JnL2RldmVsb3AvaG93dG8vYmxvY2tjaGFpbi1jb25maWdzCi8vLyAKYXNtIGZ1biBnZXRDb25maWdQYXJh" +
- "bShpZDogSW50KTogQ2VsbD8geyBDT05GSUdPUFRQQVJBTSB9Cg==";
+ "Ly8vIExvYWRzIGEgW2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVyXSBvZiBUT04gQmxvY2tjaGFpbiBieSBpdHMgYGlkYCBudW1iZXIuCi8vLwovLy8gU2VlOiBodHRwczov" +
+ "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb250ZXh0c3RhdGUjZ2V0Y29uZmlncGFyYW0KLy8vCi8vLyBbY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJdOiBodHRw" +
+ "czovL2RvY3MudG9uLm9yZy9kZXZlbG9wL2hvd3RvL2Jsb2NrY2hhaW4tY29uZmlncwovLy8KYXNtIGZ1biBnZXRDb25maWdQYXJhbShpZDogSW50KTogQ2VsbD8geyBD" +
+ "T05GSUdPUFRQQVJBTSB9Cg==";
files["std/internal/context.tact"] =
"Ly8vIFJlcHJlc2VudHMgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZS4Kc3RydWN0IENvbnRleHQgewogICAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRo" +
"ZSByZWNlaXZlZCBtZXNzYWdlIGNhbgogICAgLy8vIFtib3VuY2UgYmFja10oaHR0cHM6Ly9kb2NzLnRvbi5vcmcvdjMvZG9jdW1lbnRhdGlvbi9zbWFydC1jb250cmFj" +
"dHMvbWVzc2FnZS1tYW5hZ2VtZW50L25vbi1ib3VuY2VhYmxlLW1lc3NhZ2VzKS4KICAgIGJvdW5jZWFibGU6IEJvb2w7CgogICAgLy8vIEludGVybmFsIGFkZHJlc3Mg" +
- "b2YgdGhlIHNlbmRlciBvbiB0aGUgVE9OIGJsb2NrY2hhaW4uCiAgICBzZW5kZXI6IEFkZHJlc3M7CgogICAgLy8vIEFtb3VudCBvZiBbbmFub1RvbmNvaW5dKGh0dHBz" +
+ "b2YgdGhlIHNlbmRlciBvbiB0aGUgVE9OIEJsb2NrY2hhaW4uCiAgICBzZW5kZXI6IEFkZHJlc3M7CgogICAgLy8vIEFtb3VudCBvZiBbbmFub1RvbmNvaW5dKGh0dHBz" +
"Oi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svaW50ZWdlcnMjbmFub3RvbmNvaW4pIGluIHRoZSByZWNlaXZlZCBtZXNzYWdlLgogICAgdmFsdWU6IEludDsKCiAgICAv" +
"Ly8gVGhlIHJlbWFpbmRlciBvZiB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBhcyBhIGBTbGljZWAuIEl0IGZvbGxvd3MgdGhlIFtpbnRlcm5hbCBtZXNzYWdlIGxheW91dF0K" +
"ICAgIC8vLyBvZiBUT04sIHN0YXJ0aW5nIGZyb20gdGhlIGRlc3RpbmF0aW9uIGBBZGRyZXNzYCAoYE1zZ0FkZHJlc3NJbnRgIGluIFtUTC1CIG5vdGF0aW9uXSkuCiAg" +
- "ICAvLy8gCiAgICAvLy8gW2ludGVybmFsIG1lc3NhZ2UgbGF5b3V0XTogaHR0cHM6Ly9kb2NzLnRvbi5vcmcvZGV2ZWxvcC9zbWFydC1jb250cmFjdHMvbWVzc2FnZXMj" +
- "bWVzc2FnZS1sYXlvdXQKICAgIC8vLyBbVEwtQiBub3RhdGlvbl06IGh0dHBzOi8vZG9jcy50b24ub3JnL2RldmVsb3AvZGF0YS1mb3JtYXRzL3RsLWItbGFuZ3VhZ2UK" +
- "ICAgIHJhdzogU2xpY2U7Cn0KCi8vLyBSZXR1cm5zIGBDb250ZXh0YCBzdHJ1Y3QsIHdoaWNoIGNvbnNpc3RzIG9mOgovLy8gCi8vLyAqIGBib3VuY2VhYmxlYCDigJQg" +
- "SW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgY2FuIFtib3VuY2UgYmFja10uCi8vLyAqIGBzZW5kZXJgIOKAlCBJbnRlcm5hbCBhZGRyZXNzIG9m" +
- "IHRoZSBzZW5kZXIgb24gdGhlIFRPTiBibG9ja2NoYWluLgovLy8gKiBgdmFsdWVgIOKAlCBBbW91bnQgb2YgW25hbm9Ub25jb2luXSBpbiB0aGUgcmVjZWl2ZWQgbWVz" +
- "c2FnZS4KLy8vICogYHJhd2Ag4oCUIFRoZSByZW1haW5kZXIgb2YgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgYXMgYSBgU2xpY2VgLiBJdCBmb2xsb3dzIHRoZSBbaW50ZXJu" +
- "YWwgbWVzc2FnZSBsYXlvdXRdIG9mIFRPTiwgc3RhcnRpbmcgZnJvbSB0aGUgZGVzdGluYXRpb24gYEFkZHJlc3NgIChgTXNnQWRkcmVzc0ludGAgaW4gW1RMLUIgbm90" +
- "YXRpb25dKS4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIHRlc3QoKSB7Ci8vLyAgICAgbGV0IGN0eDogQ29udGV4dCA9IGNvbnRleHQoKTsKLy8vICAgICByZXF1aXJl" +
- "KGN0eC52YWx1ZSAhPSA2OCArIDEsICJJbnZhbGlkIGFtb3VudCBvZiBuYW5vVG9uY29pbnMsIGJ5ZSEiKTsKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBOb3RlOiBJZiB5" +
- "b3Ugb25seSBuZWVkIHRvIGtub3cgd2hvIHNlbnQgdGhlIG1lc3NhZ2UsIHVzZSB0aGUgYHNlbmRlcigpYCBmdW5jdGlvbiwgCi8vLyBhcyBpdCBpcyBsZXNzIGdhcy1j" +
- "b25zdW1pbmcuCi8vLyAKLy8vIFtib3VuY2UgYmFja106IGh0dHBzOi8vZG9jcy50b24ub3JnL3YzL2RvY3VtZW50YXRpb24vc21hcnQtY29udHJhY3RzL21lc3NhZ2Ut" +
- "bWFuYWdlbWVudC9ub24tYm91bmNlYWJsZS1tZXNzYWdlcwovLy8gW25hbm9Ub25jb2luXTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9pbnRlZ2VycyNu" +
- "YW5vdG9uY29pbgovLy8gW2ludGVybmFsIG1lc3NhZ2UgbGF5b3V0XTogaHR0cHM6Ly9kb2NzLnRvbi5vcmcvZGV2ZWxvcC9zbWFydC1jb250cmFjdHMvbWVzc2FnZXMj" +
- "bWVzc2FnZS1sYXlvdXQKLy8vIFtUTC1CIG5vdGF0aW9uXTogaHR0cHM6Ly9kb2NzLnRvbi5vcmcvZGV2ZWxvcC9kYXRhLWZvcm1hdHMvdGwtYi1sYW5ndWFnZQovLy8g" +
- "CkBuYW1lKF9fdGFjdF9jb250ZXh0X2dldCkKbmF0aXZlIGNvbnRleHQoKTogQ29udGV4dDsKCi8vLyBSZXR1cm5zIHRoZSBgQWRkcmVzc2Agb2YgdGhlIHNlbmRlciBv" +
- "ZiB0aGUgY3VycmVudCBtZXNzYWdlLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBjb250cmFjdCBNZVNlZSB7Ci8vLyAgICAgcmVjZWl2ZSgpIHsKLy8vICAgICAgICAgbGV0" +
- "IHdob1NlbnRNZU1lc3NhZ2U6IEFkZHJlc3MgPSBzZW5kZXIoKTsKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gTm90ZTogQmVoYXZpb3IgaXMgdW5kZWZp" +
- "bmVkIGZvciBbZ2V0dGVyIGZ1bmN0aW9uc10sIGJlY2F1c2UgdGhleSBjYW5ub3QgaGF2ZSBhIHNlbmRlcgovLy8gbm9yIGNhbiB0aGV5IHNlbmQgbWVzc2FnZXMuCi8v" +
- "LyAKLy8vIFRpcDogVG8gcmVkdWNlIGdhcyB1c2FnZSwgcHJlZmVyIHVzaW5nIHRoaXMgZnVuY3Rpb24gb3ZlciBjYWxsaW5nIGBjb250ZXh0KCkuc2VuZGVyYCAKLy8v" +
- "IHdoZW4geW91IG9ubHkgbmVlZCB0byBrbm93IHRoZSBzZW5kZXIgb2YgdGhlIG1lc3NhZ2UuCi8vLyAKLy8vIFtnZXR0ZXIgZnVuY3Rpb25zXTogaHR0cHM6Ly9kb2Nz" +
- "LnRhY3QtbGFuZy5vcmcvYm9vay9jb250cmFjdHMjZ2V0dGVyLWZ1bmN0aW9ucwovLy8gCkBuYW1lKF9fdGFjdF9jb250ZXh0X2dldF9zZW5kZXIpCm5hdGl2ZSBzZW5k" +
- "ZXIoKTogQWRkcmVzczsKCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ29udGV4dGAgc3RydWN0dXJlLgovLy8KLy8vIFJlYWRzIGZvcndhcmQgZmVlIGFu" +
- "ZCByZXR1cm5zIGl0IGFzIGBJbnRgIGFtb3VudCBvZiBuYW5vVG9uY29pbnMuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZ3" +
- "ZEZlZTogSW50ID0gY29udGV4dCgpLnJlYWRGb3J3YXJkRmVlKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcu" +
- "b3JnL3JlZi9jb3JlLWFkdmFuY2VkI2NvbnRleHRyZWFkZm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNn" +
- "ZXRvcmlnaW5hbGZ3ZGZlZQovLy8KYXNtIGV4dGVuZHMgZnVuIHJlYWRGb3J3YXJkRmVlKHNlbGY6IENvbnRleHQpOiBJbnQgewogICAgLy8gT25seSB0aGUgc2VsZi5y" +
- "YXcgKENvbnRleHQucmF3KSBpcyBpbXBvcnRhbnQsCiAgICAvLyBzbyBhbGwgdGhlIG90aGVyIGZpZWxkcyBhbmQgbG9hZGVkIHZhbHVlcyB3aWxsIGJlIGRyb3BwZWQg" +
- "YnkgYEJMS0RST1AyYAogICAgLy8KICAgIC8vIENvbnRleHQucmF3IHN0YXJ0cyBhdCB0aGUgZGVzdDpNc2dBZGRyZXNzSW50LCBmb2xsb3dpbmcgdGhpcyBUTC1CIHNj" +
- "aGVtZToKICAgIC8vIGludF9tc2dfaW5mbyQwCiAgICAvLyAgIGlocl9kaXNhYmxlZDpCb29sCiAgICAvLyAgIGJvdW5jZTpCb29sCiAgICAvLyAgIGJvdW5jZWQ6Qm9v" +
- "bAogICAgLy8gICBzcmM6TXNnQWRkcmVzcwogICAgLy8gICBkZXN0Ok1zZ0FkZHJlc3NJbnQg4oaQIGhlcmUgaXMgdGhlIHN0YXJ0CiAgICAvLyAgIHZhbHVlOkN1cnJl" +
- "bmN5Q29sbGVjdGlvbgogICAgLy8gICBpaHJfZmVlOkdyYW1zCiAgICAvLyAgIGZ3ZF9mZWU6R3JhbXMKICAgIC8vICAgY3JlYXRlZF9sdDp1aW50NjQKICAgIC8vICAg" +
- "Y3JlYXRlZF9hdDp1aW50MzIKICAgIC8vID0gQ29tbW9uTXNnSW5mb1JlbGF4ZWQ7CgogICAgTERNU0dBRERSICAgLy8gbG9hZCBkZXN0Ok1zZ0FkZHJlc3NJbnQKICAg" +
- "IExER1JBTVMgICAgIC8vIGxvYWQgdmFsdWU6Q3VycmVuY3lDb2xsZWN0aW9uCiAgICBPTkUKICAgIFNEU0tJUEZJUlNUIC8vIHNraXAgZXh0cmEgY3VycmVuY3kgY29s" +
- "bGVjdGlvbgogICAgTERHUkFNUyAgICAgLy8gbG9hZCBpaHJfZmVlCiAgICBMREdSQU1TICAgICAvLyBsb2FkIGZ3ZF9mZWUsIHdlJ2xsIGJlIHVzaW5nIHRoaXMhCiAg" +
- "ICBEUk9QICAgICAgICAvLyBkcm9wIHJlbWFpbmluZyBTbGljZSAod2l0aCBjcmVhdGVkX2x0IGFuZCBjcmVhdGVkX2F0KQoKICAgIC8vIFRoZXJlIGFyZSA3IGVudHJp" +
- "ZXMgb24gdGhlIHN0YWNrIOKAlCBmaXJzdCAzIGZpZWxkcyBvZiBDb250ZXh0IHBsdXMgNCBsb2FkZWQgb25lcy4KICAgIC8vIFRoZSB0b3Btb3N0IGlzIGZ3ZF9mZWUs" +
- "IHdoaWNoIGlzIHRoZSBvbmx5IG9uZSB3ZSdyZSBhZnRlciwgc28gbGV0J3MgZHJvcCA2IGVudHJpZXMgYmVsb3c6CiAgICA2IDEgQkxLRFJPUDIgLy8gZHJvcCB0aGUg" +
- "bG9hZGVkIHZhbHVlcyBhcyB3ZWxsIGFzIHRoZSBmaXJzdCAzIGZpZWxkcyBvZiBDb250ZXh0CgogICAgWkVSTyAgICAgICAgICAgICAgLy8gbm90IG1hc3RlcmNoYWlu" +
- "CiAgICBHRVRPUklHSU5BTEZXREZFRSAvLyAoZndkX2ZlZSAqIDJeMTYpIC8gZmlyc3RfZnJhYywgd2hlcmUKICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0X2Zy" +
- "YWMgaXMgYSB2YWx1ZSBsaXN0ZWQgaW4gY29uZmlnIHBhcmFtIDI1CiAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgYmxvY2tjaGFpbjogaHR0cHM6Ly90b25z" +
- "Y2FuLm9yZy9jb25maWcjMjUKfQo=";
+ "ICAvLy8KICAgIC8vLyBbaW50ZXJuYWwgbWVzc2FnZSBsYXlvdXRdOiBodHRwczovL2RvY3MudG9uLm9yZy9kZXZlbG9wL3NtYXJ0LWNvbnRyYWN0cy9tZXNzYWdlcyNt" +
+ "ZXNzYWdlLWxheW91dAogICAgLy8vIFtUTC1CIG5vdGF0aW9uXTogaHR0cHM6Ly9kb2NzLnRvbi5vcmcvZGV2ZWxvcC9kYXRhLWZvcm1hdHMvdGwtYi1sYW5ndWFnZQog" +
+ "ICAgcmF3OiBTbGljZTsKfQoKLy8vIFJldHVybnMgYENvbnRleHRgIHN0cnVjdCwgd2hpY2ggY29uc2lzdHMgb2Y6Ci8vLwovLy8gKiBgYm91bmNlYWJsZWAg4oCUIElu" +
+ "ZGljYXRlcyB3aGV0aGVyIHRoZSByZWNlaXZlZCBtZXNzYWdlIGNhbiBbYm91bmNlIGJhY2tdLgovLy8gKiBgc2VuZGVyYCDigJQgSW50ZXJuYWwgYWRkcmVzcyBvZiB0" +
+ "aGUgc2VuZGVyIG9uIHRoZSBUT04gYmxvY2tjaGFpbi4KLy8vICogYHZhbHVlYCDigJQgQW1vdW50IG9mIFtuYW5vVG9uY29pbl0gaW4gdGhlIHJlY2VpdmVkIG1lc3Nh" +
+ "Z2UuCi8vLyAqIGByYXdgIOKAlCBUaGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlZCBtZXNzYWdlIGFzIGEgYFNsaWNlYC4gSXQgZm9sbG93cyB0aGUgW2ludGVybmFs" +
+ "IG1lc3NhZ2UgbGF5b3V0XSBvZiBUT04sIHN0YXJ0aW5nIGZyb20gdGhlIGRlc3RpbmF0aW9uIGBBZGRyZXNzYCAoYE1zZ0FkZHJlc3NJbnRgIGluIFtUTC1CIG5vdGF0" +
+ "aW9uXSkuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIHRlc3QoKSB7Ci8vLyAgICAgbGV0IGN0eDogQ29udGV4dCA9IGNvbnRleHQoKTsKLy8vICAgICByZXF1aXJlKGN0" +
+ "eC52YWx1ZSAhPSA2OCArIDEsICJJbnZhbGlkIGFtb3VudCBvZiBuYW5vVG9uY29pbnMsIGJ5ZSEiKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIE5vdGU6IElmIHlvdSBv" +
+ "bmx5IG5lZWQgdG8ga25vdyB3aG8gc2VudCB0aGUgbWVzc2FnZSwgdXNlIHRoZSBgc2VuZGVyKClgIGZ1bmN0aW9uLAovLy8gYXMgaXQgaXMgbGVzcyBnYXMtY29uc3Vt" +
+ "aW5nLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29udGV4dHN0YXRlI2NvbnRleHQKLy8vCi8vLyBbYm91bmNlIGJhY2td" +
+ "OiBodHRwczovL2RvY3MudG9uLm9yZy92My9kb2N1bWVudGF0aW9uL3NtYXJ0LWNvbnRyYWN0cy9tZXNzYWdlLW1hbmFnZW1lbnQvbm9uLWJvdW5jZWFibGUtbWVzc2Fn" +
+ "ZXMKLy8vIFtuYW5vVG9uY29pbl06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svaW50ZWdlcnMjbmFub3RvbmNvaW4KLy8vIFtpbnRlcm5hbCBtZXNzYWdl" +
+ "IGxheW91dF06IGh0dHBzOi8vZG9jcy50b24ub3JnL2RldmVsb3Avc21hcnQtY29udHJhY3RzL21lc3NhZ2VzI21lc3NhZ2UtbGF5b3V0Ci8vLyBbVEwtQiBub3RhdGlv" +
+ "bl06IGh0dHBzOi8vZG9jcy50b24ub3JnL2RldmVsb3AvZGF0YS1mb3JtYXRzL3RsLWItbGFuZ3VhZ2UKLy8vCkBuYW1lKF9fdGFjdF9jb250ZXh0X2dldCkKbmF0aXZl" +
+ "IGNvbnRleHQoKTogQ29udGV4dDsKCi8vLyBSZXR1cm5zIHRoZSBgQWRkcmVzc2Agb2YgdGhlIHNlbmRlciBvZiB0aGUgY3VycmVudCBtZXNzYWdlLgovLy8KLy8vIGBg" +
+ "YHRhY3QKLy8vIGNvbnRyYWN0IE1lU2VlIHsKLy8vICAgICByZWNlaXZlKCkgewovLy8gICAgICAgICBsZXQgd2hvU2VudE1lTWVzc2FnZTogQWRkcmVzcyA9IHNlbmRl" +
+ "cigpOwovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIE5vdGU6IEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBmb3IgW2dldHRlciBmdW5jdGlvbnNdLCBiZWNhdXNl" +
+ "IHRoZXkgY2Fubm90IGhhdmUgYSBzZW5kZXIKLy8vIG5vciBjYW4gdGhleSBzZW5kIG1lc3NhZ2VzLgovLy8KLy8vIFRpcDogVG8gcmVkdWNlIGdhcyB1c2FnZSwgcHJl" +
+ "ZmVyIHVzaW5nIHRoaXMgZnVuY3Rpb24gb3ZlciBjYWxsaW5nIGBjb250ZXh0KCkuc2VuZGVyYAovLy8gd2hlbiB5b3Ugb25seSBuZWVkIHRvIGtub3cgdGhlIHNlbmRl" +
+ "ciBvZiB0aGUgbWVzc2FnZS4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbnRleHRzdGF0ZSNzZW5kZXIKLy8vCi8vLyBb" +
+ "Z2V0dGVyIGZ1bmN0aW9uc106IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svY29udHJhY3RzI2dldHRlci1mdW5jdGlvbnMKLy8vCkBuYW1lKF9fdGFjdF9j" +
+ "b250ZXh0X2dldF9zZW5kZXIpCm5hdGl2ZSBzZW5kZXIoKTogQWRkcmVzczsKCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ29udGV4dGAgc3RydWN0dXJl" +
+ "LgovLy8KLy8vIFJlYWRzIGZvcndhcmQgZmVlIGFuZCByZXR1cm5zIGl0IGFzIGBJbnRgIGFtb3VudCBvZiBuYW5vVG9uY29pbnMuCi8vLwovLy8gYGBgdGFjdAovLy8g" +
+ "ZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZ3ZEZlZTogSW50ID0gY29udGV4dCgpLnJlYWRGb3J3YXJkRmVlKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6" +
+ "Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbnRleHRzdGF0ZSNjb250ZXh0cmVhZGZvcndhcmRmZWUKLy8vICogaHR0cHM6Ly9kb2Nz" +
+ "LnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZ2FzI2dldG9yaWdpbmFsZndkZmVlCi8vLwphc20gZXh0ZW5kcyBmdW4gcmVhZEZvcndhcmRGZWUoc2VsZjogQ29udGV4dCk6" +
+ "IEludCB7CiAgICAvLyBPbmx5IHRoZSBzZWxmLnJhdyAoQ29udGV4dC5yYXcpIGlzIGltcG9ydGFudCwKICAgIC8vIHNvIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFuZCBs" +
+ "b2FkZWQgdmFsdWVzIHdpbGwgYmUgZHJvcHBlZCBieSBgQkxLRFJPUDJgCiAgICAvLwogICAgLy8gQ29udGV4dC5yYXcgc3RhcnRzIGF0IHRoZSBkZXN0Ok1zZ0FkZHJl" +
+ "c3NJbnQsIGZvbGxvd2luZyB0aGlzIFRMLUIgc2NoZW1lOgogICAgLy8gaW50X21zZ19pbmZvJDAKICAgIC8vICAgaWhyX2Rpc2FibGVkOkJvb2wKICAgIC8vICAgYm91" +
+ "bmNlOkJvb2wKICAgIC8vICAgYm91bmNlZDpCb29sCiAgICAvLyAgIHNyYzpNc2dBZGRyZXNzCiAgICAvLyAgIGRlc3Q6TXNnQWRkcmVzc0ludCDihpAgaGVyZSBpcyB0" +
+ "aGUgc3RhcnQKICAgIC8vICAgdmFsdWU6Q3VycmVuY3lDb2xsZWN0aW9uCiAgICAvLyAgIGlocl9mZWU6R3JhbXMKICAgIC8vICAgZndkX2ZlZTpHcmFtcwogICAgLy8g" +
+ "ICBjcmVhdGVkX2x0OnVpbnQ2NAogICAgLy8gICBjcmVhdGVkX2F0OnVpbnQzMgogICAgLy8gPSBDb21tb25Nc2dJbmZvUmVsYXhlZDsKCiAgICBMRE1TR0FERFIgICAv" +
+ "LyBsb2FkIGRlc3Q6TXNnQWRkcmVzc0ludAogICAgTERHUkFNUyAgICAgLy8gbG9hZCB2YWx1ZTpDdXJyZW5jeUNvbGxlY3Rpb24KICAgIE9ORQogICAgU0RTS0lQRklS" +
+ "U1QgLy8gc2tpcCBleHRyYSBjdXJyZW5jeSBjb2xsZWN0aW9uCiAgICBMREdSQU1TICAgICAvLyBsb2FkIGlocl9mZWUKICAgIExER1JBTVMgICAgIC8vIGxvYWQgZndk" +
+ "X2ZlZSwgd2UnbGwgYmUgdXNpbmcgdGhpcyEKICAgIERST1AgICAgICAgIC8vIGRyb3AgcmVtYWluaW5nIFNsaWNlICh3aXRoIGNyZWF0ZWRfbHQgYW5kIGNyZWF0ZWRf" +
+ "YXQpCgogICAgLy8gVGhlcmUgYXJlIDcgZW50cmllcyBvbiB0aGUgc3RhY2sg4oCUIGZpcnN0IDMgZmllbGRzIG9mIENvbnRleHQgcGx1cyA0IGxvYWRlZCBvbmVzLgog" +
+ "ICAgLy8gVGhlIHRvcG1vc3QgaXMgZndkX2ZlZSwgd2hpY2ggaXMgdGhlIG9ubHkgb25lIHdlJ3JlIGFmdGVyLCBzbyBsZXQncyBkcm9wIDYgZW50cmllcyBiZWxvdzoK" +
+ "ICAgIDYgMSBCTEtEUk9QMiAvLyBkcm9wIHRoZSBsb2FkZWQgdmFsdWVzIGFzIHdlbGwgYXMgdGhlIGZpcnN0IDMgZmllbGRzIG9mIENvbnRleHQKCiAgICBaRVJPICAg" +
+ "ICAgICAgICAgICAvLyBub3QgbWFzdGVyY2hhaW4KICAgIEdFVE9SSUdJTkFMRldERkVFIC8vIChmd2RfZmVlICogMl4xNikgLyBmaXJzdF9mcmFjLCB3aGVyZQogICAg" +
+ "ICAgICAgICAgICAgICAgICAgLy8gZmlyc3RfZnJhYyBpcyBhIHZhbHVlIGxpc3RlZCBpbiBjb25maWcgcGFyYW0gMjUKICAgICAgICAgICAgICAgICAgICAgIC8vIG9m" +
+ "IHRoZSBibG9ja2NoYWluOiBodHRwczovL3RvbnNjYW4ub3JnL2NvbmZpZyMyNQp9Cg==";
files["std/internal/contract.tact"] =
"Ly8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgYW4gYEludGAgdmFsdWUgb2Yg" +
"dGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgYGNvZGVgIGFuZCBgZGF0YWAgb2YgdGhlIGdpdmVuIGNvbnRyYWN0LiBUbyBhc3NlbWJsZSB0aGUgYGNvZGVgIGFuZCBgZGF0" +
@@ -929,257 +932,256 @@ files["std/internal/contract.tact"] =
"YXRlSW5pdCA9IGluaXRPZiBTb21lQ29udHJhY3QoKTsKLy8vICAgICBsZXQgYWNjb3VudElkOiBJbnQgPSBjb250cmFjdEhhc2goaW5pdFBrZy5jb2RlLCBpbml0UGtn" +
"LmRhdGEpOwovLy8gICAgIGxldCBiYXNlY2hhaW5BZGRyOiBBZGRyZXNzID0gbmV3QWRkcmVzcygwLCBhY2NvdW50SWQpOwovLy8gICAgIGxldCBiYXNlY2hhaW5BZGRy" +
"MjogQWRkcmVzcyA9IGNvbnRyYWN0QWRkcmVzc0V4dCgwLCBpbml0UGtnLmNvZGUsIGluaXRQa2cuZGF0YSk7Ci8vLwovLy8gICAgIGJhc2VjaGFpbkFkZHIgPT0gYmFz" +
- "ZWNoYWluQWRkcjI7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29tbW9u" +
- "I2NvbnRyYWN0aGFzaAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb21tb24jbmV3YWRkcmVzcwovLy8gKiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1jb21tb24jY29udHJhY3RhZGRyZXNzZXh0Ci8vLwphc20gZnVuIGNvbnRyYWN0SGFzaChjb2RlOiBDZWxsLCBkYXRhOiBDZWxsKTog" +
- "SW50IHsKICAgIC8vIEFjY29yZGluZyB0byB0aGUgaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9jZWxscyNjZWxscy1yZXByZXNlbnRhdGlvbiwKICAgIC8v" +
- "IHRoZSBsYXlvdXQgZm9yIHRoZSBCdWlsZGVyIHRvIGhhc2ggZ29lcyBhcyBmb2xsb3dzOgogICAgLy8gMSkgcmVmc19kZXNjcmlwdG9yOmJpdHM4IHwgYml0c19kZXNj" +
- "cmlwdG9yOmJpdHM4IHwgZGF0YTpiaXRzTgogICAgLy8KICAgIC8vICByZWZzX2Rlc2NyaXB0b3I6IHJlZl9jb3VudCArICgoZXhvdGljPyAmIDEpICogOCkgKyAobWFz" +
- "ayAqIDMyKQogICAgLy8gICAgICAgICAgICAgICAgICAgMiByZWZzIChjb2RlICsgZGF0YSksIG5vbi1leG90aWMsIHplcm8tbWFzawogICAgLy8KICAgIC8vICBiaXRz" +
- "X2Rlc2NyaXB0b3I6IGZsb29yKGJpdF9jb3VudCAvIDgpICsgY2VpbChiaXRfY291bnQsIDgpCiAgICAvLyAgICAgICAgICAgICAgICAgICBmbG9vciAoNSBiaXRzIC8g" +
- "OCkgKyBjZWlsKDUgYml0cyAvIDgpID0gMCArIDEgPSAxCiAgICAvLwogICAgLy8gIGRhdGE6IFswYjAwMTEwXSArIFswYjEwMF0gPSBbMGIwMDExMDEwMF0gPSAweDM0" +
- "IChkYXRhICsgYXVnbWVudGVkIGJpdHMpCiAgICAvLyAgICAgICAgMGIwMDExMCAtIGRhdGEgKHNwbGl0X2RlcHRoLCBzcGVjaWFsLCBjb2RlLCBkYXRhLCBMaWJyYXJ5" +
- "KQogICAgLy8gICAgICAgIDBiMTAwIC0gYXVnbWVudGVkIGJpdHMgKExlYWRpbmcgMSArIHplcm9lcyB0byBtYWtlIHNlY3Rpb24gbXVsdGlwbGUgb2YgZWlnaHQpCiAg" +
- "ICAvLwogICAgLy8gIFRoYXQgaXM6ICgyIDw8IDE2KSB8ICgxIDw8IDgpIHwgMHgzNCA9IDEzMTM4MCBmb3IgYWxsIHRocmVlLgogICAgLy8KICAgIC8vIDIpIGFuZCAz" +
- "KSBkZXB0aF9kZXNjcmlwdG9yczogQ0RFUFRIIG9mIGBjb2RlYCBhbmQgQ0RFUFRIIG9mIGBkYXRhYAogICAgLy8gNCkgYW5kIDUpIHJlZiBoYXNoZXM6IEhBU0hDVSBv" +
- "ZiBgY29kZWAgYW5kIEhBU0hDVSBvZiBgZGF0YWAKCiAgICAvLyBHcm91cCAxOiBDb21wdXRhdGlvbnMgYW5kIGFycmFuZ2VtZW50cwogICAgczAgUFVTSCBIQVNIQ1Ug" +
- "Ly8gYGRhdGFgIGhhc2gKICAgIHMyIFBVU0ggSEFTSENVIC8vIGBjb2RlYCBoYXNoCiAgICBTV0FQMgogICAgQ0RFUFRIICAgICAgICAgLy8gYGRhdGFgIGRlcHRoCiAg" +
- "ICBTV0FQCiAgICBDREVQVEggICAgICAgICAvLyBgY29kZWAgZGVwdGgKICAgIDEzMTM4MCBJTlQgICAgIC8vICgyIDw8IDE2KSB8ICgxIDw8IDgpIHwgMHgzNAoKICAg" +
- "IC8vIEdyb3VwIDI6IENvbXBvc2l0aW9uIG9mIHRoZSBCdWlsZGVyCiAgICBORVdDCiAgICAyNCBTVFUgIC8vIHN0b3JlIHJlZnNfZGVzY3JpcHRvciB8IGJpdHNfZGVz" +
- "Y3JpcHRvciB8IGRhdGEKICAgIDE2IFNUVSAgLy8gc3RvcmUgZGVwdGhfZGVzY3JpcHRvciBmb3IgYGNvZGVgCiAgICAxNiBTVFUgIC8vIHN0b3JlIGRlcHRoX2Rlc2Ny" +
- "aXB0b3IgZm9yIGBkYXRhYAogICAgMjU2IFNUVSAvLyBzdG9yZSBgY29kZWAgaGFzaAogICAgMjU2IFNUVSAvLyBzdG9yZSBgZGF0YWAgaGFzaAoKICAgIC8vIEdyb3Vw" +
- "IDM6IFNIQTI1NiBoYXNoIG9mIHRoZSByZXN1bHRpbmcgQnVpbGRlcgogICAgT05FIEhBU0hFWFRfU0hBMjU2Cn0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8g" +
- "Q29tcHV0ZXMgc21hcnQgY29udHJhY3QncyBgQWRkcmVzc2AgaW4gdGhlIGBjaGFpbmAgSUQgdXNpbmcgdGhlIGNvbnRyYWN0J3MgYGNvZGVgIGFuZCB0aGUgY29udHJh" +
- "Y3QncyBpbml0aWFsIHN0YXRlIGBkYXRhYC4gVXNlIHRoZSBgaW5pdE9mYCBleHByZXNzaW9uIHRvIG9idGFpbiB0aGUgaW5pdGlhbCBgY29kZWAgYW5kIGluaXRpYWwg" +
- "YGRhdGFgIG9mIGEgZ2l2ZW4gY29udHJhY3QuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZXNvbHZlIGNvbnN0YW50IHZhbHVlcyBpbiBjb21waWxlLXRp" +
- "bWUgd2hlbmV2ZXIgcG9zc2libGUuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBpbnZhbGlkIGBjaGFpbmAgSUQgKG5vdCAtMSBvciAwKSB0aGF0IGNhbiBi" +
- "ZSBkZXRlY3RlZCBpbiBjb21waWxlLXRpbWUgd2lsbCByZXN1bHQgaW4gYSBjb21waWxhdGlvbiBlcnJvci4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgp" +
- "IHsKLy8vICAgICBsZXQgaW5pdFBrZzogU3RhdGVJbml0ID0gaW5pdE9mIFNvbWVDb250cmFjdCgpOwovLy8gICAgIGxldCBoZXJlQmVEcmFnb25zOiBBZGRyZXNzID0g" +
- "Y29udHJhY3RBZGRyZXNzRXh0KDAsIGluaXRQa2cuY29kZSwgaW5pdFBrZy5kYXRhKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2Nz" +
- "LnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29tbW9uI2NvbnRyYWN0YWRkcmVzc2V4dAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4cHJlc3Np" +
- "b25zI2luaXRvZgovLy8KaW5saW5lIGZ1biBjb250cmFjdEFkZHJlc3NFeHQoY2hhaW46IEludCwgY29kZTogQ2VsbCwgZGF0YTogQ2VsbCk6IEFkZHJlc3MgewogICAg" +
- "bGV0IGhhc2ggPSBjb250cmFjdEhhc2goY29kZSwgZGF0YSk7CiAgICByZXR1cm4gbmV3QWRkcmVzcyhjaGFpbiwgaGFzaCk7Cn0KCi8vLyBTdHJ1Y3QgY29udGFpbmlu" +
- "ZyB0aGUgaW5pdGlhbCBzdGF0ZSwgaS5lLiBpbml0aWFsIGNvZGUgYW5kIGluaXRpYWwgZGF0YSBvZiB0aGUgZ2l2ZW4gY29udHJhY3QgdXBvbiBpdHMgZGVwbG95bWVu" +
- "dC4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhwcmVzc2lvbnMjaW5pdG9mCi8vLwpzdHJ1Y3QgU3RhdGVJbml0IHsKICAgIC8v" +
- "LyBJbml0aWFsIGNvZGUgb2YgdGhlIGNvbnRyYWN0IChjb21waWxlZCBiaXRjb2RlKQogICAgY29kZTogQ2VsbDsKCiAgICAvLy8gSW5pdGlhbCBkYXRhIG9mIHRoZSBj" +
- "b250cmFjdCAocGFyYW1ldGVycyBvZiBgaW5pdCgpYCBmdW5jdGlvbiBvciBjb250cmFjdCBwYXJhbWV0ZXJzKQogICAgZGF0YTogQ2VsbDsKfQoKLy8vIEdsb2JhbCBm" +
- "dW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjEuCi8vLyAKLy8vIEVmZmljaWVudGx5IGNvbXBhcmVzIGlmIHRoZSBnaXZlbiBhZGRyZXNzIG1hdGNoZXMg" +
- "dGhlIGJhc2VjaGFpbiBhZGRyZXNzIG9mIHRoZSBjb250cmFjdC4KLy8vIFJldHVybnMgdHJ1ZSBpZiBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lLCBmYWxzZSBvdGhlcndp" +
- "c2UuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBpbml0ID0gaW5pdE9mIFNvbWVDb250cmFjdCgpOwovLy8gICAgIGluaXQu" +
- "aGFzU2FtZUJhc2VjaGFpbkFkZHJlc3Moc2VuZGVyKCkpOyAvLyByZXR1cm5zIHRydWUgaWYgc2VuZGVyIG1hdGNoZXMgY29udHJhY3QncyBiYXNlY2hhaW4gYWRkcmVz" +
- "cwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBnYXMtb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGNvbXBhcmVkIHRvIGRpcmVj" +
- "dCBhZGRyZXNzIGNvbXBhcmlzb246Ci8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBpbml0ID0gaW5pdE9mIFNvbWVDb250cmFj" +
- "dCgpOwovLy8gICAgIHNlbmRlcigpID09IGNvbnRyYWN0QWRkcmVzcyhzZW5kZXIoKSk7IC8vIGxlc3MgZWZmaWNpZW50IGFwcHJvYWNoCi8vLyB9Ci8vLyBgYGAKLy8v" +
- "IAovLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gd29ya3Mgb25seSBmb3IgYmFzZWNoYWluIGFkZHJlc3NlcyEKLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2Rv" +
- "Y3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb21tb24jY29udHJhY3RhZGRyZXNzCi8vLyAKaW5saW5lIGV4dGVuZHMgZnVuIGhhc1NhbWVCYXNlY2hhaW5BZGRyZXNz" +
- "KHNlbGY6IFN0YXRlSW5pdCwgc2VuZGVyOiBBZGRyZXNzKTogQm9vbCB7CiAgICBsZXQgc2VuZGVyQWRkcmVzcyA9IHBhcnNlU3RkQWRkcmVzcyhzZW5kZXIuYXNTbGlj" +
- "ZSgpKS5hZGRyZXNzOwogICAgbGV0IGJhc2VBZGRyZXNzID0gY29udHJhY3RCYXNlY2hhaW5BZGRyZXNzKHNlbGYpOwogICAgcmV0dXJuIGJhc2VBZGRyZXNzLmhhc2gh" +
- "ISA9PSBzZW5kZXJBZGRyZXNzOwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENvbXB1dGVzIHNtYXJ0IGNvbnRyYWN0J3MgYEFkZHJlc3NgIGluIHRoZSB3" +
- "b3JrY2hhaW4gSUQgMCAoYmFzZWNoYWluKSB1c2luZyB0aGUgYFN0YXRlSW5pdGAgYHNgIG9mIHRoZSBjb250cmFjdC4gQWxpYXMgdG8gYGNvbnRyYWN0QWRkcmVzc0V4" +
- "dCgwLCBzLmNvZGUsIHMuZGF0YSlgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTdGF0ZUluaXQgPSBpbml0T2YgU29t" +
- "ZUNvbnRyYWN0KCk7Ci8vLyAgICAgbGV0IGZvdW5kTWVTb21lOiBBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzKHMpOwovLy8gICAgIGxldCBhbmRTb21lTW9yZTogQWRk" +
- "cmVzcyA9IGNvbnRyYWN0QWRkcmVzc0V4dCgwLCBzLmNvZGUsIHMuZGF0YSk7Ci8vLwovLy8gICAgIGZvdW5kTWVTb21lID09IGFuZFNvbWVNb3JlOyAvLyB0cnVlCi8v" +
- "LyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbW1vbiNjb250cmFjdGFkZHJlc3MKLy8vICog" +
- "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29tbW9uI2NvbnRyYWN0YWRkcmVzc2V4dAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9i" +
- "b29rL2V4cHJlc3Npb25zI2luaXRvZgovLy8KaW5saW5lIGZ1biBjb250cmFjdEFkZHJlc3MoczogU3RhdGVJbml0KTogQWRkcmVzcyB7CiAgICByZXR1cm4gY29udHJh" +
- "Y3RBZGRyZXNzRXh0KDAsIHMuY29kZSwgcy5kYXRhKTsKfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4KLy8vCi8vLyBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJy" +
- "ZW50IHNtYXJ0IGNvbnRyYWN0IGFzIGFuIGBBZGRyZXNzYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgbWVNeXNlbGZBbmRJ" +
- "OiBBZGRyZXNzID0gbXlBZGRyZXNzKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbW1vbiNt" +
- "eWFkZHJlc3MKLy8vCmFzbSBmdW4gbXlBZGRyZXNzKCk6IEFkZHJlc3MgeyBNWUFERFIgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4KLy8vCi8vLyBSZXR1cm5zIHRoZSBu" +
- "YW5vVG9uY29pbiBgSW50YCBiYWxhbmNlIG9mIHRoZSBzbWFydCBjb250cmFjdCBhcyBpdCB3YXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb21wdXRlIHBoYXNlIG9mIHRo" +
- "ZSBjdXJyZW50IHRyYW5zYWN0aW9uLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBpTmVlZEFEb2xsYTogSW50ID0gbXlCYWxh" +
- "bmNlKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbW1vbiNteWJhbGFuY2UKLy8vCmFzbSBm" +
- "dW4gbXlCYWxhbmNlKCk6IEludCB7IEJBTEFOQ0UgRklSU1QgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8g" +
- "UmV0dXJucyB0aGUgbmFub1RvbmNvaW4gYEludGAgYW1vdW50IG9mIGdhcyBjb25zdW1lZCBieSBUVk0gaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gZmFyLiBU" +
- "aGUgcmVzdWx0aW5nIHZhbHVlIGluY2x1ZGVzIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgp" +
- "IHsKLy8vICAgICBsZXQgZ2FzOiBJbnQgPSBnYXNDb25zdW1lZCgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9y" +
- "ZWYvY29yZS1hZHZhbmNlZCNnYXNjb25zdW1lZAovLy8KYXNtIGZ1biBnYXNDb25zdW1lZCgpOiBJbnQgeyBHQVNDT05TVU1FRCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9u" +
- "LiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBSZXR1cm5zIHRoZSBuYW5vVG9uY29pbiBgSW50YCBhbW91bnQgb2YgdGhlIGFjY3VtdWxhdGVkIHN0" +
- "b3JhZ2UgZmVlIGRlYnQuIFN0b3JhZ2UgZmVlcyBhcmUgZGVkdWN0ZWQgZnJvbSB0aGUgaW5jb21pbmcgbWVzc2FnZSB2YWx1ZSBiZWZvcmUgdGhlIG5ldyBjb250cmFj" +
- "dCBiYWxhbmNlIGlzIGNhbGN1bGF0ZWQuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGRlYnQ6IEludCA9IG15U3RvcmFnZUR1" +
- "ZSgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNteXN0b3JhZ2VkdWUKLy8vCmFz" +
- "bSBmdW4gbXlTdG9yYWdlRHVlKCk6IEludCB7IERVRVBBWU1FTlQgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwov" +
- "Ly8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgc3RvcmFnZSBmZWUgaW4gbmFub1RvbmNvaW5zIGBJbnRgIGZvciBzdG9yaW5nIGEgY29udHJhY3Qgd2l0aCBhIGdp" +
- "dmVuIG51bWJlciBvZiBgY2VsbHNgIGFuZCBgYml0c2AgZm9yIGEgbnVtYmVyIG9mIGBzZWNvbmRzYC4gVXNlcyB0aGUgcHJpY2VzIG9mIHRoZSBtYXN0ZXJjaGFpbiBp" +
- "ZiBgaXNNYXN0ZXJjaGFpbmAgaXMgYHRydWVgLCBvdGhlcndpc2UgdGhlIHByaWNlcyBvZiB0aGUgYmFzZWNoYWluLiBUaGUgY3VycmVudCBwcmljZXMgYXJlIG9idGFp" +
- "bmVkIGZyb20gdGhlIGNvbmZpZyBwYXJhbSAxOCBvZiBUT04gQmxvY2tjaGFpbi4KLy8vCi8vLyBOb3RlLCB0aGF0IHNwZWNpZnlpbmcgdmFsdWVzIG9mIGBjZWxsc2Ag" +
- "YW5kIGBiaXRzYCBoaWdoZXIgdGhhbiB0aGVpciBtYXhpbXVtIHZhbHVlcyBsaXN0ZWQgaW4gYWNjb3VudCBzdGF0ZSBsaW1pdHMgKGBtYXhfYWNjX3N0YXRlX2NlbGxz" +
- "YCBhbmQgYG1heF9hY2Nfc3RhdGVfYml0c2ApIHdpbGwgaGF2ZSB0aGUgc2FtZSByZXN1bHQgYXMgd2l0aCBzcGVjaWZ5aW5nIHRoZSBleGFjdCBsaW1pdHMuIEluIGFk" +
- "ZGl0aW9uLCBtYWtlIHN1cmUgeW91IHRha2UgaW50byBhY2NvdW50IHRoZSBkZWR1cGxpY2F0aW9uIG9mIGNlbGxzIHdpdGggdGhlIHNhbWUgaGFzaC4KLy8vCi8vLyBB" +
- "dHRlbXB0cyB0byBzcGVjaWZ5IG5lZ2F0aXZlIG51bWJlciBvZiBgY2VsbHNgLCBgYml0c2Agb3IgYHNlY29uZHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQg" +
- "Y29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmZWU6IElu" +
- "dCA9IGdldFN0b3JhZ2VGZWUoMV8wMDAsIDFfMDAwLCAxXzAwMCwgZmFsc2UpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNnZXRzdG9yYWdlZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dl" +
- "dHNpbXBsZXN0b3JhZ2VmZWUKLy8vCmFzbSBmdW4gZ2V0U3RvcmFnZUZlZShjZWxsczogSW50LCBiaXRzOiBJbnQsIHNlY29uZHM6IEludCwgaXNNYXN0ZXJjaGFpbjog" +
- "Qm9vbCk6IEludCB7IEdFVFNUT1JBR0VGRUUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQ2FsY3VsYXRl" +
- "cyBhbmQgcmV0dXJucyB0aGUgY29tcHV0ZSBmZWUgaW4gbmFub1RvbmNvaW5zIGBJbnRgIGZvciBhIHRyYW5zYWN0aW9uIHRoYXQgY29uc3VtZWQgYGdhc1VzZWRgIGFt" +
- "b3VudCBvZiBnYXMuIFVzZXMgdGhlIHByaWNlcyBvZiB0aGUgbWFzdGVyY2hhaW4gaWYgYGlzTWFzdGVyY2hhaW5gIGlzIGB0cnVlYCwgb3RoZXJ3aXNlIHRoZSBwcmlj" +
- "ZXMgb2YgdGhlIGJhc2VjaGFpbi4gVGhlIGN1cnJlbnQgcHJpY2VzIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBjb25maWcgcGFyYW0gMjAgZm9yIHRoZSBtYXN0ZXJjaGFp" +
- "biBhbmQgY29uZmlnIHBhcmFtIDIxIGZvciB0aGUgYmFzZWNoYWluIG9mIFRPTiBCbG9ja2NoYWluLgovLy8KLy8vIFdoZW4gdGhlIGBnYXNVc2VkYCBpcyBsZXNzIHRo" +
- "YW4gYSBjZXJ0YWluIHRocmVzaG9sZCBjYWxsZWQgYGZsYXRfZ2FzX2xpbWl0YCwgdGhlcmUncyBhIG1pbmltdW0gcHJpY2UgdG8gcGF5IGJhc2VkIG9uIHRoZSB2YWx1" +
- "ZSBvZiBgZmxhdF9nYXNfcHJpY2VgLiBUaGUgbGVzcyBnYXMgaXMgdXNlZCBiZWxvdyB0aGlzIHRocmVzaG9sZCwgdGhlIGhpZ2hlciB0aGUgbWluaW11bSBwcmljZSB3" +
- "aWxsIGJlLiBTZWUgdGhlIGV4YW1wbGUgZm9yIGBnZXRTaW1wbGVDb21wdXRlRmVlKClgIHRvIGRlcml2ZSB0aGF0IHRocmVzaG9sZC4KLy8vCi8vLyBBdHRlbXB0cyB0" +
- "byBzcGVjaWZ5IG5lZ2F0aXZlIHZhbHVlIG9mIGBnYXNVc2VkYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVj" +
- "dGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZmVlOiBJbnQgPSBnZXRDb21wdXRlRmVlKDFfMDAwLCBmYWxz" +
- "ZSk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldGNvbXB1dGVmZWUKLy8vCmFz" +
- "bSBmdW4gZ2V0Q29tcHV0ZUZlZShnYXNVc2VkOiBJbnQsIGlzTWFzdGVyY2hhaW46IEJvb2wpOiBJbnQgeyBHRVRHQVNGRUUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4g" +
- "QXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gU2ltaWxhciB0byBgZ2V0Q29tcHV0ZUZlZSgpYCwgYnV0IHdpdGhvdXQgdGhlIGBmbGF0X2dhc19wcmlj" +
- "ZWAsIGkuZS4gd2l0aG91dCBhIG1pbmltdW0gcHJpY2UgdG8gcGF5IGlmIHRoZSBgZ2FzVXNlZGAgaXMgbGVzcyB0aGFuIGEgY2VydGFpbiB0aHJlc2hvbGQgY2FsbGVk" +
- "IGBmbGF0X2dhc19saW1pdGAuIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgb25seSB0aGUgYGdhc1VzZWRgIHRpbWVzIHRoZSBjdXJyZW50IGdhcyBwcmljZS4KLy8vCi8v" +
- "LyBBdHRlbXB0cyB0byBzcGVjaWZ5IG5lZ2F0aXZlIG51bWJlciBvZiBgY2VsbHNgLCBgYml0c2Agb3IgYHNlY29uZHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4" +
- "aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmZWUg" +
- "PSBnZXRDb21wdXRlRmVlKDAsIGZhbHNlKTsKLy8vICAgICBsZXQgZmVlTm9GbGF0ID0gZ2V0U2ltcGxlQ29tcHV0ZUZlZSgwLCBmYWxzZSk7Ci8vLyAgICAgbGV0IG1h" +
- "eEZsYXRQcmljZSA9IGZlZSAtIGZlZU5vRmxhdDsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
- "cmUtYWR2YW5jZWQjZ2V0c2ltcGxlc3RvcmFnZWZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNnZXRzdG9yYWdlZmVl" +
- "Ci8vLwphc20gZnVuIGdldFNpbXBsZUNvbXB1dGVGZWUoZ2FzVXNlZDogSW50LCBpc01hc3RlcmNoYWluOiBCb29sKTogSW50IHsgR0VUR0FTRkVFU0lNUExFIH0KCi8v" +
- "LyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGZvcndhcmQgZmVlIGlu" +
- "IG5hbm9Ub25jb2lucyBgSW50YCBmb3IgYW4gb3V0Z29pbmcgbWVzc2FnZSBjb25zaXN0aW5nIG9mIGEgZ2l2ZW4gbnVtYmVyIG9mIGBjZWxsc2AgYW5kIGBiaXRzYC4g" +
- "VXNlcyB0aGUgcHJpY2VzIG9mIHRoZSBtYXN0ZXJjaGFpbiBpZiBgaXNNYXN0ZXJjaGFpbmAgaXMgYHRydWV7OnRhY3R9YCwgb3RoZXJ3aXNlIHRoZSBwcmljZXMgb2Yg" +
- "dGhlIGJhc2VjaGFpbi4gVGhlIGN1cnJlbnQgcHJpY2VzIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBjb25maWcgcGFyYW0gMjQgZm9yIHRoZSBtYXN0ZXJjaGFpbiBhbmQg" +
- "Y29uZmlnIHBhcmFtIDI1IGZvciB0aGUgYmFzZWNoYWluIG9mIFRPTiBCbG9ja2NoYWluLgovLy8KLy8vIElmIGJvdGggdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0" +
- "aW9uIGFkZHJlc3NlcyBhcmUgaW4gdGhlIGJhc2VjaGFpbiwgdGhlbiBzcGVjaWZ5IGBpc01hc3RlcmNoYWluYCBhcyBgZmFsc2VgLiBPdGhlcndpc2UsIHNwZWNpZnkg" +
- "YHRydWVgLgovLy8KLy8vIE5vdGUsIHRoYXQgc3BlY2lmeWluZyB2YWx1ZXMgb2YgYGNlbGxzYCBhbmQgYGJpdHNgIGhpZ2hlciB0aGFuIHRoZWlyIG1heGltdW0gdmFs" +
- "dWVzIGxpc3RlZCBpbiBhY2NvdW50IHN0YXRlIGxpbWl0cyAoYG1heF9tc2dfY2VsbHNgIGFuZCBgbWF4X21zZ19iaXRzYCkgd2lsbCBoYXZlIHRoZSBzYW1lIHJlc3Vs" +
- "dCBhcyB3aXRoIHNwZWNpZnlpbmcgdGhlIGV4YWN0IGxpbWl0cy4KLy8vCi8vLyBIb3dldmVyLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZXMgb2YgYGNlbGxzYCBhbmQg" +
- "YGJpdHNgLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyBhZGRzIHRoZSBtaW5pbXVtIHByaWNlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBgbHVtcF9wcmljZWAuIFNlZSB0aGUg" +
- "ZXhhbXBsZSBmb3IgW2BnZXRTaW1wbGVGb3J3YXJkRmVlKCl7OnRhY3R9YF0oI2dldHNpbXBsZWZvcndhcmRmZWUpIHRvIGRlcml2ZSBpdC4gSW4gYWRkaXRpb24sIG1h" +
- "a2Ugc3VyZSB5b3UgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRlZHVwbGljYXRpb24gb2YgY2VsbHMgd2l0aCB0aGUgc2FtZSBoYXNoLCBzaW5jZSBmb3IgZXhhbXBsZSB0" +
- "aGUgcm9vdCBjZWxsIGFuZCBpdHMgZGF0YSBiaXRzIGRvbid0IGNvdW50IHRvd2FyZHMgdGhlIGZvcndhcmQgZmVlIGFuZCBhcmUgY292ZXJlZCBieSB0aGUgYGx1bXBf" +
- "cHJpY2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2Agb3IgYGJpdHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRo" +
- "IGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBm" +
- "ZWU6IEludCA9IGdldEZvcndhcmRGZWUoMV8wMDAsIDFfMDAwLCBmYWxzZSk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0" +
- "LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldGZvcndhcmRmZWUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0" +
- "c2ltcGxlZm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNnZXRvcmlnaW5hbGZ3ZGZlZQovLy8KYXNtIGZ1" +
- "biBnZXRGb3J3YXJkRmVlKGNlbGxzOiBJbnQsIGJpdHM6IEludCwgaXNNYXN0ZXJjaGFpbjogQm9vbCk6IEludCB7IEdFVEZPUldBUkRGRUUgfQoKLy8vIEdsb2JhbCBm" +
- "dW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gU2ltaWxhciB0byBgZ2V0Rm9yd2FyZEZlZSgpYCwgYnV0IHdpdGhvdXQgdGhlIGBsdW1w" +
- "X3ByaWNlYCwgaS5lLiB3aXRob3V0IHRoZSBtaW5pbXVtIHByaWNlIHRvIHBheSByZWdhcmRsZXNzIG9mIHRoZSBhbW91bnQgb2YgYGNlbGxzYCBvciBgYml0c2AuIENh" +
- "bGN1bGF0ZXMgYW5kIHJldHVybnMgb25seSB0aGUgYGNlbGxzYCB0aW1lcyB0aGUgY3VycmVudCBjZWxsIHByaWNlIHBsdXMgYGJpdHNgIHRpbWVzIHRoZSBjdXJyZW50" +
- "IGJpdCBwcmljZS4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IG5lZ2F0aXZlIG51bWJlciBvZiBgY2VsbHNgIG9yIGBiaXRzYCB0aHJvdyBhbiBleGNlcHRpb24g" +
- "d2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBs" +
- "ZXQgZmVlID0gZ2V0Rm9yd2FyZEZlZSgxXzAwMCwgMV8wMDAsIGZhbHNlKTsKLy8vICAgICBsZXQgZmVlTm9MdW1wID0gZ2V0U2ltcGxlRm9yd2FyZEZlZSgxXzAwMCwg" +
- "MV8wMDAsIGZhbHNlKTsKLy8vICAgICBsZXQgbHVtcFByaWNlID0gZmVlIC0gZmVlTm9MdW1wOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczov" +
- "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNnZXRzaW1wbGVmb3J3YXJkZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9j" +
- "b3JlLWFkdmFuY2VkI2dldGZvcndhcmRmZWUKLy8vCmFzbSBmdW4gZ2V0U2ltcGxlRm9yd2FyZEZlZShjZWxsczogSW50LCBiaXRzOiBJbnQsIGlzTWFzdGVyY2hhaW46" +
- "IEJvb2wpOiBJbnQgeyBHRVRGT1JXQVJERkVFU0lNUExFIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIENh" +
- "bGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIHNvLWNhbGxlZCBfb3JpZ2luYWxfIGZvcndhcmQgZmVlIGluIG5hbm9Ub25jb2lucyBgSW50YCBmb3IgYW4gb3V0Z29pbmcg" +
- "bWVzc2FnZSBiYXNlZCBvbiB0aGUgYGZ3ZEZlZWAgb2J0YWluZWQgZnJvbSB0aGUgaW5jb21pbmcgbWVzc2FnZS4gSWYgYm90aCB0aGUgc291cmNlIGFuZCB0aGUgZGVz" +
- "dGluYXRpb24gYWRkcmVzc2VzIGFyZSBpbiB0aGUgYmFzZWNoYWluLCB0aGVuIHNwZWNpZnkgYGlzTWFzdGVyY2hhaW5gIGFzIGBmYWxzZWAuIE90aGVyd2lzZSwgc3Bl" +
- "Y2lmeSBgdHJ1ZWAuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgd2hlbiB0aGUgb3V0Z29pbmcgbWVzc2FnZSBkZXBlbmRzIGhlYXZpbHkgb24gdGhlIHN0" +
- "cnVjdHVyZSBvZiB0aGUgaW5jb21pbmcgbWVzc2FnZSwgc28gbXVjaCBzbyB0aGF0IHlvdSBjYW5ub3QgZnVsbHkgcHJlZGljdCB0aGUgZmVlIHVzaW5nIGBnZXRGb3J3" +
- "YXJkRmVlKClgIGFsb25lLiBFdmVuIGlmIHlvdSBjb3VsZCwgY2FsY3VsYXRpbmcgdGhlIGV4YWN0IGZlZSB3aXRoIG5hbm9Ub25jb2luLWxldmVsIHByZWNpc2lvbiBj" +
- "YW4gYmUgdmVyeSBleHBlbnNpdmUsIHNvIHRoZSBhcHByb3hpbWF0ZSB2YWx1ZSBnaXZlbiBieSB0aGlzIGZ1bmN0aW9uIGlzIG9mdGVuIGdvb2QgZW5vdWdoLgovLy8K" +
- "Ly8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBgZndkRmVlYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVn" +
- "ZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZndkRmVlOiBJbnQgPSBjb250ZXh0" +
- "KCkucmVhZEZvcndhcmRGZWUoKTsKLy8vICAgICBsZXQgb3JpZ0ZlZTogSW50ID0gZ2V0T3JpZ2luYWxGd2RGZWUoZmVlLCBmYWxzZSk7Ci8vLyB9Ci8vLyBgYGAKLy8v" +
- "Ci8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldG9yaWdpbmFsZndkZmVlCi8vLyAqIGh0dHBzOi8vZG9j" +
- "cy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI2dldGZvcndhcmRmZWUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5j" +
- "ZWQjY29udGV4dHJlYWRmb3J3YXJkZmVlCi8vLwphc20gZnVuIGdldE9yaWdpbmFsRndkRmVlKGZ3ZEZlZTogSW50LCBpc01hc3RlcmNoYWluOiBCb29sKTogSW50IHsg" +
- "R0VUT1JJR0lOQUxGV0RGRUUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gUmV0dXJucyB0aGUgYEludGAg" +
- "dmFsdWUgb2YgdGhlIGxvZ2ljYWwgdGltZSBvZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAg" +
- "ICBsZXQgbHQ6IEludCA9IGN1ckx0KCk7Ci8vLyAgICAgbmF0aXZlUmFuZG9taXplKGx0KTsgLy8gZXF1aXZhbGVudCB0byBjYWxsaW5nIG5hdGl2ZVJhbmRvbWl6ZUx0" +
- "KCkKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjY3VybHQKLy8vICogaHR0" +
- "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjbmF0aXZlcmFuZG9taXplCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9j" +
- "b3JlLWFkdmFuY2VkI25hdGl2ZXJhbmRvbWl6ZWx0Ci8vLwphc20gZnVuIGN1ckx0KCk6IEludCB7IExUSU1FIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJs" +
- "ZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFJldHVybnMgdGhlIGBJbnRgIHZhbHVlIG9mIHRoZSBzdGFydGluZyBsb2dpY2FsIHRpbWUgb2YgdGhlIGN1cnJlbnQg" +
- "YmxvY2suCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHRpbWU6IEludCA9IGJsb2NrTHQoKTsKLy8vIH0KLy8vIGBgYAovLy8K" +
- "Ly8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjYmxvY2tsdAovLy8KYXNtIGZ1biBibG9ja0x0KCk6IEludCB7IEJMT0NL" +
- "TFQgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2V0cyB0aGUgYGdhc19saW1pdGAgdG8gdGhlIGBJbnRg" +
- "IGBsaW1pdGAgYW5kIHJlc2V0cyB0aGUgYGdhc19jcmVkaXRgIHRvIDAuIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoZSBgbGltaXRgIGhpZ2hlciB0aGFuIHRoZSBtYXhp" +
- "bXVtIGFsbG93ZWQgdmFsdWUgb2YgMl42MyAtIDEgd2lsbCBoYXZlIHRoZSBzYW1lIHJlc3VsdCBhcyB3aXRoIHNwZWNpZnlpbmcgdGhhdCBleGFjdCBtYXhpbXVtIG9y" +
- "IGNhbGxpbmcgYGFjY2VwdE1lc3NhZ2UoKWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIG9yIGluc3VmZmljaWVudCB2YWx1ZSBvZiBgbGlt" +
- "aXRgIHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIC0xNDogYE91dCBvZiBnYXMgZXJyb3JgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFt" +
- "cGxlKCkgewovLy8gICAgIHNldEdhc0xpbWl0KDQyMDAwKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
- "cmUtYWR2YW5jZWQjc2V0Z2FzbGltaXQKLy8vCmFzbSBmdW4gc2V0R2FzTGltaXQobGltaXQ6IEludCkgeyBTRVRHQVNMSU1JVCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9u" +
- "LiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBHZW5lcmF0ZXMgYW5kIHJldHVybnMgYW4gdW5zaWduZWQgMjU2LWJpdCBgSW50YCBzZWVkIGZvciB0" +
- "aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuIFRoZSByZXN1bHRpbmcgc2VlZCBpcyBjb21tb25seSB1c2VkIHdpdGggdGhlIGBzZXRTZWVkKClgIGFuZCBgbmF0aXZl" +
- "UmFuZG9taXplKClgIGZ1bmN0aW9ucy4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgc2VlZDogSW50ID0gZ2V0U2VlZCgpOwov" +
- "Ly8gICAgIHNldFNlZWQoc2VlZCk7IC8vIGZyb20gbm93IG9uIHRoZSByZXN1bHRzIG9mIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi8vLyAgICAgICAgICAg" +
- "ICAgICAgICAgLy8gYXJlIGNvbXBsZXRlbHkgZGV0ZXJtaW5lZCBieSB0aGUgc2VlZCwgd2hpY2ggY2FuIGJlIGhhbmR5IGluIHRlc3RzLAovLy8gICAgICAgICAgICAg" +
- "ICAgICAgIC8vIGJ1dCBtdXN0IG5vdCBiZSB1c2VkIGluIHByb2R1Y3Rpb24gY29kZSEKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2Nz" +
- "LnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjZ2V0c2VlZAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNzZXRz" +
- "ZWVkCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWFkdmFuY2VkI25hdGl2ZXJhbmRvbWl6ZQovLy8KYXNtIGZ1biBnZXRTZWVkKCk6IElu" +
- "dCB7IFJBTkRTRUVEIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNldHMgdGhlIHNlZWQgb2YgdGhlIHJh" +
- "bmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRvIHRoZSB1bnNpZ25lZCAyNTYtYml0IGBJbnRgIGBzZWVkYCB3aGljaCBjYW4gYmUgb2J0YWluZWQgd2l0aCB0aGUgYGdldFNl" +
- "ZWQoKWAgZnVuY3Rpb24uCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIHZhbHVlIG9mIGBzZWVkYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBl" +
- "eGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgc2Vl" +
- "ZDogSW50ID0gZ2V0U2VlZCgpOwovLy8gICAgIHNldFNlZWQoc2VlZCk7IC8vIGZyb20gbm93IG9uIHRoZSByZXN1bHRzIG9mIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2Vu" +
- "ZXJhdG9yCi8vLyAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGNvbXBsZXRlbHkgZGV0ZXJtaW5lZCBieSB0aGUgc2VlZCwgd2hpY2ggY2FuIGJlIGhhbmR5IGluIHRl" +
- "c3RzLAovLy8gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBtdXN0IG5vdCBiZSB1c2VkIGluIHByb2R1Y3Rpb24gY29kZSEKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNl" +
- "ZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjc2V0c2VlZAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9y" +
- "ZWYvY29yZS1hZHZhbmNlZCNnZXRzZWVkCi8vLwphc20gZnVuIHNldFNlZWQoc2VlZDogSW50KSB7IFNFVFJBTkQgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxh" +
- "YmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gUmV0dXJucyB0aGUgc21hcnQgY29udHJhY3QgY29kZSBgQ2VsbGAgb2J0YWluZWQgZnJvbSB0aGUgYGM3YCByZWdp" +
- "c3Rlci4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgY29kZTogQ2VsbCA9IG15Q29kZSgpOwovLy8gfQovLy8gYGBgCi8vLwov" +
- "Ly8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNteWNvZGUKLy8vCmFzbSBmdW4gbXlDb2RlKCk6IENlbGwgeyBNWUNPREUg" +
- "fQo=";
+ "ZWNoYWluQWRkcjI7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWRkcmVz" +
+ "c2VzI2NvbnRyYWN0aGFzaAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZGRyZXNzZXMjbmV3YWRkcmVzcwovLy8gKiBodHRwczovL2Rv" +
+ "Y3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZGRyZXNzZXMjY29udHJhY3RhZGRyZXNzZXh0Ci8vLwphc20gZnVuIGNvbnRyYWN0SGFzaChjb2RlOiBDZWxsLCBkYXRh" +
+ "OiBDZWxsKTogSW50IHsKICAgIC8vIEFjY29yZGluZyB0byB0aGUgaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9jZWxscyNjZWxscy1yZXByZXNlbnRhdGlv" +
+ "biwKICAgIC8vIHRoZSBsYXlvdXQgZm9yIHRoZSBCdWlsZGVyIHRvIGhhc2ggZ29lcyBhcyBmb2xsb3dzOgogICAgLy8gMSkgcmVmc19kZXNjcmlwdG9yOmJpdHM4IHwg" +
+ "Yml0c19kZXNjcmlwdG9yOmJpdHM4IHwgZGF0YTpiaXRzTgogICAgLy8KICAgIC8vICByZWZzX2Rlc2NyaXB0b3I6IHJlZl9jb3VudCArICgoZXhvdGljPyAmIDEpICog" +
+ "OCkgKyAobWFzayAqIDMyKQogICAgLy8gICAgICAgICAgICAgICAgICAgMiByZWZzIChjb2RlICsgZGF0YSksIG5vbi1leG90aWMsIHplcm8tbWFzawogICAgLy8KICAg" +
+ "IC8vICBiaXRzX2Rlc2NyaXB0b3I6IGZsb29yKGJpdF9jb3VudCAvIDgpICsgY2VpbChiaXRfY291bnQsIDgpCiAgICAvLyAgICAgICAgICAgICAgICAgICBmbG9vciAo" +
+ "NSBiaXRzIC8gOCkgKyBjZWlsKDUgYml0cyAvIDgpID0gMCArIDEgPSAxCiAgICAvLwogICAgLy8gIGRhdGE6IFswYjAwMTEwXSArIFswYjEwMF0gPSBbMGIwMDExMDEw" +
+ "MF0gPSAweDM0IChkYXRhICsgYXVnbWVudGVkIGJpdHMpCiAgICAvLyAgICAgICAgMGIwMDExMCAtIGRhdGEgKHNwbGl0X2RlcHRoLCBzcGVjaWFsLCBjb2RlLCBkYXRh" +
+ "LCBMaWJyYXJ5KQogICAgLy8gICAgICAgIDBiMTAwIC0gYXVnbWVudGVkIGJpdHMgKExlYWRpbmcgMSArIHplcm9lcyB0byBtYWtlIHNlY3Rpb24gbXVsdGlwbGUgb2Yg" +
+ "ZWlnaHQpCiAgICAvLwogICAgLy8gIFRoYXQgaXM6ICgyIDw8IDE2KSB8ICgxIDw8IDgpIHwgMHgzNCA9IDEzMTM4MCBmb3IgYWxsIHRocmVlLgogICAgLy8KICAgIC8v" +
+ "IDIpIGFuZCAzKSBkZXB0aF9kZXNjcmlwdG9yczogQ0RFUFRIIG9mIGBjb2RlYCBhbmQgQ0RFUFRIIG9mIGBkYXRhYAogICAgLy8gNCkgYW5kIDUpIHJlZiBoYXNoZXM6" +
+ "IEhBU0hDVSBvZiBgY29kZWAgYW5kIEhBU0hDVSBvZiBgZGF0YWAKCiAgICAvLyBHcm91cCAxOiBDb21wdXRhdGlvbnMgYW5kIGFycmFuZ2VtZW50cwogICAgczAgUFVT" +
+ "SCBIQVNIQ1UgLy8gYGRhdGFgIGhhc2gKICAgIHMyIFBVU0ggSEFTSENVIC8vIGBjb2RlYCBoYXNoCiAgICBTV0FQMgogICAgQ0RFUFRIICAgICAgICAgLy8gYGRhdGFg" +
+ "IGRlcHRoCiAgICBTV0FQCiAgICBDREVQVEggICAgICAgICAvLyBgY29kZWAgZGVwdGgKICAgIDEzMTM4MCBJTlQgICAgIC8vICgyIDw8IDE2KSB8ICgxIDw8IDgpIHwg" +
+ "MHgzNAoKICAgIC8vIEdyb3VwIDI6IENvbXBvc2l0aW9uIG9mIHRoZSBCdWlsZGVyCiAgICBORVdDCiAgICAyNCBTVFUgIC8vIHN0b3JlIHJlZnNfZGVzY3JpcHRvciB8" +
+ "IGJpdHNfZGVzY3JpcHRvciB8IGRhdGEKICAgIDE2IFNUVSAgLy8gc3RvcmUgZGVwdGhfZGVzY3JpcHRvciBmb3IgYGNvZGVgCiAgICAxNiBTVFUgIC8vIHN0b3JlIGRl" +
+ "cHRoX2Rlc2NyaXB0b3IgZm9yIGBkYXRhYAogICAgMjU2IFNUVSAvLyBzdG9yZSBgY29kZWAgaGFzaAogICAgMjU2IFNUVSAvLyBzdG9yZSBgZGF0YWAgaGFzaAoKICAg" +
+ "IC8vIEdyb3VwIDM6IFNIQTI1NiBoYXNoIG9mIHRoZSByZXN1bHRpbmcgQnVpbGRlcgogICAgT05FIEhBU0hFWFRfU0hBMjU2Cn0KCi8vLyBHbG9iYWwgZnVuY3Rpb24u" +
+ "Ci8vLwovLy8gQ29tcHV0ZXMgc21hcnQgY29udHJhY3QncyBgQWRkcmVzc2AgaW4gdGhlIGBjaGFpbmAgSUQgdXNpbmcgdGhlIGNvbnRyYWN0J3MgYGNvZGVgIGFuZCB0" +
+ "aGUgY29udHJhY3QncyBpbml0aWFsIHN0YXRlIGBkYXRhYC4gVXNlIHRoZSBgaW5pdE9mYCBleHByZXNzaW9uIHRvIG9idGFpbiB0aGUgaW5pdGlhbCBgY29kZWAgYW5k" +
+ "IGluaXRpYWwgYGRhdGFgIG9mIGEgZ2l2ZW4gY29udHJhY3QuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZXNvbHZlIGNvbnN0YW50IHZhbHVlcyBpbiBj" +
+ "b21waWxlLXRpbWUgd2hlbmV2ZXIgcG9zc2libGUuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhbiBpbnZhbGlkIGBjaGFpbmAgSUQgKG5vdCAtMSBvciAwKSB0" +
+ "aGF0IGNhbiBiZSBkZXRlY3RlZCBpbiBjb21waWxlLXRpbWUgd2lsbCByZXN1bHQgaW4gYSBjb21waWxhdGlvbiBlcnJvci4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4g" +
+ "ZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgaW5pdFBrZzogU3RhdGVJbml0ID0gaW5pdE9mIFNvbWVDb250cmFjdCgpOwovLy8gICAgIGxldCBoZXJlQmVEcmFnb25zOiBB" +
+ "ZGRyZXNzID0gY29udHJhY3RBZGRyZXNzRXh0KDAsIGluaXRQa2cuY29kZSwgaW5pdFBrZy5kYXRhKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0" +
+ "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWRkcmVzc2VzI2NvbnRyYWN0YWRkcmVzc2V4dAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9i" +
+ "b29rL2V4cHJlc3Npb25zI2luaXRvZgovLy8KaW5saW5lIGZ1biBjb250cmFjdEFkZHJlc3NFeHQoY2hhaW46IEludCwgY29kZTogQ2VsbCwgZGF0YTogQ2VsbCk6IEFk" +
+ "ZHJlc3MgewogICAgbGV0IGhhc2ggPSBjb250cmFjdEhhc2goY29kZSwgZGF0YSk7CiAgICByZXR1cm4gbmV3QWRkcmVzcyhjaGFpbiwgaGFzaCk7Cn0KCi8vLyBTdHJ1" +
+ "Y3QgY29udGFpbmluZyB0aGUgaW5pdGlhbCBzdGF0ZSwgaS5lLiBpbml0aWFsIGNvZGUgYW5kIGluaXRpYWwgZGF0YSBvZiB0aGUgZ2l2ZW4gY29udHJhY3QgdXBvbiBp" +
+ "dHMgZGVwbG95bWVudC4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhwcmVzc2lvbnMjaW5pdG9mCi8vLwpzdHJ1Y3QgU3RhdGVJ" +
+ "bml0IHsKICAgIC8vLyBJbml0aWFsIGNvZGUgb2YgdGhlIGNvbnRyYWN0IChjb21waWxlZCBiaXRjb2RlKQogICAgY29kZTogQ2VsbDsKCiAgICAvLy8gSW5pdGlhbCBk" +
+ "YXRhIG9mIHRoZSBjb250cmFjdCAocGFyYW1ldGVycyBvZiBgaW5pdCgpYCBmdW5jdGlvbiBvciBjb250cmFjdCBwYXJhbWV0ZXJzKQogICAgZGF0YTogQ2VsbDsKfQoK" +
+ "Ly8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjEuCi8vLwovLy8gRWZmaWNpZW50bHkgY29tcGFyZXMgaWYgdGhlIGdpdmVuIGFkZHJl" +
+ "c3MgbWF0Y2hlcyB0aGUgYmFzZWNoYWluIGFkZHJlc3Mgb2YgdGhlIGNvbnRyYWN0LgovLy8gUmV0dXJucyB0cnVlIGlmIGFkZHJlc3NlcyBhcmUgdGhlIHNhbWUsIGZh" +
+ "bHNlIG90aGVyd2lzZS4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgaW5pdCA9IGluaXRPZiBTb21lQ29udHJhY3QoKTsKLy8v" +
+ "ICAgICBpbml0Lmhhc1NhbWVCYXNlY2hhaW5BZGRyZXNzKHNlbmRlcigpKTsgLy8gcmV0dXJucyB0cnVlIGlmIHNlbmRlciBtYXRjaGVzIGNvbnRyYWN0J3MgYmFzZWNo" +
+ "YWluIGFkZHJlc3MKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBnYXMtb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGNvbXBhcmVk" +
+ "IHRvIGRpcmVjdCBhZGRyZXNzIGNvbXBhcmlzb246Ci8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGluaXQgPSBpbml0T2YgU29t" +
+ "ZUNvbnRyYWN0KCk7Ci8vLyAgICAgc2VuZGVyKCkgPT0gY29udHJhY3RBZGRyZXNzKHNlbmRlcigpKTsgLy8gbGVzcyBlZmZpY2llbnQgYXBwcm9hY2gKLy8vIH0KLy8v" +
+ "IGBgYAovLy8KLy8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIGJhc2VjaGFpbiBhZGRyZXNzZXMhCi8vLwovLy8gU2VlOgovLy8gKiBodHRw" +
+ "czovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZGRyZXNzZXMjY29udHJhY3RhZGRyZXNzCi8vLwppbmxpbmUgZXh0ZW5kcyBmdW4gaGFzU2FtZUJhc2VjaGFp" +
+ "bkFkZHJlc3Moc2VsZjogU3RhdGVJbml0LCBzZW5kZXI6IEFkZHJlc3MpOiBCb29sIHsKICAgIGxldCBzZW5kZXJBZGRyZXNzID0gcGFyc2VTdGRBZGRyZXNzKHNlbmRl" +
+ "ci5hc1NsaWNlKCkpLmFkZHJlc3M7CiAgICBsZXQgYmFzZUFkZHJlc3MgPSBjb250cmFjdEJhc2VjaGFpbkFkZHJlc3Moc2VsZik7CiAgICByZXR1cm4gYmFzZUFkZHJl" +
+ "c3MuaGFzaCEhID09IHNlbmRlckFkZHJlc3M7Cn0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gQ29tcHV0ZXMgc21hcnQgY29udHJhY3QncyBgQWRkcmVzc2Ag" +
+ "aW4gdGhlIHdvcmtjaGFpbiBJRCAwIChiYXNlY2hhaW4pIHVzaW5nIHRoZSBgU3RhdGVJbml0YCBgc2Agb2YgdGhlIGNvbnRyYWN0LiBBbGlhcyB0byBgY29udHJhY3RB" +
+ "ZGRyZXNzRXh0KDAsIHMuY29kZSwgcy5kYXRhKWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFN0YXRlSW5pdCA9IGlu" +
+ "aXRPZiBTb21lQ29udHJhY3QoKTsKLy8vICAgICBsZXQgZm91bmRNZVNvbWU6IEFkZHJlc3MgPSBjb250cmFjdEFkZHJlc3Mocyk7Ci8vLyAgICAgbGV0IGFuZFNvbWVN" +
+ "b3JlOiBBZGRyZXNzID0gY29udHJhY3RBZGRyZXNzRXh0KDAsIHMuY29kZSwgcy5kYXRhKTsKLy8vCi8vLyAgICAgZm91bmRNZVNvbWUgPT0gYW5kU29tZU1vcmU7IC8v" +
+ "IHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWRkcmVzc2VzI2NvbnRyYWN0YWRk" +
+ "cmVzcwovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZGRyZXNzZXMjY29udHJhY3RhZGRyZXNzZXh0Ci8vLyAqIGh0dHBzOi8vZG9jcy50" +
+ "YWN0LWxhbmcub3JnL2Jvb2svZXhwcmVzc2lvbnMjaW5pdG9mCi8vLwppbmxpbmUgZnVuIGNvbnRyYWN0QWRkcmVzcyhzOiBTdGF0ZUluaXQpOiBBZGRyZXNzIHsKICAg" +
+ "IHJldHVybiBjb250cmFjdEFkZHJlc3NFeHQoMCwgcy5jb2RlLCBzLmRhdGEpOwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIFJldHVybnMgdGhlIGFkZHJl" +
+ "c3Mgb2YgdGhlIGN1cnJlbnQgc21hcnQgY29udHJhY3QgYXMgYW4gYEFkZHJlc3NgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxl" +
+ "dCBtZU15c2VsZkFuZEk6IEFkZHJlc3MgPSBteUFkZHJlc3MoKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" +
+ "L2NvcmUtY29udGV4dHN0YXRlI215YWRkcmVzcwovLy8KYXNtIGZ1biBteUFkZHJlc3MoKTogQWRkcmVzcyB7IE1ZQUREUiB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgov" +
+ "Ly8KLy8vIFJldHVybnMgdGhlIG5hbm9Ub25jb2luIGBJbnRgIGJhbGFuY2Ugb2YgdGhlIHNtYXJ0IGNvbnRyYWN0IGFzIGl0IHdhcyBhdCB0aGUgc3RhcnQgb2YgdGhl" +
+ "IGNvbXB1dGUgcGhhc2Ugb2YgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGlOZWVk" +
+ "QURvbGxhOiBJbnQgPSBteUJhbGFuY2UoKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29udGV4" +
+ "dHN0YXRlI215YmFsYW5jZQovLy8KYXNtIGZ1biBteUJhbGFuY2UoKTogSW50IHsgQkFMQU5DRSBGSVJTVCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUg" +
+ "c2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBSZXR1cm5zIHRoZSBuYW5vVG9uY29pbiBgSW50YCBhbW91bnQgb2YgZ2FzIGNvbnN1bWVkIGJ5IFRWTSBpbiB0aGUgY3Vy" +
+ "cmVudCB0cmFuc2FjdGlvbiBzbyBmYXIuIFRoZSByZXN1bHRpbmcgdmFsdWUgaW5jbHVkZXMgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgovLy8KLy8v" +
+ "IGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBnYXM6IEludCA9IGdhc0NvbnN1bWVkKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0" +
+ "dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbnRleHRzdGF0ZSNnYXNjb25zdW1lZAovLy8KYXNtIGZ1biBnYXNDb25zdW1lZCgpOiBJbnQgeyBHQVND" +
+ "T05TVU1FRCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjUuMC4KLy8vCi8vLyBSZXR1cm5zIHRoZSBuYW5vVG9uY29pbiBgSW50" +
+ "YCBhbW91bnQgb2YgdGhlIGFjY3VtdWxhdGVkIHN0b3JhZ2UgZmVlIGRlYnQuIFN0b3JhZ2UgZmVlcyBhcmUgZGVkdWN0ZWQgZnJvbSB0aGUgaW5jb21pbmcgbWVzc2Fn" +
+ "ZSB2YWx1ZSBiZWZvcmUgdGhlIG5ldyBjb250cmFjdCBiYWxhbmNlIGlzIGNhbGN1bGF0ZWQuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAg" +
+ "ICAgbGV0IGRlYnQ6IEludCA9IG15U3RvcmFnZUR1ZSgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29y" +
+ "ZS1jb250ZXh0c3RhdGUjbXlzdG9yYWdlZHVlCi8vLwphc20gZnVuIG15U3RvcmFnZUR1ZSgpOiBJbnQgeyBEVUVQQVlNRU5UIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24u" +
+ "IEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIHN0b3JhZ2UgZmVlIGluIG5hbm9Ub25jb2lucyBgSW50" +
+ "YCBmb3Igc3RvcmluZyBhIGNvbnRyYWN0IHdpdGggYSBnaXZlbiBudW1iZXIgb2YgYGNlbGxzYCBhbmQgYGJpdHNgIGZvciBhIG51bWJlciBvZiBgc2Vjb25kc2AuIFVz" +
+ "ZXMgdGhlIHByaWNlcyBvZiB0aGUgbWFzdGVyY2hhaW4gaWYgYGlzTWFzdGVyY2hhaW5gIGlzIGB0cnVlYCwgb3RoZXJ3aXNlIHRoZSBwcmljZXMgb2YgdGhlIGJhc2Vj" +
+ "aGFpbi4gVGhlIGN1cnJlbnQgcHJpY2VzIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBjb25maWcgcGFyYW0gMTggb2YgVE9OIEJsb2NrY2hhaW4uCi8vLwovLy8gTm90ZSwg" +
+ "dGhhdCBzcGVjaWZ5aW5nIHZhbHVlcyBvZiBgY2VsbHNgIGFuZCBgYml0c2AgaGlnaGVyIHRoYW4gdGhlaXIgbWF4aW11bSB2YWx1ZXMgbGlzdGVkIGluIGFjY291bnQg" +
+ "c3RhdGUgbGltaXRzIChgbWF4X2FjY19zdGF0ZV9jZWxsc2AgYW5kIGBtYXhfYWNjX3N0YXRlX2JpdHNgKSB3aWxsIGhhdmUgdGhlIHNhbWUgcmVzdWx0IGFzIHdpdGgg" +
+ "c3BlY2lmeWluZyB0aGUgZXhhY3QgbGltaXRzLiBJbiBhZGRpdGlvbiwgbWFrZSBzdXJlIHlvdSB0YWtlIGludG8gYWNjb3VudCB0aGUgZGVkdXBsaWNhdGlvbiBvZiBj" +
+ "ZWxscyB3aXRoIHRoZSBzYW1lIGhhc2guCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBuZWdhdGl2ZSBudW1iZXIgb2YgYGNlbGxzYCwgYGJpdHNgIG9yIGBzZWNv" +
+ "bmRzYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBm" +
+ "dW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZmVlOiBJbnQgPSBnZXRTdG9yYWdlRmVlKDFfMDAwLCAxXzAwMCwgMV8wMDAsIGZhbHNlKTsKLy8vIH0KLy8vIGBgYAov" +
+ "Ly8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZ2FzI2dldHN0b3JhZ2VmZWUKLy8vCmFzbSBmdW4gZ2V0U3RvcmFnZUZlZShjZWxs" +
+ "czogSW50LCBiaXRzOiBJbnQsIHNlY29uZHM6IEludCwgaXNNYXN0ZXJjaGFpbjogQm9vbCk6IEludCB7IEdFVFNUT1JBR0VGRUUgfQoKLy8vIEdsb2JhbCBmdW5jdGlv" +
+ "bi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgY29tcHV0ZSBmZWUgaW4gbmFub1RvbmNvaW5zIGBJ" +
+ "bnRgIGZvciBhIHRyYW5zYWN0aW9uIHRoYXQgY29uc3VtZWQgYGdhc1VzZWRgIGFtb3VudCBvZiBnYXMuIFVzZXMgdGhlIHByaWNlcyBvZiB0aGUgbWFzdGVyY2hhaW4g" +
+ "aWYgYGlzTWFzdGVyY2hhaW5gIGlzIGB0cnVlYCwgb3RoZXJ3aXNlIHRoZSBwcmljZXMgb2YgdGhlIGJhc2VjaGFpbi4gVGhlIGN1cnJlbnQgcHJpY2VzIGFyZSBvYnRh" +
+ "aW5lZCBmcm9tIHRoZSBjb25maWcgcGFyYW0gMjAgZm9yIHRoZSBtYXN0ZXJjaGFpbiBhbmQgY29uZmlnIHBhcmFtIDIxIGZvciB0aGUgYmFzZWNoYWluIG9mIFRPTiBC" +
+ "bG9ja2NoYWluLgovLy8KLy8vIFdoZW4gdGhlIGBnYXNVc2VkYCBpcyBsZXNzIHRoYW4gYSBjZXJ0YWluIHRocmVzaG9sZCBjYWxsZWQgYGZsYXRfZ2FzX2xpbWl0YCwg" +
+ "dGhlcmUncyBhIG1pbmltdW0gcHJpY2UgdG8gcGF5IGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBgZmxhdF9nYXNfcHJpY2VgLiBUaGUgbGVzcyBnYXMgaXMgdXNlZCBiZWxv" +
+ "dyB0aGlzIHRocmVzaG9sZCwgdGhlIGhpZ2hlciB0aGUgbWluaW11bSBwcmljZSB3aWxsIGJlLiBTZWUgdGhlIGV4YW1wbGUgZm9yIGBnZXRTaW1wbGVDb21wdXRlRmVl" +
+ "KClgIHRvIGRlcml2ZSB0aGF0IHRocmVzaG9sZC4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IG5lZ2F0aXZlIHZhbHVlIG9mIGBnYXNVc2VkYCB0aHJvdyBhbiBl" +
+ "eGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsK" +
+ "Ly8vICAgICBsZXQgZmVlOiBJbnQgPSBnZXRDb21wdXRlRmVlKDFfMDAwLCBmYWxzZSk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0" +
+ "LWxhbmcub3JnL3JlZi9jb3JlLWdhcyNnZXRjb21wdXRlZmVlCi8vLwphc20gZnVuIGdldENvbXB1dGVGZWUoZ2FzVXNlZDogSW50LCBpc01hc3RlcmNoYWluOiBCb29s" +
+ "KTogSW50IHsgR0VUR0FTRkVFIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIFNpbWlsYXIgdG8gYGdldENv" +
+ "bXB1dGVGZWUoKWAsIGJ1dCB3aXRob3V0IHRoZSBgZmxhdF9nYXNfcHJpY2VgLCBpLmUuIHdpdGhvdXQgYSBtaW5pbXVtIHByaWNlIHRvIHBheSBpZiB0aGUgYGdhc1Vz" +
+ "ZWRgIGlzIGxlc3MgdGhhbiBhIGNlcnRhaW4gdGhyZXNob2xkIGNhbGxlZCBgZmxhdF9nYXNfbGltaXRgLiBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIG9ubHkgdGhlIGBn" +
+ "YXNVc2VkYCB0aW1lcyB0aGUgY3VycmVudCBnYXMgcHJpY2UuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBuZWdhdGl2ZSBudW1iZXIgb2YgYGNlbGxzYCwgYGJp" +
+ "dHNgIG9yIGBzZWNvbmRzYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBg" +
+ "YGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZmVlID0gZ2V0Q29tcHV0ZUZlZSgwLCBmYWxzZSk7Ci8vLyAgICAgbGV0IGZlZU5vRmxhdCA9IGdl" +
+ "dFNpbXBsZUNvbXB1dGVGZWUoMCwgZmFsc2UpOwovLy8gICAgIGxldCBtYXhGbGF0UHJpY2UgPSBmZWUgLSBmZWVOb0ZsYXQ7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBT" +
+ "ZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWdhcyNnZXRzaW1wbGVjb21wdXRlZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxh" +
+ "bmcub3JnL3JlZi9jb3JlLWdhcyNnZXRjb21wdXRlZmVlCi8vLwphc20gZnVuIGdldFNpbXBsZUNvbXB1dGVGZWUoZ2FzVXNlZDogSW50LCBpc01hc3RlcmNoYWluOiBC" +
+ "b29sKTogSW50IHsgR0VUR0FTRkVFU0lNUExFIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIENhbGN1bGF0" +
+ "ZXMgYW5kIHJldHVybnMgdGhlIGZvcndhcmQgZmVlIGluIG5hbm9Ub25jb2lucyBgSW50YCBmb3IgYW4gb3V0Z29pbmcgbWVzc2FnZSBjb25zaXN0aW5nIG9mIGEgZ2l2" +
+ "ZW4gbnVtYmVyIG9mIGBjZWxsc2AgYW5kIGBiaXRzYC4gVXNlcyB0aGUgcHJpY2VzIG9mIHRoZSBtYXN0ZXJjaGFpbiBpZiBgaXNNYXN0ZXJjaGFpbmAgaXMgYHRydWV7" +
+ "OnRhY3R9YCwgb3RoZXJ3aXNlIHRoZSBwcmljZXMgb2YgdGhlIGJhc2VjaGFpbi4gVGhlIGN1cnJlbnQgcHJpY2VzIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBjb25maWcg" +
+ "cGFyYW0gMjQgZm9yIHRoZSBtYXN0ZXJjaGFpbiBhbmQgY29uZmlnIHBhcmFtIDI1IGZvciB0aGUgYmFzZWNoYWluIG9mIFRPTiBCbG9ja2NoYWluLgovLy8KLy8vIElm" +
+ "IGJvdGggdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUgaW4gdGhlIGJhc2VjaGFpbiwgdGhlbiBzcGVjaWZ5IGBpc01hc3RlcmNoYWlu" +
+ "YCBhcyBgZmFsc2VgLiBPdGhlcndpc2UsIHNwZWNpZnkgYHRydWVgLgovLy8KLy8vIE5vdGUsIHRoYXQgc3BlY2lmeWluZyB2YWx1ZXMgb2YgYGNlbGxzYCBhbmQgYGJp" +
+ "dHNgIGhpZ2hlciB0aGFuIHRoZWlyIG1heGltdW0gdmFsdWVzIGxpc3RlZCBpbiBhY2NvdW50IHN0YXRlIGxpbWl0cyAoYG1heF9tc2dfY2VsbHNgIGFuZCBgbWF4X21z" +
+ "Z19iaXRzYCkgd2lsbCBoYXZlIHRoZSBzYW1lIHJlc3VsdCBhcyB3aXRoIHNwZWNpZnlpbmcgdGhlIGV4YWN0IGxpbWl0cy4KLy8vCi8vLyBIb3dldmVyLCByZWdhcmRs" +
+ "ZXNzIG9mIHRoZSB2YWx1ZXMgb2YgYGNlbGxzYCBhbmQgYGJpdHNgLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyBhZGRzIHRoZSBtaW5pbXVtIHByaWNlIGJhc2VkIG9uIHRo" +
+ "ZSB2YWx1ZSBvZiBgbHVtcF9wcmljZWAuIFNlZSB0aGUgZXhhbXBsZSBmb3IgW2BnZXRTaW1wbGVGb3J3YXJkRmVlKCl7OnRhY3R9YF0oI2dldHNpbXBsZWZvcndhcmRm" +
+ "ZWUpIHRvIGRlcml2ZSBpdC4gSW4gYWRkaXRpb24sIG1ha2Ugc3VyZSB5b3UgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRlZHVwbGljYXRpb24gb2YgY2VsbHMgd2l0aCB0" +
+ "aGUgc2FtZSBoYXNoLCBzaW5jZSBmb3IgZXhhbXBsZSB0aGUgcm9vdCBjZWxsIGFuZCBpdHMgZGF0YSBiaXRzIGRvbid0IGNvdW50IHRvd2FyZHMgdGhlIGZvcndhcmQg" +
+ "ZmVlIGFuZCBhcmUgY292ZXJlZCBieSB0aGUgYGx1bXBfcHJpY2VgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgbmVnYXRpdmUgbnVtYmVyIG9mIGBjZWxsc2Ag" +
+ "b3IgYGJpdHNgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QK" +
+ "Ly8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmZWU6IEludCA9IGdldEZvcndhcmRGZWUoMV8wMDAsIDFfMDAwLCBmYWxzZSk7Ci8vLyB9Ci8vLyBgYGAKLy8v" +
+ "Ci8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWdhcyNnZXRmb3J3YXJkZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxh" +
+ "bmcub3JnL3JlZi9jb3JlLWdhcyNnZXRzaW1wbGVmb3J3YXJkZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWdhcyNnZXRvcmlnaW5h" +
+ "bGZ3ZGZlZQovLy8KYXNtIGZ1biBnZXRGb3J3YXJkRmVlKGNlbGxzOiBJbnQsIGJpdHM6IEludCwgaXNNYXN0ZXJjaGFpbjogQm9vbCk6IEludCB7IEdFVEZPUldBUkRG" +
+ "RUUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gU2ltaWxhciB0byBgZ2V0Rm9yd2FyZEZlZSgpYCwgYnV0" +
+ "IHdpdGhvdXQgdGhlIGBsdW1wX3ByaWNlYCwgaS5lLiB3aXRob3V0IHRoZSBtaW5pbXVtIHByaWNlIHRvIHBheSByZWdhcmRsZXNzIG9mIHRoZSBhbW91bnQgb2YgYGNl" +
+ "bGxzYCBvciBgYml0c2AuIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgb25seSB0aGUgYGNlbGxzYCB0aW1lcyB0aGUgY3VycmVudCBjZWxsIHByaWNlIHBsdXMgYGJpdHNg" +
+ "IHRpbWVzIHRoZSBjdXJyZW50IGJpdCBwcmljZS4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IG5lZ2F0aXZlIG51bWJlciBvZiBgY2VsbHNgIG9yIGBiaXRzYCB0" +
+ "aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhh" +
+ "bXBsZSgpIHsKLy8vICAgICBsZXQgZmVlID0gZ2V0Rm9yd2FyZEZlZSgxXzAwMCwgMV8wMDAsIGZhbHNlKTsKLy8vICAgICBsZXQgZmVlTm9MdW1wID0gZ2V0U2ltcGxl" +
+ "Rm9yd2FyZEZlZSgxXzAwMCwgMV8wMDAsIGZhbHNlKTsKLy8vICAgICBsZXQgbHVtcFByaWNlID0gZmVlIC0gZmVlTm9MdW1wOwovLy8gfQovLy8gYGBgCi8vLwovLy8g" +
+ "U2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1nYXMjZ2V0c2ltcGxlZm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1s" +
+ "YW5nLm9yZy9yZWYvY29yZS1nYXMjZ2V0Zm9yd2FyZGZlZQovLy8KYXNtIGZ1biBnZXRTaW1wbGVGb3J3YXJkRmVlKGNlbGxzOiBJbnQsIGJpdHM6IEludCwgaXNNYXN0" +
+ "ZXJjaGFpbjogQm9vbCk6IEludCB7IEdFVEZPUldBUkRGRUVTSU1QTEUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS41LjAuCi8v" +
+ "LwovLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgc28tY2FsbGVkIF9vcmlnaW5hbF8gZm9yd2FyZCBmZWUgaW4gbmFub1RvbmNvaW5zIGBJbnRgIGZvciBhbiBv" +
+ "dXRnb2luZyBtZXNzYWdlIGJhc2VkIG9uIHRoZSBgZndkRmVlYCBvYnRhaW5lZCBmcm9tIHRoZSBpbmNvbWluZyBtZXNzYWdlLiBJZiBib3RoIHRoZSBzb3VyY2UgYW5k" +
+ "IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlIGluIHRoZSBiYXNlY2hhaW4sIHRoZW4gc3BlY2lmeSBgaXNNYXN0ZXJjaGFpbmAgYXMgYGZhbHNlYC4gT3RoZXJ3" +
+ "aXNlLCBzcGVjaWZ5IGB0cnVlYC4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHRoZSBvdXRnb2luZyBtZXNzYWdlIGRlcGVuZHMgaGVhdmlseSBv" +
+ "biB0aGUgc3RydWN0dXJlIG9mIHRoZSBpbmNvbWluZyBtZXNzYWdlLCBzbyBtdWNoIHNvIHRoYXQgeW91IGNhbm5vdCBmdWxseSBwcmVkaWN0IHRoZSBmZWUgdXNpbmcg" +
+ "YGdldEZvcndhcmRGZWUoKWAgYWxvbmUuIEV2ZW4gaWYgeW91IGNvdWxkLCBjYWxjdWxhdGluZyB0aGUgZXhhY3QgZmVlIHdpdGggbmFub1RvbmNvaW4tbGV2ZWwgcHJl" +
+ "Y2lzaW9uIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSwgc28gdGhlIGFwcHJveGltYXRlIHZhbHVlIGdpdmVuIGJ5IHRoaXMgZnVuY3Rpb24gaXMgb2Z0ZW4gZ29vZCBlbm91" +
+ "Z2guCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIHZhbHVlIG9mIGBmd2RGZWVgIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1" +
+ "OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmd2RGZWU6IEludCA9" +
+ "IGNvbnRleHQoKS5yZWFkRm9yd2FyZEZlZSgpOwovLy8gICAgIGxldCBvcmlnRmVlOiBJbnQgPSBnZXRPcmlnaW5hbEZ3ZEZlZShmZWUsIGZhbHNlKTsKLy8vIH0KLy8v" +
+ "IGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZ2FzI2dldG9yaWdpbmFsZndkZmVlCi8vLyAqIGh0dHBzOi8v" +
+ "ZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWdhcyNnZXRmb3J3YXJkZmVlCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbnRleHRz" +
+ "dGF0ZSNjb250ZXh0cmVhZGZvcndhcmRmZWUKLy8vCmFzbSBmdW4gZ2V0T3JpZ2luYWxGd2RGZWUoZndkRmVlOiBJbnQsIGlzTWFzdGVyY2hhaW46IEJvb2wpOiBJbnQg" +
+ "eyBHRVRPUklHSU5BTEZXREZFRSB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBSZXR1cm5zIHRoZSBgSW50" +
+ "YCB2YWx1ZSBvZiB0aGUgbG9naWNhbCB0aW1lIG9mIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8g" +
+ "ICAgIGxldCBsdDogSW50ID0gY3VyTHQoKTsKLy8vICAgICBuYXRpdmVSYW5kb21pemUobHQpOyAvLyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgbmF0aXZlUmFuZG9taXpl" +
+ "THQoKQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb250ZXh0c3RhdGUjY3VybHQKLy8v" +
+ "ICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtcmFuZG9tI25hdGl2ZXJhbmRvbWl6ZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9y" +
+ "ZWYvY29yZS1yYW5kb20jbmF0aXZlcmFuZG9taXplbHQKLy8vCmFzbSBmdW4gY3VyTHQoKTogSW50IHsgTFRJTUUgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxh" +
+ "YmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gUmV0dXJucyB0aGUgYEludGAgdmFsdWUgb2YgdGhlIHN0YXJ0aW5nIGxvZ2ljYWwgdGltZSBvZiB0aGUgY3VycmVu" +
+ "dCBibG9jay4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgdGltZTogSW50ID0gYmxvY2tMdCgpOwovLy8gfQovLy8gYGBgCi8v" +
+ "LwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb250ZXh0c3RhdGUjYmxvY2tsdAovLy8KYXNtIGZ1biBibG9ja0x0KCk6IEludCB7" +
+ "IEJMT0NLTFQgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2V0cyB0aGUgYGdhc19saW1pdGAgdG8gdGhl" +
+ "IGBJbnRgIGBsaW1pdGAgYW5kIHJlc2V0cyB0aGUgYGdhc19jcmVkaXRgIHRvIDAuIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoZSBgbGltaXRgIGhpZ2hlciB0aGFuIHRo" +
+ "ZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgb2YgMl42MyAtIDEgd2lsbCBoYXZlIHRoZSBzYW1lIHJlc3VsdCBhcyB3aXRoIHNwZWNpZnlpbmcgdGhhdCBleGFjdCBtYXhp" +
+ "bXVtIG9yIGNhbGxpbmcgYGFjY2VwdE1lc3NhZ2UoKWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIG9yIGluc3VmZmljaWVudCB2YWx1ZSBv" +
+ "ZiBgbGltaXRgIHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIC0xNDogYE91dCBvZiBnYXMgZXJyb3JgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1" +
+ "biBleGFtcGxlKCkgewovLy8gICAgIHNldEdhc0xpbWl0KDQyMDAwKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcv" +
+ "cmVmL2NvcmUtZ2FzI3NldGdhc2xpbWl0Ci8vLwphc20gZnVuIHNldEdhc0xpbWl0KGxpbWl0OiBJbnQpIHsgU0VUR0FTTElNSVQgfQoKLy8vIEdsb2JhbCBmdW5jdGlv" +
+ "bi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gR2VuZXJhdGVzIGFuZCByZXR1cm5zIGFuIHVuc2lnbmVkIDI1Ni1iaXQgYEludGAgc2VlZCBmb3Ig" +
+ "dGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiBUaGUgcmVzdWx0aW5nIHNlZWQgaXMgY29tbW9ubHkgdXNlZCB3aXRoIHRoZSBgc2V0U2VlZCgpYCBhbmQgYG5hdGl2" +
+ "ZVJhbmRvbWl6ZSgpYCBmdW5jdGlvbnMuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHNlZWQ6IEludCA9IGdldFNlZWQoKTsK" +
+ "Ly8vICAgICBzZXRTZWVkKHNlZWQpOyAvLyBmcm9tIG5vdyBvbiB0aGUgcmVzdWx0cyBvZiBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRvcgovLy8gICAgICAgICAg" +
+ "ICAgICAgICAgIC8vIGFyZSBjb21wbGV0ZWx5IGRldGVybWluZWQgYnkgdGhlIHNlZWQsIHdoaWNoIGNhbiBiZSBoYW5keSBpbiB0ZXN0cywKLy8vICAgICAgICAgICAg" +
+ "ICAgICAgICAvLyBidXQgbXVzdCBub3QgYmUgdXNlZCBpbiBwcm9kdWN0aW9uIGNvZGUhCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9j" +
+ "cy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNnZXRzZWVkCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNzZXRzZWVk" +
+ "Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNuYXRpdmVyYW5kb21pemUKLy8vCmFzbSBmdW4gZ2V0U2VlZCgpOiBJbnQgeyBS" +
+ "QU5EU0VFRCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTZXRzIHRoZSBzZWVkIG9mIHRoZSByYW5kb20g" +
+ "bnVtYmVyIGdlbmVyYXRvciB0byB0aGUgdW5zaWduZWQgMjU2LWJpdCBgSW50YCBgc2VlZGAgd2hpY2ggY2FuIGJlIG9idGFpbmVkIHdpdGggdGhlIGBnZXRTZWVkKClg" +
+ "IGZ1bmN0aW9uLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBgc2VlZGAgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBj" +
+ "b2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHNlZWQ6IElu" +
+ "dCA9IGdldFNlZWQoKTsKLy8vICAgICBzZXRTZWVkKHNlZWQpOyAvLyBmcm9tIG5vdyBvbiB0aGUgcmVzdWx0cyBvZiBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRv" +
+ "cgovLy8gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBjb21wbGV0ZWx5IGRldGVybWluZWQgYnkgdGhlIHNlZWQsIHdoaWNoIGNhbiBiZSBoYW5keSBpbiB0ZXN0cywK" +
+ "Ly8vICAgICAgICAgICAgICAgICAgICAvLyBidXQgbXVzdCBub3QgYmUgdXNlZCBpbiBwcm9kdWN0aW9uIGNvZGUhCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8v" +
+ "LyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNzZXRzZWVkCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3Jl" +
+ "LXJhbmRvbSNnZXRzZWVkCi8vLwphc20gZnVuIHNldFNlZWQoc2VlZDogSW50KSB7IFNFVFJBTkQgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNl" +
+ "IFRhY3QgMS42LjAuCi8vLwovLy8gUmV0dXJucyB0aGUgc21hcnQgY29udHJhY3QgY29kZSBgQ2VsbGAgb2J0YWluZWQgZnJvbSB0aGUgYGM3YCByZWdpc3Rlci4KLy8v" +
+ "Ci8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgY29kZTogQ2VsbCA9IG15Q29kZSgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBo" +
+ "dHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb250ZXh0c3RhdGUjbXljb2RlCi8vLwphc20gZnVuIG15Q29kZSgpOiBDZWxsIHsgTVlDT0RFIH0K";
files["std/internal/crypto.tact"] =
"Ly8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgYW4gYEludGAgdmFsdWUgb2YgdGhlIFtTSEEtMjU2XSBoYXNoIG9mIHRoZQovLy8gW3N0YW5kYXJkIGBDZWxsYCByZXBy" +
"ZXNlbnRhdGlvbl1bc3RkLXJlcHJlc2VudGF0aW9uXSBvZiB0aGUgZ2l2ZW4gYENlbGxgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAg" +
- "IGxldCBjOiBDZWxsID0gZW1wdHlDZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IGMuaGFzaCgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gW1NIQS0yNTZdOiBo" +
- "dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TSEEtMiNIYXNoX3N0YW5kYXJkCi8vLyBbc3RkLXJlcHJlc2VudGF0aW9uXTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFu" +
- "Zy5vcmcvYm9vay9jZWxscyNjZWxscy1yZXByZXNlbnRhdGlvbgovLy8KYXNtIGV4dGVuZHMgZnVuIGhhc2goc2VsZjogQ2VsbCk6IEludCB7IEhBU0hDVSB9CgovLy8g" +
- "Q2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhbiBgSW50YCB2YWx1ZSBvZiB0aGUgW1NIQS0yNTZdIGhhc2ggb2YgdGhlCi8vLyBbc3RhbmRhcmQgYFNsaWNlYCByZXByZXNl" +
- "bnRhdGlvbl1bc3RkLXJlcHJlc2VudGF0aW9uXSBvZiB0aGUgZ2l2ZW4gYFNsaWNlYC4KLy8vCi8vLyBOT1RFOiAqKkdhcyBleHBlbnNpdmUhKiogVGhpcyBmdW5jdGlv" +
- "biB1c2VzIDUwMCBnYXMgdW5pdHMgb3IgbW9yZS4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNl" +
- "bGwoKS5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IHMuaGFzaCgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gW1NIQS0yNTZdOiBodHRwczovL2VuLndp" +
- "a2lwZWRpYS5vcmcvd2lraS9TSEEtMiNIYXNoX3N0YW5kYXJkCi8vLyBbc3RkLXJlcHJlc2VudGF0aW9uXTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9j" +
- "ZWxscyNjZWxscy1yZXByZXNlbnRhdGlvbgovLy8KYXNtIGV4dGVuZHMgZnVuIGhhc2goc2VsZjogU2xpY2UpOiBJbnQgeyBIQVNIU1UgfQoKLy8vIEV4dGVuc2lvbiBm" +
- "dW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhbiBgSW50" +
- "YCB2YWx1ZSBvZiB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBkYXRhIGJpdHMgZnJvbSB0aGUgZ2l2ZW4gYFNsaWNlYCwgd2hpY2ggc2hvdWxkIGhhdmUgYSBudW1iZXIg" +
- "b2YgYml0cyBkaXZpc2libGUgYnkgOC4KLy8vCi8vLyBVbmxpa2UgYHNoYTI1NigpYCwgdGhpcyBmdW5jdGlvbiBpcyBnYXMtZWZmaWNpZW50IGFuZCAqKm9ubHkqKiBo" +
- "YXNoZXMgdGhlIGRhdGEgb2YgdGhlIGdpdmVuIGBTbGljZWAsIGkuZS4gdXAgdG8gMTAyMyBiaXRzLCBpZ25vcmluZyB0aGUgcmVmcy4KLy8vCi8vLyBBdHRlbXB0cyB0" +
- "byBzcGVjaWZ5IGEgYFNsaWNlYCB3aXRoIG51bWJlciBvZiBiaXRzICoqbm90KiogZGl2aXNpYmxlIGJ5IDggdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2Rl" +
- "IDk6IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8gICAgIC8vIEJhc2U2NC1lbmNvZGVkIEJvQyB3aXRoICJI" +
- "ZWxsbywgV29ybGQhIgovLy8gICAgIGxldCBzaG9ydDogU2xpY2UgPSBzbGljZSgidGU2Y2NrRUJBUUVBRGdBQUdFaGxiR3h2SUhkdmNteGtJWGd0eGJ3PSIpOwovLy8K" +
- "Ly8vICAgICAvLyBJdCdzIGVub3VnaCB0byBvbmx5IHRha2UgdGhlIGhhc2ggb2YgdGhlIGRhdGEKLy8vICAgICBzaGEyNTYoc2hvcnQpID09IHNob3J0Lmhhc2hEYXRh" +
- "KCk7IC8vIHRydWUKLy8vCi8vLyAgICAgLy8gQnV0IGlmIHdlIGNvbnN0cnVjdCBhIHNsaWNlIGxhcmdlciB0aGFuIDEwMjMgYml0cyB3aXRoIGFsbCByZWZzIGNvbWJp" +
- "bmVkLAovLy8gICAgIC8vIHdlIG11c3QgdXNlIHNoYTI1NigpIG9yIHdlJ2xsIGdldCBza2V3ZWQgcmVzdWx0cyBvciBldmVuIGNvbGxpc2lvbnMKLy8vCi8vLyAgICAg" +
- "bGV0IHRtcDogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIHJlcGVhdCAoMTI3KSB7IHRtcCA9IHRtcC5zdG9yZVVpbnQoNjksIDgpIH0gLy8gc3RvcmluZyAx" +
- "MjcgYnl0ZXMKLy8vICAgICBsZXQgcmVmOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVVaW50KDMzLCA4KS5lbmRDZWxsKCk7Ci8vLyAgICAgbGV0IGxvbmc6IFNsaWNl" +
- "ID0gdG1wLnN0b3JlUmVmKHJlZikuYXNTbGljZSgpOyAvLyBwbHVzIGEgcmVmIHdpdGggYSBzaW5nbGUgYnl0ZQovLy8KLy8vICAgICAvLyBIYXNoaW5nIGp1c3QgdGhl" +
- "IGRhdGEgYml0cyBpbiB0aGUgY3VycmVudCBzbGljZSBpc24ndCBlbm91Z2gKLy8vICAgICBzaGEyNTYobG9uZykgPT0gbG9uZy5oYXNoRGF0YSgpOyAvLyBmYWxzZSEK" +
- "Ly8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMvI3NsaWNlaGFzaGRhdGEKLy8vCmFzbSBleHRl" +
- "bmRzIGZ1biBoYXNoRGF0YShzZWxmOiBTbGljZSk6IEludCB7IE9ORSBIQVNIRVhUX1NIQTI1NiB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFN0cmlu" +
- "Z2AgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhbiBgSW50YCB2YWx1ZSBvZiB0aGUgU0hBLTI1" +
- "NiBoYXNoIG9mIHRoZSBkYXRhIGJpdHMgZnJvbSB0aGUgZ2l2ZW4gYFN0cmluZ2AsIHdoaWNoIHNob3VsZCBoYXZlIGEgbnVtYmVyIG9mIGJpdHMgZGl2aXNpYmxlIGJ5" +
- "IDguCi8vLwovLy8gVW5saWtlIGBzaGEyNTYoKWAsIHRoaXMgZnVuY3Rpb24gaXMgZ2FzLWVmZmljaWVudCBhbmQgKipvbmx5KiogaGFzaGVzIHVwIHRvIDEyNyBieXRl" +
- "cyBvZiB0aGUgZ2l2ZW4gc3RyaW5nLiBVc2luZyBsb25nZXIgc3RyaW5ncyB3b3VsZCBjYXVzZSBjb2xsaXNpb25zIGlmIHRoZWlyIGZpcnN0IDEyNyBieXRlcyBhcmUg" +
- "dGhlIHNhbWUuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIGBTdHJpbmdgIHdpdGggbnVtYmVyIG9mIGJpdHMgKipub3QqKiBkaXZpc2libGUgYnkgOCB0aHJv" +
- "dyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOTogYENlbGwgdW5kZXJmbG93YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBs" +
- "ZXQgcm9sbDogSW50ID0gIk5ldmVyIGdvbm5hIGdpdmUgeW91IHVwISIuaGFzaERhdGEoKTsgLy8ganVzdCB0aGUgaGFzaCBvZiB0aGUgZGF0YQovLy8gfQovLy8gYGBg" +
- "Ci8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscy8jc3RyaW5naGFzaGRhdGEKLy8vCmFzbSBleHRlbmRzIGZ1biBoYXNo" +
- "RGF0YShzZWxmOiBTdHJpbmcpOiBJbnQgeyBPTkUgSEFTSEVYVF9TSEEyNTYgfQoKLy8vIENoZWNrcyB0aGUgW0VkMjU1MTldIGBzaWduYXR1cmVgIG9mIHRoZSAyNTYt" +
- "Yml0IHVuc2lnbmVkIGBJbnRgIGBoYXNoYCB1c2luZyBhIGBwdWJsaWNLZXlgLAovLy8gcmVwcmVzZW50ZWQgYnkgYSAyNTYtYml0IHVuc2lnbmVkIGBJbnRgLiBUaGUg" +
- "c2lnbmF0dXJlIG11c3QgY29udGFpbiBhdCBsZWFzdCA1MTIgYml0cyBvZiBkYXRhLCBidXQKLy8vIG9ubHkgdGhlIGZpcnN0IDUxMiBiaXRzIGFyZSB1c2VkLgovLy8K" +
- "Ly8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgovLy8KLy8vIGBgYHRhY3QKLy8vIG1lc3NhZ2UgRXh0" +
- "TXNnIHsKLy8vICAgICBzaWduYXR1cmU6IFNsaWNlOwovLy8gICAgIGRhdGE6IENlbGw7Ci8vLyB9Ci8vLwovLy8gY29udHJhY3QgU2hvd2Nhc2UgewovLy8gICAgIC8v" +
- "LyBQZXJzaXN0ZW50IHN0YXRlIHZhcmlhYmxlcwovLy8gICAgIHB1YjogSW50IGFzIHVpbnQyNTY7IC8vIHB1YmxpYyBrZXkgYXMgYSAyNTYtYml0IHVuc2lnbmVkIElu" +
- "dAovLy8KLy8vICAgICAvLy8gQ29uc3RydWN0b3IgZnVuY3Rpb24gaW5pdCgpLCB3aGVyZSBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZAovLy8gICAgIGluaXQo" +
- "cHViOiBJbnQpIHsKLy8vICAgICAgICAgc2VsZi5wdWIgPSBwdWI7IC8vIHN0b3JpbmcgdGhlIHB1YmxpYyBrZXkgdXBvbiBjb250cmFjdCBpbml0aWFsaXphdGlvbgov" +
- "Ly8gICAgIH0KLy8vCi8vLyAgICAgLy8vIEV4dGVybmFsIG1lc3NhZ2UgcmVjZWl2ZXIsIHdoaWNoIGFjY2VwdHMgbWVzc2FnZSBFeHRNc2cKLy8vICAgICBleHRlcm5h" +
- "bChtc2c6IEV4dE1zZykgewovLy8gICAgICAgICBsZXQgaGFzaDogSW50ID0gYmVnaW5DZWxsKCkuc3RvcmVSZWYobXNnLmRhdGEpLmVuZENlbGwoKS5oYXNoKCk7Ci8v" +
- "LyAgICAgICAgIGxldCBjaGVjazogQm9vbCA9IGNoZWNrU2lnbmF0dXJlKGhhc2gsIG1zZy5zaWduYXR1cmUsIHNlbGYucHViKTsKLy8vICAgICAgICAgLy8gICAgICAg" +
- "ICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0KLy8vICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg" +
- "ICAg4oaRICAgICDihpEgICAgICAgICAgICAgIOKGkQovLy8gICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAg" +
- "ICBwdWJsaWNLZXkgc3RvcmVkIGluIG91ciBjb250cmFjdAovLy8gICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBzaWduYXR1cmUg" +
- "b2J0YWluZWQgZnJvbSB0aGUgcmVjZWl2ZWQgbWVzc2FnZQovLy8gICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoIGNhbGN1bGF0ZWQg" +
- "dXNpbmcgdGhlIGRhdGEgZnJvbSB0aGUgcmVjZWl2ZWQgbWVzc2FnZQovLy8gICAgICAgICAvLyAuLi4gZm9sbG93LXVwIGxvZ2ljIC4uLgovLy8gICAgIH0KLy8vIH0K" +
- "Ly8vIGBgYAovLy8KLy8vIE5PVEU6IFRoZSBmaXJzdCAxMCBjYWxscyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSB2ZXJ5IGNoZWFwIHJlZ2FyZGluZyBnYXMgdXNhZ2UuIEhv" +
- "d2V2ZXIsCi8vLyB0aGUgMTF0aCBjYWxsIGFuZCBvbndhcmQgY29uc3VtZSBtb3JlIHRoYW4gNCB0aG91c2FuZCBnYXMgdW5pdHMuCi8vLwovLy8gU2VlOiBodHRwczov" +
- "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1tYXRoLyNjaGVja3NpZ25hdHVyZQovLy8KLy8vIFtFZDI1NTE5XTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dp" +
- "a2kvRWREU0EjRWQyNTUxOQovLy8KYXNtIGZ1biBjaGVja1NpZ25hdHVyZShoYXNoOiBJbnQsIHNpZ25hdHVyZTogU2xpY2UsIHB1YmxpY0tleTogSW50KTogQm9vbCB7" +
- "IENIS1NJR05VIH0KCi8vLyBDaGVja3MgdGhlIFtFZDI1NTE5XSBgc2lnbmF0dXJlYCBvZiB0aGUgYGRhdGFgIHVzaW5nIGEgYHB1YmxpY0tleWAsIHNpbWlsYXIgdG8g" +
- "YGNoZWNrU2lnbmF0dXJlKClgLgovLy8gSWYgdGhlIGJpdCBsZW5ndGggb2YgYGRhdGFgIGlzIG5vdCBkaXZpc2libGUgYnkgOCwgdGhpcyBmdW5jdGlvbiB0aHJvd3Mg" +
- "YW4gZXJyb3Igd2l0aAovLy8gW2V4aXQgY29kZSA5XTogYENlbGwgdW5kZXJmbG93YC4KLy8vIFZlcmlmaWNhdGlvbiBpdHNlbGYgaXMgZG9uZSBpbmRpcmVjdGx5IG9u" +
- "IGEgW1NIQS0yNTZdIGhhc2ggb2YgdGhlIGBkYXRhYC4KLy8vCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCBgZmFsc2VgIG90aGVy" +
- "d2lzZS4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgZGF0YTogU2xpY2UgPSBzb21lRGF0YTsKLy8vICAgICBsZXQgc2lnbmF0" +
- "dXJlOiBTbGljZSA9IHNvbWVTaWduYXR1cmU7Ci8vLyAgICAgbGV0IHB1YmxpY0tleTogSW50ID0gNDI7Ci8vLwovLy8gICAgIGxldCBjaGVjazogQm9vbCA9IGNoZWNr" +
- "RGF0YVNpZ25hdHVyZShkYXRhLCBzaWduYXR1cmUsIHB1YmxpY0tleSk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBOT1RFOiBUaGUgZmlyc3QgMTAgY2FsbHMgb2YgdGhp" +
- "cyBmdW5jdGlvbiBhcmUgdmVyeSBjaGVhcCByZWdhcmRpbmcgZ2FzIHVzYWdlLiBIb3dldmVyLAovLy8gdGhlIDExdGggY2FsbCBhbmQgb253YXJkIGNvbnN1bWUgbW9y" +
- "ZSB0aGFuIDQgdGhvdXNhbmQgZ2FzIHVuaXRzLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtbWF0aC8jY2hlY2tkYXRhc2ln" +
- "bmF0dXJlCi8vLwovLy8gW2V4aXQgY29kZSA5XTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzkKLy8vIFtFZDI1NTE5XTogaHR0cHM6" +
- "Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRWREU0EjRWQyNTUxOQovLy8gW1NIQS0yNTZdOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TSEEtMiNIYXNoX3N0" +
- "YW5kYXJkCi8vLwphc20gZnVuIGNoZWNrRGF0YVNpZ25hdHVyZShkYXRhOiBTbGljZSwgc2lnbmF0dXJlOiBTbGljZSwgcHVibGljS2V5OiBJbnQpOiBCb29sIHsgQ0hL" +
- "U0lHTlMgfQo=";
+ "IGxldCBjOiBDZWxsID0gZW1wdHlDZWxsKCk7Ci8vLyAgICAgbGV0IGZpeno6IEludCA9IGMuaGFzaCgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczov" +
+ "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNjZWxsaGFzaAovLy8KLy8vIFtTSEEtMjU2XTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU0hB" +
+ "LTIjSGFzaF9zdGFuZGFyZAovLy8gW3N0ZC1yZXByZXNlbnRhdGlvbl06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svY2VsbHMjY2VsbHMtcmVwcmVzZW50" +
+ "YXRpb24KLy8vCmFzbSBleHRlbmRzIGZ1biBoYXNoKHNlbGY6IENlbGwpOiBJbnQgeyBIQVNIQ1UgfQoKLy8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgYW4gYEludGAg" +
+ "dmFsdWUgb2YgdGhlIFtTSEEtMjU2XSBoYXNoIG9mIHRoZQovLy8gW3N0YW5kYXJkIGBTbGljZWAgcmVwcmVzZW50YXRpb25dW3N0ZC1yZXByZXNlbnRhdGlvbl0gb2Yg" +
+ "dGhlIGdpdmVuIGBTbGljZWAuCi8vLwovLy8gTk9URTogKipHYXMgZXhwZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8v" +
+ "LwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuYXNTbGljZSgpOwovLy8gICAgIGxldCBmaXp6" +
+ "OiBJbnQgPSBzLmhhc2goKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2VoYXNo" +
+ "Ci8vLwovLy8gW1NIQS0yNTZdOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TSEEtMiNIYXNoX3N0YW5kYXJkCi8vLyBbc3RkLXJlcHJlc2VudGF0aW9uXTog" +
+ "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9jZWxscyNjZWxscy1yZXByZXNlbnRhdGlvbgovLy8KYXNtIGV4dGVuZHMgZnVuIGhhc2goc2VsZjogU2xpY2Up" +
+ "OiBJbnQgeyBIQVNIU1UgfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwov" +
+ "Ly8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhbiBgSW50YCB2YWx1ZSBvZiB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBkYXRhIGJpdHMgZnJvbSB0aGUgZ2l2ZW4gYFNs" +
+ "aWNlYCwgd2hpY2ggc2hvdWxkIGhhdmUgYSBudW1iZXIgb2YgYml0cyBkaXZpc2libGUgYnkgOC4KLy8vCi8vLyBVbmxpa2UgYHNoYTI1NigpYCwgdGhpcyBmdW5jdGlv" +
+ "biBpcyBnYXMtZWZmaWNpZW50IGFuZCAqKm9ubHkqKiBoYXNoZXMgdGhlIGRhdGEgb2YgdGhlIGdpdmVuIGBTbGljZWAsIGkuZS4gdXAgdG8gMTAyMyBiaXRzLCBpZ25v" +
+ "cmluZyB0aGUgcmVmcy4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IGEgYFNsaWNlYCB3aXRoIG51bWJlciBvZiBiaXRzICoqbm90KiogZGl2aXNpYmxlIGJ5IDgg" +
+ "dGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDk6IGBDZWxsIHVuZGVyZmxvd2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8g" +
+ "ICAgIC8vIEJhc2U2NC1lbmNvZGVkIEJvQyB3aXRoICJIZWxsbywgV29ybGQhIgovLy8gICAgIGxldCBzaG9ydDogU2xpY2UgPSBzbGljZSgidGU2Y2NrRUJBUUVBRGdB" +
+ "QUdFaGxiR3h2SUhkdmNteGtJWGd0eGJ3PSIpOwovLy8KLy8vICAgICAvLyBJdCdzIGVub3VnaCB0byBvbmx5IHRha2UgdGhlIGhhc2ggb2YgdGhlIGRhdGEKLy8vICAg" +
+ "ICBzaGEyNTYoc2hvcnQpID09IHNob3J0Lmhhc2hEYXRhKCk7IC8vIHRydWUKLy8vCi8vLyAgICAgLy8gQnV0IGlmIHdlIGNvbnN0cnVjdCBhIHNsaWNlIGxhcmdlciB0" +
+ "aGFuIDEwMjMgYml0cyB3aXRoIGFsbCByZWZzIGNvbWJpbmVkLAovLy8gICAgIC8vIHdlIG11c3QgdXNlIHNoYTI1NigpIG9yIHdlJ2xsIGdldCBza2V3ZWQgcmVzdWx0" +
+ "cyBvciBldmVuIGNvbGxpc2lvbnMKLy8vCi8vLyAgICAgbGV0IHRtcDogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwovLy8gICAgIHJlcGVhdCAoMTI3KSB7IHRtcCA9IHRt" +
+ "cC5zdG9yZVVpbnQoNjksIDgpIH0gLy8gc3RvcmluZyAxMjcgYnl0ZXMKLy8vICAgICBsZXQgcmVmOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVVaW50KDMzLCA4KS5l" +
+ "bmRDZWxsKCk7Ci8vLyAgICAgbGV0IGxvbmc6IFNsaWNlID0gdG1wLnN0b3JlUmVmKHJlZikuYXNTbGljZSgpOyAvLyBwbHVzIGEgcmVmIHdpdGggYSBzaW5nbGUgYnl0" +
+ "ZQovLy8KLy8vICAgICAvLyBIYXNoaW5nIGp1c3QgdGhlIGRhdGEgYml0cyBpbiB0aGUgY3VycmVudCBzbGljZSBpc24ndCBlbm91Z2gKLy8vICAgICBzaGEyNTYobG9u" +
+ "ZykgPT0gbG9uZy5oYXNoRGF0YSgpOyAvLyBmYWxzZSEKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUt" +
+ "Y2VsbHMjc2xpY2VoYXNoZGF0YQovLy8KYXNtIGV4dGVuZHMgZnVuIGhhc2hEYXRhKHNlbGY6IFNsaWNlKTogSW50IHsgT05FIEhBU0hFWFRfU0hBMjU2IH0KCi8vLyBF" +
+ "eHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU3RyaW5nYCB0eXBlLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDYWxjdWxhdGVzIGFuZCByZXR1" +
+ "cm5zIGFuIGBJbnRgIHZhbHVlIG9mIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGRhdGEgYml0cyBmcm9tIHRoZSBnaXZlbiBgU3RyaW5nYCwgd2hpY2ggc2hvdWxkIGhh" +
+ "dmUgYSBudW1iZXIgb2YgYml0cyBkaXZpc2libGUgYnkgOC4KLy8vCi8vLyBVbmxpa2UgYHNoYTI1NigpYCwgdGhpcyBmdW5jdGlvbiBpcyBnYXMtZWZmaWNpZW50IGFu" +
+ "ZCAqKm9ubHkqKiBoYXNoZXMgdXAgdG8gMTI3IGJ5dGVzIG9mIHRoZSBnaXZlbiBzdHJpbmcuIFVzaW5nIGxvbmdlciBzdHJpbmdzIHdvdWxkIGNhdXNlIGNvbGxpc2lv" +
+ "bnMgaWYgdGhlaXIgZmlyc3QgMTI3IGJ5dGVzIGFyZSB0aGUgc2FtZS4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IGEgYFN0cmluZ2Agd2l0aCBudW1iZXIgb2Yg" +
+ "Yml0cyAqKm5vdCoqIGRpdmlzaWJsZSBieSA4IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA5OiBgQ2VsbCB1bmRlcmZsb3dgLgovLy8KLy8vIGBgYHRh" +
+ "Y3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCByb2xsOiBJbnQgPSAiTmV2ZXIgZ29ubmEgZ2l2ZSB5b3UgdXAhIi5oYXNoRGF0YSgpOyAvLyBqdXN0IHRo" +
+ "ZSBoYXNoIG9mIHRoZSBkYXRhCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXN0cmluZ3Mjc3RyaW5n" +
+ "aGFzaGRhdGEKLy8vCmFzbSBleHRlbmRzIGZ1biBoYXNoRGF0YShzZWxmOiBTdHJpbmcpOiBJbnQgeyBPTkUgSEFTSEVYVF9TSEEyNTYgfQoKLy8vIENoZWNrcyB0aGUg" +
+ "W0VkMjU1MTldIGBzaWduYXR1cmVgIG9mIHRoZSAyNTYtYml0IHVuc2lnbmVkIGBJbnRgIGBoYXNoYCB1c2luZyBhIGBwdWJsaWNLZXlgLAovLy8gcmVwcmVzZW50ZWQg" +
+ "YnkgYSAyNTYtYml0IHVuc2lnbmVkIGBJbnRgLiBUaGUgc2lnbmF0dXJlIG11c3QgY29udGFpbiBhdCBsZWFzdCA1MTIgYml0cyBvZiBkYXRhLCBidXQKLy8vIG9ubHkg" +
+ "dGhlIGZpcnN0IDUxMiBiaXRzIGFyZSB1c2VkLgovLy8KLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQsIGBmYWxzZWAgb3RoZXJ3aXNl" +
+ "LgovLy8KLy8vIGBgYHRhY3QKLy8vIG1lc3NhZ2UgRXh0TXNnIHsKLy8vICAgICBzaWduYXR1cmU6IFNsaWNlOwovLy8gICAgIGRhdGE6IENlbGw7Ci8vLyB9Ci8vLwov" +
+ "Ly8gY29udHJhY3QgU2hvd2Nhc2UgewovLy8gICAgIC8vLyBQZXJzaXN0ZW50IHN0YXRlIHZhcmlhYmxlcwovLy8gICAgIHB1YjogSW50IGFzIHVpbnQyNTY7IC8vIHB1" +
+ "YmxpYyBrZXkgYXMgYSAyNTYtYml0IHVuc2lnbmVkIEludAovLy8KLy8vICAgICAvLy8gQ29uc3RydWN0b3IgZnVuY3Rpb24gaW5pdCgpLCB3aGVyZSBhbGwgdmFyaWFi" +
+ "bGVzIGFyZSBpbml0aWFsaXplZAovLy8gICAgIGluaXQocHViOiBJbnQpIHsKLy8vICAgICAgICAgc2VsZi5wdWIgPSBwdWI7IC8vIHN0b3JpbmcgdGhlIHB1YmxpYyBr" +
+ "ZXkgdXBvbiBjb250cmFjdCBpbml0aWFsaXphdGlvbgovLy8gICAgIH0KLy8vCi8vLyAgICAgLy8vIEV4dGVybmFsIG1lc3NhZ2UgcmVjZWl2ZXIsIHdoaWNoIGFjY2Vw" +
+ "dHMgbWVzc2FnZSBFeHRNc2cKLy8vICAgICBleHRlcm5hbChtc2c6IEV4dE1zZykgewovLy8gICAgICAgICBsZXQgaGFzaDogSW50ID0gYmVnaW5DZWxsKCkuc3RvcmVS" +
+ "ZWYobXNnLmRhdGEpLmVuZENlbGwoKS5oYXNoKCk7Ci8vLyAgICAgICAgIGxldCBjaGVjazogQm9vbCA9IGNoZWNrU2lnbmF0dXJlKGhhc2gsIG1zZy5zaWduYXR1cmUs" +
+ "IHNlbGYucHViKTsKLy8vICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0KLy8vICAgICAg" +
+ "ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaRICAgICDihpEgICAgICAgICAgICAgIOKGkQovLy8gICAgICAgICAvLyAgICAgICAgICAgICAgICAg" +
+ "ICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICBwdWJsaWNLZXkgc3RvcmVkIGluIG91ciBjb250cmFjdAovLy8gICAgICAgICAvLyAgICAgICAgICAgICAg" +
+ "ICAgICAgICAgICAgICAgICB8ICAgICBzaWduYXR1cmUgb2J0YWluZWQgZnJvbSB0aGUgcmVjZWl2ZWQgbWVzc2FnZQovLy8gICAgICAgICAvLyAgICAgICAgICAgICAg" +
+ "ICAgICAgICAgICAgICAgICBoYXNoIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGRhdGEgZnJvbSB0aGUgcmVjZWl2ZWQgbWVzc2FnZQovLy8gICAgICAgICAvLyAuLi4gZm9s" +
+ "bG93LXVwIGxvZ2ljIC4uLgovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIE5PVEU6IFRoZSBmaXJzdCAxMCBjYWxscyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSB2" +
+ "ZXJ5IGNoZWFwIHJlZ2FyZGluZyBnYXMgdXNhZ2UuIEhvd2V2ZXIsCi8vLyB0aGUgMTF0aCBjYWxsIGFuZCBvbndhcmQgY29uc3VtZSBtb3JlIHRoYW4gNCB0aG91c2Fu" +
+ "ZCBnYXMgdW5pdHMuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jcnlwdG8jY2hlY2tzaWduYXR1cmUKLy8vCi8vLyBbRWQy" +
+ "NTUxOV06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VkRFNBI0VkMjU1MTkKLy8vCmFzbSBmdW4gY2hlY2tTaWduYXR1cmUoaGFzaDogSW50LCBzaWduYXR1" +
+ "cmU6IFNsaWNlLCBwdWJsaWNLZXk6IEludCk6IEJvb2wgeyBDSEtTSUdOVSB9CgovLy8gQ2hlY2tzIHRoZSBbRWQyNTUxOV0gYHNpZ25hdHVyZWAgb2YgdGhlIGBkYXRh" +
+ "YCB1c2luZyBhIGBwdWJsaWNLZXlgLCBzaW1pbGFyIHRvIGBjaGVja1NpZ25hdHVyZSgpYC4KLy8vIElmIHRoZSBiaXQgbGVuZ3RoIG9mIGBkYXRhYCBpcyBub3QgZGl2" +
+ "aXNpYmxlIGJ5IDgsIHRoaXMgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yIHdpdGgKLy8vIFtleGl0IGNvZGUgOV06IGBDZWxsIHVuZGVyZmxvd2AuCi8vLyBWZXJpZmlj" +
+ "YXRpb24gaXRzZWxmIGlzIGRvbmUgaW5kaXJlY3RseSBvbiBhIFtTSEEtMjU2XSBoYXNoIG9mIHRoZSBgZGF0YWAuCi8vLwovLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhl" +
+ "IHNpZ25hdHVyZSBpcyB2YWxpZCwgYGZhbHNlYCBvdGhlcndpc2UuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGRhdGE6IFNs" +
+ "aWNlID0gc29tZURhdGE7Ci8vLyAgICAgbGV0IHNpZ25hdHVyZTogU2xpY2UgPSBzb21lU2lnbmF0dXJlOwovLy8gICAgIGxldCBwdWJsaWNLZXk6IEludCA9IDQyOwov" +
+ "Ly8KLy8vICAgICBsZXQgY2hlY2s6IEJvb2wgPSBjaGVja0RhdGFTaWduYXR1cmUoZGF0YSwgc2lnbmF0dXJlLCBwdWJsaWNLZXkpOwovLy8gfQovLy8gYGBgCi8vLwov" +
+ "Ly8gTk9URTogVGhlIGZpcnN0IDEwIGNhbGxzIG9mIHRoaXMgZnVuY3Rpb24gYXJlIHZlcnkgY2hlYXAgcmVnYXJkaW5nIGdhcyB1c2FnZS4gSG93ZXZlciwKLy8vIHRo" +
+ "ZSAxMXRoIGNhbGwgYW5kIG9ud2FyZCBjb25zdW1lIG1vcmUgdGhhbiA0IHRob3VzYW5kIGdhcyB1bml0cy4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxh" +
+ "bmcub3JnL3JlZi9jb3JlLWNyeXB0byNjaGVja2RhdGFzaWduYXR1cmUKLy8vCi8vLyBbZXhpdCBjb2RlIDldOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29r" +
+ "L2V4aXQtY29kZXMjOQovLy8gW0VkMjU1MTldOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FZERTQSNFZDI1NTE5Ci8vLyBbU0hBLTI1Nl06IGh0dHBzOi8v" +
+ "ZW4ud2lraXBlZGlhLm9yZy93aWtpL1NIQS0yI0hhc2hfc3RhbmRhcmQKLy8vCmFzbSBmdW4gY2hlY2tEYXRhU2lnbmF0dXJlKGRhdGE6IFNsaWNlLCBzaWduYXR1cmU6" +
+ "IFNsaWNlLCBwdWJsaWNLZXk6IEludCk6IEJvb2wgeyBDSEtTSUdOUyB9Cg==";
files["std/internal/debug.tact"] =
"Ly8gdGhlc2UgYXJlIGJ1aWx0aW4gZnVuY3Rpb25zLCB0aGVzZSBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgZnJvbSBGdW5DCi8vIGhlbmNlLCBubyBhc20gaGVyZQoKLy8v" +
"IEdsb2JhbCBmdW5jdGlvbi4KLy8vCi8vLyBVbmNvbmRpdGlvbmFsbHkgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aXRoIGFuIGVycm9yIGBjb2RlYC4KLy8vCi8vLyBFeGVj" +
@@ -1190,38 +1192,38 @@ files["std/internal/debug.tact"] =
"dGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gdGhpc1dpbGxUZXJtaW5hdGVBYnJ1cHRseSgpIHsKLy8vICAgICB0aHJvdygxMDQyKTsgLy8gdGhyb3dp" +
"bmcgd2l0aCBleGl0IGNvZGUgMTA0MgovLy8gfQovLy8KLy8vIGZ1biBidXRUaGlzV29udCgpIHsKLy8vICAgICB0cnkgewovLy8gICAgICAgICB0aHJvdygxMDQyKTsg" +
"Ly8gdGhyb3dpbmcgd2l0aCBleGl0IGNvZGUgMTA0MgovLy8gICAgIH0KLy8vCi8vLyAgICAgLy8gLi4uIGZvbGxvdy11cCBsb2dpYyAuLi4KLy8vIH0KLy8vIGBgYAov" +
- "Ly8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVidWcvI3Rocm93Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcu" +
- "b3JnL2Jvb2svc3RhdGVtZW50cy8jdHJ5LWNhdGNoCi8vLwpAbmFtZSh0aHJvdykKbmF0aXZlIHRocm93KGNvZGU6IEludCk7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBB" +
- "dmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTaW1pbGFyIHRvIGB0aHJvdygpYCwgYnV0IHRocm93cyBhbiBlcnJvciBgY29kZWAgb25seSBpZiBgY29u" +
- "ZGl0aW9uYCBob2xkcywgaS5lLiBgY29uZGl0aW9uYCBpcyBlcXVhbCB0byBgdHJ1ZWAuIERvZXNuJ3QgdGhyb3cgb3RoZXJ3aXNlLgovLy8KLy8vIEF0dGVtcHRzIHRv" +
- "IHNwZWNpZnkgdGhlIGBjb2RlYCBvdXRzaWRlIG9mIDAtNjU1MzUgcmFuZ2UgY2F1c2UgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBv" +
- "ZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gY29udHJhY3QgT3duZXJzaGlwIHsKLy8vICAgICBvd25lcjogQWRkcmVzczsKLy8vCi8vLyAgICAg" +
- "aW5pdCgpIHsKLy8vICAgICAgICAgc2VsZi5vd25lciA9IG15QWRkcmVzcygpOwovLy8gICAgIH0KLy8vCi8vLyAgICAgcmVjZWl2ZSgpIHsKLy8vICAgICAgICAgLy8g" +
- "Q2hlY2sgdGhlIHNlbmRlciBpcyB0aGUgb3duZXIgb2YgdGhlIGNvbnRyYWN0LAovLy8gICAgICAgICAvLyBhbmQgdGhyb3cgZXhpdCBjb2RlIDEwMjQgaWYgaXQncyBu" +
- "b3QKLy8vICAgICAgICAgdGhyb3dJZigxMDI0LCBzZW5kZXIoKSAhPSBzZWxmLm93bmVyKTsKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAq" +
- "IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWRlYnVnLyN0aHJvd2lmCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svc3RhdGVt" +
- "ZW50cy8jdHJ5LWNhdGNoCi8vLwpAbmFtZSh0aHJvd19pZikKbmF0aXZlIHRocm93SWYoY29kZTogSW50LCBjb25kaXRpb246IEJvb2wpOwoKLy8vIEdsb2JhbCBmdW5j" +
- "dGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2ltaWxhciB0byBgdGhyb3coKWAsIGJ1dCB0aHJvd3MgYW4gZXJyb3IgYGNvZGVgIG9ubHkg" +
- "aWYgYGNvbmRpdGlvbmAgZG9lcyAqKm5vdCoqIGhvbGQsIGkuZS4gYGNvbmRpdGlvbmAgaXMgZXF1YWwgdG8gYHRydWV7OnRhY3R9YC4gRG9lc24ndCB0aHJvdyBvdGhl" +
- "cndpc2UuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIHNpbWlsYXIgdG8gYHJlcXVpcmUoKWAsIGJ1dCB1c2VzIHRoZSBzcGVjaWZpZWQgYGNvZGVgIGRpcmVj" +
- "dGx5IGluc3RlYWQgb2YgZ2VuZXJhdGluZyBvbmUgYmFzZWQgb24gdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2UgYFN0cmluZ2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3Bl" +
- "Y2lmeSB0aGUgYGNvZGVgIG91dHNpZGUgb2YgMC02NTUzNSByYW5nZSBjYXVzZSBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4" +
- "cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBjb250cmFjdCBPd25lcnNoaXAgewovLy8gICAgIG93bmVyOiBBZGRyZXNzOwovLy8KLy8vICAgICBpbml0" +
- "KCkgewovLy8gICAgICAgICBzZWxmLm93bmVyID0gbXlBZGRyZXNzKCk7Ci8vLyAgICAgfQovLy8KLy8vICAgICByZWNlaXZlKCkgewovLy8gICAgICAgICAvLyBDaGVj" +
- "ayB0aGUgc2VuZGVyIGlzIHRoZSBvd25lciBvZiB0aGUgY29udHJhY3QsCi8vLyAgICAgICAgIC8vIGFuZCB0aHJvdyBleGl0IGNvZGUgMTAyNCBpZiBpdCdzIG5vdAov" +
- "Ly8gICAgICAgICB0aHJvd1VubGVzcygxMDI0LCBzZW5kZXIoKSA9PSBzZWxmLm93bmVyKTsKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAq" +
- "IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWRlYnVnLyN0aHJvd3VubGVzcwovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29y" +
- "ZS1kZWJ1Zy8jcmVxdWlyZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL3N0YXRlbWVudHMvI3RyeS1jYXRjaAovLy8KQG5hbWUodGhyb3dfdW5s" +
- "ZXNzKQpuYXRpdmUgdGhyb3dVbmxlc3MoY29kZTogSW50LCBjb25kaXRpb246IEJvb2wpOwoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gKipEZXByZWNhdGVkKiogc2luY2Ug" +
- "VGFjdCAxLjYuMC4KLy8vCi8vLyBVc2UgYHRocm93KClgIGluc3RlYWQuCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29y" +
- "ZS1kZWJ1Zy8jdGhyb3cKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVidWcvI25hdGl2ZXRocm93Ci8vLwpAbmFtZSh0aHJvdykKbmF0" +
- "aXZlIG5hdGl2ZVRocm93KGNvZGU6IEludCk7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiAqKkRlcHJlY2F0ZWQqKiBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFVzZSBg" +
- "dGhyb3dJZigpYCBpbnN0ZWFkLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVidWcvI3Rocm93aWYKLy8vICog" +
- "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVidWcvI25hdGl2ZXRocm93aWYKLy8vCkBuYW1lKHRocm93X2lmKQpuYXRpdmUgbmF0aXZlVGhyb3dJ" +
- "Zihjb2RlOiBJbnQsIGNvbmRpdGlvbjogQm9vbCk7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiAqKkRlcHJlY2F0ZWQqKiBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFVz" +
- "ZSBgdGhyb3dVbmxlc3MoKWAgaW5zdGVhZC4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWRlYnVnLyN0aHJvd3Vu" +
- "bGVzcwovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1kZWJ1Zy8jbmF0aXZldGhyb3d1bmxlc3MKLy8vCkBuYW1lKHRocm93X3VubGVzcykK" +
- "bmF0aXZlIG5hdGl2ZVRocm93VW5sZXNzKGNvZGU6IEludCwgY29uZGl0aW9uOiBCb29sKTsK";
+ "Ly8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVidWcjdGhyb3cKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" +
+ "cmcvYm9vay9zdGF0ZW1lbnRzI3RyeS1jYXRjaAovLy8KQG5hbWUodGhyb3cpCm5hdGl2ZSB0aHJvdyhjb2RlOiBJbnQpOwoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZh" +
+ "aWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2ltaWxhciB0byBgdGhyb3coKWAsIGJ1dCB0aHJvd3MgYW4gZXJyb3IgYGNvZGVgIG9ubHkgaWYgYGNvbmRp" +
+ "dGlvbmAgaG9sZHMsIGkuZS4gYGNvbmRpdGlvbmAgaXMgZXF1YWwgdG8gYHRydWVgLiBEb2Vzbid0IHRocm93IG90aGVyd2lzZS4KLy8vCi8vLyBBdHRlbXB0cyB0byBz" +
+ "cGVjaWZ5IHRoZSBgY29kZWAgb3V0c2lkZSBvZiAwLTY1NTM1IHJhbmdlIGNhdXNlIGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2Yg" +
+ "ZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGNvbnRyYWN0IE93bmVyc2hpcCB7Ci8vLyAgICAgb3duZXI6IEFkZHJlc3M7Ci8vLwovLy8gICAgIGlu" +
+ "aXQoKSB7Ci8vLyAgICAgICAgIHNlbGYub3duZXIgPSBteUFkZHJlc3MoKTsKLy8vICAgICB9Ci8vLwovLy8gICAgIHJlY2VpdmUoKSB7Ci8vLyAgICAgICAgIC8vIENo" +
+ "ZWNrIHRoZSBzZW5kZXIgaXMgdGhlIG93bmVyIG9mIHRoZSBjb250cmFjdCwKLy8vICAgICAgICAgLy8gYW5kIHRocm93IGV4aXQgY29kZSAxMDI0IGlmIGl0J3Mgbm90" +
+ "Ci8vLyAgICAgICAgIHRocm93SWYoMTAyNCwgc2VuZGVyKCkgIT0gc2VsZi5vd25lcik7Ci8vLyAgICAgfQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBo" +
+ "dHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1kZWJ1ZyN0aHJvd2lmCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svc3RhdGVtZW50" +
+ "cyN0cnktY2F0Y2gKLy8vCkBuYW1lKHRocm93X2lmKQpuYXRpdmUgdGhyb3dJZihjb2RlOiBJbnQsIGNvbmRpdGlvbjogQm9vbCk7CgovLy8gR2xvYmFsIGZ1bmN0aW9u" +
+ "LiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTaW1pbGFyIHRvIGB0aHJvdygpYCwgYnV0IHRocm93cyBhbiBlcnJvciBgY29kZWAgb25seSBpZiBg" +
+ "Y29uZGl0aW9uYCBkb2VzICoqbm90KiogaG9sZCwgaS5lLiBgY29uZGl0aW9uYCBpcyBlcXVhbCB0byBgdHJ1ZXs6dGFjdH1gLiBEb2Vzbid0IHRocm93IG90aGVyd2lz" +
+ "ZS4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gc2ltaWxhciB0byBgcmVxdWlyZSgpYCwgYnV0IHVzZXMgdGhlIHNwZWNpZmllZCBgY29kZWAgZGlyZWN0bHkg" +
+ "aW5zdGVhZCBvZiBnZW5lcmF0aW5nIG9uZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZXJyb3IgbWVzc2FnZSBgU3RyaW5nYC4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5" +
+ "IHRoZSBgY29kZWAgb3V0c2lkZSBvZiAwLTY1NTM1IHJhbmdlIGNhdXNlIGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0" +
+ "ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGNvbnRyYWN0IE93bmVyc2hpcCB7Ci8vLyAgICAgb3duZXI6IEFkZHJlc3M7Ci8vLwovLy8gICAgIGluaXQoKSB7" +
+ "Ci8vLyAgICAgICAgIHNlbGYub3duZXIgPSBteUFkZHJlc3MoKTsKLy8vICAgICB9Ci8vLwovLy8gICAgIHJlY2VpdmUoKSB7Ci8vLyAgICAgICAgIC8vIENoZWNrIHRo" +
+ "ZSBzZW5kZXIgaXMgdGhlIG93bmVyIG9mIHRoZSBjb250cmFjdCwKLy8vICAgICAgICAgLy8gYW5kIHRocm93IGV4aXQgY29kZSAxMDI0IGlmIGl0J3Mgbm90Ci8vLyAg" +
+ "ICAgICAgIHRocm93VW5sZXNzKDEwMjQsIHNlbmRlcigpID09IHNlbGYub3duZXIpOwovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0" +
+ "cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVidWcjdGhyb3d1bmxlc3MKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVi" +
+ "dWcjcmVxdWlyZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL3N0YXRlbWVudHMjdHJ5LWNhdGNoCi8vLwpAbmFtZSh0aHJvd191bmxlc3MpCm5h" +
+ "dGl2ZSB0aHJvd1VubGVzcyhjb2RlOiBJbnQsIGNvbmRpdGlvbjogQm9vbCk7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiAqKkRlcHJlY2F0ZWQqKiBzaW5jZSBUYWN0IDEu" +
+ "Ni4wLgovLy8KLy8vIFVzZSBgdGhyb3coKWAgaW5zdGVhZC4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWRlYnVn" +
+ "I3Rocm93Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWRlYnVnI25hdGl2ZXRocm93Ci8vLwpAbmFtZSh0aHJvdykKbmF0aXZlIG5hdGl2" +
+ "ZVRocm93KGNvZGU6IEludCk7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiAqKkRlcHJlY2F0ZWQqKiBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFVzZSBgdGhyb3dJZigp" +
+ "YCBpbnN0ZWFkLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtZGVidWcjdGhyb3dpZgovLy8gKiBodHRwczovL2Rv" +
+ "Y3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1kZWJ1ZyNuYXRpdmV0aHJvd2lmCi8vLwpAbmFtZSh0aHJvd19pZikKbmF0aXZlIG5hdGl2ZVRocm93SWYoY29kZTogSW50" +
+ "LCBjb25kaXRpb246IEJvb2wpOwoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gKipEZXByZWNhdGVkKiogc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBVc2UgYHRocm93VW5s" +
+ "ZXNzKClgIGluc3RlYWQuCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1kZWJ1ZyN0aHJvd3VubGVzcwovLy8gKiBo" +
+ "dHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1kZWJ1ZyNuYXRpdmV0aHJvd3VubGVzcwovLy8KQG5hbWUodGhyb3dfdW5sZXNzKQpuYXRpdmUgbmF0aXZl" +
+ "VGhyb3dVbmxlc3MoY29kZTogSW50LCBjb25kaXRpb246IEJvb2wpOwo=";
files["std/internal/math.tact"] =
"Ly8gUHJlcGFyZSByYW5kb20KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gUmFuZG9taXplcyB0aGUgcHNldWRvcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0" +
"aCB0aGUgc3BlY2lmaWVkIHVuc2lnbmVkIDI1Ni1iaXQgYEludGAgYHhgIGJ5IG1peGluZyBpdCB3aXRoIHRoZSBjdXJyZW50IHNlZWQuIFRoZSBuZXcgc2VlZCBpcyB0" +
@@ -1231,61 +1233,61 @@ files["std/internal/math.tact"] =
"bGUoKSB7Ci8vLyAgICAgbmF0aXZlUmFuZG9taXplKDQyKTsgICAgICAgIC8vIG5vdywgcmFuZG9tIG51bWJlcnMgYXJlIGxlc3MgcHJlZGljdGFibGUKLy8vICAgICBs" +
"ZXQgaWRrOiBJbnQgPSByYW5kb21JbnQoKTsgLy8gPz8/LCBpdCdzIHJhbmRvbSwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHRoZSBz" +
"ZWVkIHdhcyBhZGp1c3RlZCBkZXRlcm1pbmlzdGljYWxseSEKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcv" +
- "cmVmL2NvcmUtYWR2YW5jZWQjbmF0aXZlcmFuZG9taXplCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNyYW5kb21pbnQKLy8v" +
- "CmFzbSBmdW4gbmF0aXZlUmFuZG9taXplKHg6IEludCkgeyBBRERSQU5EIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gUmFuZG9taXplcyB0aGUgcmFuZG9t" +
- "IG51bWJlciBnZW5lcmF0b3Igd2l0aCB0aGUgbG9naWNhbCB0aW1lIG9mIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYG5hdGl2" +
- "ZVJhbmRvbWl6ZShjdXJMdCgpKWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbmF0aXZlUmFuZG9taXplTHQoKTsgICAgICAgIC8v" +
- "IG5vdywgcmFuZG9tIG51bWJlcnMgYXJlIHVucHJlZGljdGFibGUgZm9yIHVzZXJzLAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgc3Rp" +
- "bGwgbWF5IGJlIGFmZmVjdGVkIGJ5IHZhbGlkYXRvcnMgb3IgY29sbGF0b3JzCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZXkgZGV0" +
- "ZXJtaW5lIHRoZSBzZWVkIG9mIHRoZSBjdXJyZW50IGJsb2NrLgovLy8gICAgIGxldCBpZGs6IEludCA9IHJhbmRvbUludCgpOyAvLyA/Pz8sIGl0J3MgcmFuZG9tIQov" +
- "Ly8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNuYXRpdmVyYW5kb21pemVsdAov" +
- "Ly8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNuYXRpdmVyYW5kb21pemUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" +
- "cmcvcmVmL2NvcmUtYWR2YW5jZWQjY3VybHQKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtcmFuZG9tI3JhbmRvbWludAovLy8KYXNtIGZ1" +
- "biBuYXRpdmVSYW5kb21pemVMdCgpIHsgTFRJTUUgQUREUkFORCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIFByZXBhcmVzIGEgcmFuZG9tIG51bWJlciBn" +
- "ZW5lcmF0b3IgYnkgdXNpbmcgYG5hdGl2ZVJhbmRvbWl6ZUx0KClgLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBieSBgcmFuZG9tSW50KClgIGFuZCBgcmFuZG9tKClgIGZ1" +
- "bmN0aW9ucy4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBuYXRpdmVQcmVwYXJlUmFuZG9tKCk7IC8vIHByZXBhcmUgdGhlIFJORwov" +
- "Ly8gICAgIC8vIC4uLiBkbyB5b3VyIHJhbmRvbSB0aGluZ3MgLi4uCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcu" +
- "b3JnL3JlZi9jb3JlLWFkdmFuY2VkI25hdGl2ZXByZXBhcmVyYW5kb20KLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjbmF0" +
- "aXZlcmFuZG9taXplbHQKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtcmFuZG9tI3JhbmRvbWludAovLy8gKiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1yYW5kb20jcmFuZG9tCi8vLwpAbmFtZShfX3RhY3RfcHJlcGFyZV9yYW5kb20pCm5hdGl2ZSBuYXRpdmVQcmVwYXJlUmFuZG9tKCk7" +
- "CgovLyBSYW5kb20KCi8vIEdlbmVyYXRlcyBhIG5ldyBwc2V1ZG8tcmFuZG9tIHVuc2lnbmVkIDI1Ni1iaXQgaW50ZWdlciB4LgovLyBUaGUgYWxnb3JpdGhtIGlzIGFz" +
- "IGZvbGxvd3M6IGlmIHIgaXMgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgcmFuZG9tIHNlZWQsCi8vIGNvbnNpZGVyZWQgYXMgYSAzMi1ieXRlIGFycmF5IChieSBjb25zdHJ1" +
- "Y3RpbmcgdGhlIGJpZy1lbmRpYW4gcmVwcmVzZW50YXRpb24KLy8gb2YgYW4gdW5zaWduZWQgMjU2LWJpdCBpbnRlZ2VyKSwgdGhlbiBpdHMgc2hhNTEyKHIpIGlzIGNv" +
- "bXB1dGVkOwovLyB0aGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhpcyBoYXNoIGFyZSBzdG9yZWQgYXMgdGhlIG5ldyB2YWx1ZSByJyBvZiB0aGUgcmFuZG9tIHNlZWQsCi8v" +
- "IGFuZCB0aGUgcmVtYWluaW5nIDMyIGJ5dGVzIGFyZSByZXR1cm5lZCBhcyB0aGUgbmV4dCByYW5kb20gdmFsdWUgeC4KYXNtIGZ1biBuYXRpdmVSYW5kb20oKTogSW50" +
- "IHsgUkFORFUyNTYgfQoKLy8gR2VuZXJhdGVzIGEgbmV3IHBzZXVkby1yYW5kb20gaW50ZWdlciB6IGluIHRoZSByYW5nZSAwLi5yYW5nZeKIkjEKLy8gKG9yIHJhbmdl" +
- "Li7iiJIxLCBpZiByYW5nZSA8IDApLgovLyBNb3JlIHByZWNpc2VseSwgYW4gdW5zaWduZWQgcmFuZG9tIHZhbHVlIHggaXMgZ2VuZXJhdGVkIGFzIGluIGBuYXRpdmVS" +
- "YW5kb21gOwovLyB0aGVuIHogOj0geCAqIHJhbmdlIC8gMl4yNTYgaXMgY29tcHV0ZWQuCmFzbSBmdW4gbmF0aXZlUmFuZG9tSW50ZXJ2YWwobWF4OiBJbnQpOiBJbnQg" +
- "eyBSQU5EIH0KCi8vLyBHZW5lcmF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcHNldWRvLXJhbmRvbSB1bnNpZ25lZCAyNTYtYml0IGBJbnRgIHZhbHVlIGB4YC4KLy8vIAov" +
- "Ly8gVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzOiBmaXJzdCwgdGhlIGBzaGE1MTIocilgIGlzIGNvbXB1dGVkLiBUaGVyZSwgYHJgIGlzIGFuIG9sZCAKLy8v" +
- "IHZhbHVlIG9mIHRoZSByYW5kb20gc2VlZCwgd2hpY2ggaXMgdGFrZW4gYXMgYSAzMi1ieXRlIGFycmF5IGNvbnN0cnVjdGVkIGZyb20gdGhlIGJpZy1lbmRpYW4gCi8v" +
- "LyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnNpZ25lZCAyNTYtYml0IGBJbnRgLiBUaGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhpcyBoYXNoIGFyZSBzdG9yZWQgYXMgdGhl" +
- "IG5ldyAKLy8vIHZhbHVlIGByJ2Agb2YgdGhlIHJhbmRvbSBzZWVkLCBhbmQgdGhlIHJlbWFpbmluZyAzMiBieXRlcyBhcmUgcmV0dXJuZWQgYXMgdGhlIG5leHQgcmFu" +
- "ZG9tIHZhbHVlIGB4YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGFsbFlvdXJSYW5kb21CZWxvbmdUb1VzOiBJbnQgPSBy" +
- "YW5kb21JbnQoKTsgLy8gPz8/LCBpdCdzIHJhbmRvbSA6KQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
- "cmUtcmFuZG9tI3JhbmRvbWludAovLy8gCmlubGluZSBmdW4gcmFuZG9tSW50KCk6IEludCB7CiAgICBuYXRpdmVQcmVwYXJlUmFuZG9tKCk7CiAgICByZXR1cm4gbmF0" +
- "aXZlUmFuZG9tKCk7Cn0KCi8vLyBHZW5lcmF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcHNldWRvLXJhbmRvbSB1bnNpZ25lZCBgSW50YCB2YWx1ZSBgeGAgaW4gdGhlIHBy" +
- "b3ZpZGVkIHNlbWktY2xvc2VkIAovLy8gaW50ZXJ2YWw6IGBtaW5gIOKJpCBgeGAgPCBgbWF4YCwgb3IgYG1pbmAg4omlIGB4YCA+IGBtYXhgIGlmIGJvdGggYG1pbmAg" +
- "YW5kIGBtYXhgIGFyZSBuZWdhdGl2ZS4gCi8vLyAKLy8vIE5vdGUgdGhhdCB0aGUgYG1heGAgdmFsdWUgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gdGhlIGludGVydmFsLgov" +
- "Ly8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICByYW5kb20oNDIsIDQzKTsgLy8gNDIsIGFsd2F5cwovLy8gICAgIHJhbmRvbSgwLCA0Mik7" +
- "ICAvLyAwLTQxLCBidXQgbmV2ZXIgNDIKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNy" +
- "YW5kb20KLy8vIAppbmxpbmUgZnVuIHJhbmRvbShtaW46IEludCwgbWF4OiBJbnQpOiBJbnQgewogICAgbmF0aXZlUHJlcGFyZVJhbmRvbSgpOwogICAgcmV0dXJuIG1p" +
- "biArIG5hdGl2ZVJhbmRvbUludGVydmFsKG1heCAtIG1pbik7Cn0KCi8vIE1hdGgKCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVy" +
- "bnMgdGhlIG1pbmltdW0gb2YgdHdvIGBJbnRgIHZhbHVlcyBgeGAgYW5kIGB5YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZXMoKSB7Ci8vLyAgICAgbWlu" +
- "KDEsIDIpOyAgICAgICAgLy8gMQovLy8gICAgIG1pbigyLCAyKTsgICAgICAgIC8vIDIKLy8vICAgICBtaW4oMDA3LCAzKTsgICAgICAvLyAzCi8vLyAgICAgbWluKDB4" +
- "NDUsIDNfMF8wKTsgLy8gNjksIG5pY2UKLy8vICAgICAvLyAg4oaRICAgICDihpEKLy8vICAgICAvLyAgNjkgICAgMzAwCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6" +
- "IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLW1hdGgjbWluCi8vLwphc20gZnVuIG1pbih4OiBJbnQsIHk6IEludCk6IEludCB7IE1JTiB9CgovLy8g" +
- "R2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENvbXB1dGVzIGFuZCByZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byBgSW50YCB2YWx1ZXMgYHhgIGFuZCBgeWAuCi8vLwov" +
- "Ly8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8gICAgIG1heCgxLCAyKTsgICAgICAgIC8vIDIKLy8vICAgICBtYXgoMiwgMik7ICAgICAgICAvLyAyCi8v" +
- "LyAgICAgbWF4KDAwNywgMyk7ICAgICAgLy8gNwovLy8gICAgIG1heCgweDQ1LCAzXzBfMCk7IC8vIDMwMAovLy8gICAgIC8vICDihpEgICAgIOKGkQovLy8gICAgIC8v" +
- "ICA2OSAgICAzMDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtbWF0aCNtYXgKLy8vCmFzbSBmdW4g" +
- "bWF4KHg6IEludCwgeTogSW50KTogSW50IHsgTUFYIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIGFic29sdXRl" +
- "IHZhbHVlIG9mIHRoZSBgSW50YCB2YWx1ZSBgeGAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8gICAgIGFicyg0Mik7ICAgICAgICAvLyA0" +
- "MgovLy8gICAgIGFicygtNDIpOyAgICAgICAvLyA0MgovLy8gICAgIGFicygtKC0oLTQyKSkpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczov" +
- "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1tYXRoI2FicwovLy8KYXNtIGZ1biBhYnMoeDogSW50KTogSW50IHsgQUJTIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24u" +
- "Ci8vLwovLy8gUmV0dXJucyB0aGUgY3VycmVudCBVbml4IHRpbWUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHRpbWVPZmZz" +
- "ZXQ6IEludCA9IG5vdygpICsgMTAwMDsgLy8gdGhvdXNhbmQgc2Vjb25kcyBmcm9tIG5vdygpCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50" +
- "YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbW1vbiNub3cKLy8vCmFzbSBmdW4gbm93KCk6IEludCB7IE5PVyB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENv" +
+ "cmVmL2NvcmUtcmFuZG9tI25hdGl2ZXJhbmRvbWl6ZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1yYW5kb20jcmFuZG9taW50Ci8vLwph" +
+ "c20gZnVuIG5hdGl2ZVJhbmRvbWl6ZSh4OiBJbnQpIHsgQUREUkFORCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIFJhbmRvbWl6ZXMgdGhlIHJhbmRvbSBu" +
+ "dW1iZXIgZ2VuZXJhdG9yIHdpdGggdGhlIGxvZ2ljYWwgdGltZSBvZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gRXF1aXZhbGVudCB0byBjYWxsaW5nIGBuYXRpdmVS" +
+ "YW5kb21pemUoY3VyTHQoKSlgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIG5hdGl2ZVJhbmRvbWl6ZUx0KCk7ICAgICAgICAvLyBu" +
+ "b3csIHJhbmRvbSBudW1iZXJzIGFyZSB1bnByZWRpY3RhYmxlIGZvciB1c2VycywKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHN0aWxs" +
+ "IG1heSBiZSBhZmZlY3RlZCBieSB2YWxpZGF0b3JzIG9yIGNvbGxhdG9ycwovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGV5IGRldGVy" +
+ "bWluZSB0aGUgc2VlZCBvZiB0aGUgY3VycmVudCBibG9jay4KLy8vICAgICBsZXQgaWRrOiBJbnQgPSByYW5kb21JbnQoKTsgLy8gPz8/LCBpdCdzIHJhbmRvbSEKLy8v" +
+ "IH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtcmFuZG9tI25hdGl2ZXJhbmRvbWl6ZWx0Ci8vLyAq" +
+ "IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNuYXRpdmVyYW5kb21pemUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" +
+ "L2NvcmUtY29udGV4dHN0YXRlI2N1cmx0Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNyYW5kb21pbnQKLy8vCmFzbSBmdW4g" +
+ "bmF0aXZlUmFuZG9taXplTHQoKSB7IExUSU1FIEFERFJBTkQgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4KLy8vCi8vLyBQcmVwYXJlcyBhIHJhbmRvbSBudW1iZXIgZ2Vu" +
+ "ZXJhdG9yIGJ5IHVzaW5nIGBuYXRpdmVSYW5kb21pemVMdCgpYC4gQXV0b21hdGljYWxseSBjYWxsZWQgYnkgYHJhbmRvbUludCgpYCBhbmQgYHJhbmRvbSgpYCBmdW5j" +
+ "dGlvbnMuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbmF0aXZlUHJlcGFyZVJhbmRvbSgpOyAvLyBwcmVwYXJlIHRoZSBSTkcKLy8v" +
+ "ICAgICAvLyAuLi4gZG8geW91ciByYW5kb20gdGhpbmdzIC4uLgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
+ "Zy9yZWYvY29yZS1yYW5kb20jbmF0aXZlcHJlcGFyZXJhbmRvbQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1yYW5kb20jbmF0aXZlcmFu" +
+ "ZG9taXplbHQKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtcmFuZG9tI3JhbmRvbWludAovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
+ "Lm9yZy9yZWYvY29yZS1yYW5kb20jcmFuZG9tCi8vLwpAbmFtZShfX3RhY3RfcHJlcGFyZV9yYW5kb20pCm5hdGl2ZSBuYXRpdmVQcmVwYXJlUmFuZG9tKCk7CgovLyBS" +
+ "YW5kb20KCi8vIEdlbmVyYXRlcyBhIG5ldyBwc2V1ZG8tcmFuZG9tIHVuc2lnbmVkIDI1Ni1iaXQgaW50ZWdlciB4LgovLyBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxv" +
+ "d3M6IGlmIHIgaXMgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgcmFuZG9tIHNlZWQsCi8vIGNvbnNpZGVyZWQgYXMgYSAzMi1ieXRlIGFycmF5IChieSBjb25zdHJ1Y3Rpbmcg" +
+ "dGhlIGJpZy1lbmRpYW4gcmVwcmVzZW50YXRpb24KLy8gb2YgYW4gdW5zaWduZWQgMjU2LWJpdCBpbnRlZ2VyKSwgdGhlbiBpdHMgc2hhNTEyKHIpIGlzIGNvbXB1dGVk" +
+ "OwovLyB0aGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhpcyBoYXNoIGFyZSBzdG9yZWQgYXMgdGhlIG5ldyB2YWx1ZSByJyBvZiB0aGUgcmFuZG9tIHNlZWQsCi8vIGFuZCB0" +
+ "aGUgcmVtYWluaW5nIDMyIGJ5dGVzIGFyZSByZXR1cm5lZCBhcyB0aGUgbmV4dCByYW5kb20gdmFsdWUgeC4KYXNtIGZ1biBuYXRpdmVSYW5kb20oKTogSW50IHsgUkFO" +
+ "RFUyNTYgfQoKLy8gR2VuZXJhdGVzIGEgbmV3IHBzZXVkby1yYW5kb20gaW50ZWdlciB6IGluIHRoZSByYW5nZSAwLi5yYW5nZeKIkjEKLy8gKG9yIHJhbmdlLi7iiJIx" +
+ "LCBpZiByYW5nZSA8IDApLgovLyBNb3JlIHByZWNpc2VseSwgYW4gdW5zaWduZWQgcmFuZG9tIHZhbHVlIHggaXMgZ2VuZXJhdGVkIGFzIGluIGBuYXRpdmVSYW5kb21g" +
+ "OwovLyB0aGVuIHogOj0geCAqIHJhbmdlIC8gMl4yNTYgaXMgY29tcHV0ZWQuCmFzbSBmdW4gbmF0aXZlUmFuZG9tSW50ZXJ2YWwobWF4OiBJbnQpOiBJbnQgeyBSQU5E" +
+ "IH0KCi8vLyBHZW5lcmF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcHNldWRvLXJhbmRvbSB1bnNpZ25lZCAyNTYtYml0IGBJbnRgIHZhbHVlIGB4YC4KLy8vIAovLy8gVGhl" +
+ "IGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzOiBmaXJzdCwgdGhlIGBzaGE1MTIocilgIGlzIGNvbXB1dGVkLiBUaGVyZSwgYHJgIGlzIGFuIG9sZCAKLy8vIHZhbHVl" +
+ "IG9mIHRoZSByYW5kb20gc2VlZCwgd2hpY2ggaXMgdGFrZW4gYXMgYSAzMi1ieXRlIGFycmF5IGNvbnN0cnVjdGVkIGZyb20gdGhlIGJpZy1lbmRpYW4gCi8vLyByZXBy" +
+ "ZXNlbnRhdGlvbiBvZiBhbiB1bnNpZ25lZCAyNTYtYml0IGBJbnRgLiBUaGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhpcyBoYXNoIGFyZSBzdG9yZWQgYXMgdGhlIG5ldyAK" +
+ "Ly8vIHZhbHVlIGByJ2Agb2YgdGhlIHJhbmRvbSBzZWVkLCBhbmQgdGhlIHJlbWFpbmluZyAzMiBieXRlcyBhcmUgcmV0dXJuZWQgYXMgdGhlIG5leHQgcmFuZG9tIHZh" +
+ "bHVlIGB4YC4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGFsbFlvdXJSYW5kb21CZWxvbmdUb1VzOiBJbnQgPSByYW5kb21J" +
+ "bnQoKTsgLy8gPz8/LCBpdCdzIHJhbmRvbSA6KQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtcmFu" +
+ "ZG9tI3JhbmRvbWludAovLy8gCmlubGluZSBmdW4gcmFuZG9tSW50KCk6IEludCB7CiAgICBuYXRpdmVQcmVwYXJlUmFuZG9tKCk7CiAgICByZXR1cm4gbmF0aXZlUmFu" +
+ "ZG9tKCk7Cn0KCi8vLyBHZW5lcmF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcHNldWRvLXJhbmRvbSB1bnNpZ25lZCBgSW50YCB2YWx1ZSBgeGAgaW4gdGhlIHByb3ZpZGVk" +
+ "IHNlbWktY2xvc2VkIAovLy8gaW50ZXJ2YWw6IGBtaW5gIOKJpCBgeGAgPCBgbWF4YCwgb3IgYG1pbmAg4omlIGB4YCA+IGBtYXhgIGlmIGJvdGggYG1pbmAgYW5kIGBt" +
+ "YXhgIGFyZSBuZWdhdGl2ZS4gCi8vLyAKLy8vIE5vdGUgdGhhdCB0aGUgYG1heGAgdmFsdWUgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gdGhlIGludGVydmFsLgovLy8gCi8v" +
+ "LyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICByYW5kb20oNDIsIDQzKTsgLy8gNDIsIGFsd2F5cwovLy8gICAgIHJhbmRvbSgwLCA0Mik7ICAvLyAw" +
+ "LTQxLCBidXQgbmV2ZXIgNDIKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXJhbmRvbSNyYW5kb20K" +
+ "Ly8vIAppbmxpbmUgZnVuIHJhbmRvbShtaW46IEludCwgbWF4OiBJbnQpOiBJbnQgewogICAgbmF0aXZlUHJlcGFyZVJhbmRvbSgpOwogICAgcmV0dXJuIG1pbiArIG5h" +
+ "dGl2ZVJhbmRvbUludGVydmFsKG1heCAtIG1pbik7Cn0KCi8vIE1hdGgKCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhl" +
+ "IG1pbmltdW0gb2YgdHdvIGBJbnRgIHZhbHVlcyBgeGAgYW5kIGB5YC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZXMoKSB7Ci8vLyAgICAgbWluKDEsIDIp" +
+ "OyAgICAgICAgLy8gMQovLy8gICAgIG1pbigyLCAyKTsgICAgICAgIC8vIDIKLy8vICAgICBtaW4oMDA3LCAzKTsgICAgICAvLyAzCi8vLyAgICAgbWluKDB4NDUsIDNf" +
+ "MF8wKTsgLy8gNjksIG5pY2UKLy8vICAgICAvLyAg4oaRICAgICDihpEKLy8vICAgICAvLyAgNjkgICAgMzAwCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBz" +
+ "Oi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLW1hdGgjbWluCi8vLwphc20gZnVuIG1pbih4OiBJbnQsIHk6IEludCk6IEludCB7IE1JTiB9CgovLy8gR2xvYmFs" +
+ "IGZ1bmN0aW9uLgovLy8KLy8vIENvbXB1dGVzIGFuZCByZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byBgSW50YCB2YWx1ZXMgYHhgIGFuZCBgeWAuCi8vLwovLy8gYGBg" +
+ "dGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8gICAgIG1heCgxLCAyKTsgICAgICAgIC8vIDIKLy8vICAgICBtYXgoMiwgMik7ICAgICAgICAvLyAyCi8vLyAgICAg" +
+ "bWF4KDAwNywgMyk7ICAgICAgLy8gNwovLy8gICAgIG1heCgweDQ1LCAzXzBfMCk7IC8vIDMwMAovLy8gICAgIC8vICDihpEgICAgIOKGkQovLy8gICAgIC8vICA2OSAg" +
+ "ICAzMDAKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtbWF0aCNtYXgKLy8vCmFzbSBmdW4gbWF4KHg6" +
+ "IEludCwgeTogSW50KTogSW50IHsgTUFYIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIGFic29sdXRlIHZhbHVl" +
+ "IG9mIHRoZSBgSW50YCB2YWx1ZSBgeGAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGVzKCkgewovLy8gICAgIGFicyg0Mik7ICAgICAgICAvLyA0MgovLy8g" +
+ "ICAgIGFicygtNDIpOyAgICAgICAvLyA0MgovLy8gICAgIGFicygtKC0oLTQyKSkpOyAvLyA0MgovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3Mu" +
+ "dGFjdC1sYW5nLm9yZy9yZWYvY29yZS1tYXRoI2FicwovLy8KYXNtIGZ1biBhYnMoeDogSW50KTogSW50IHsgQUJTIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwov" +
+ "Ly8gUmV0dXJucyB0aGUgY3VycmVudCBVbml4IHRpbWUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHRpbWVPZmZzZXQ6IElu" +
+ "dCA9IG5vdygpICsgMTAwMDsgLy8gdGhvdXNhbmQgc2Vjb25kcyBmcm9tIG5vdygpCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxh" +
+ "bmcub3JnL3JlZi9jb3JlLWNvbnRleHRzdGF0ZSNub3cKLy8vCmFzbSBmdW4gbm93KCk6IEludCB7IE5PVyB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENv" +
"bXB1dGVzIGFuZCByZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYSBudW1iZXIgYG51bWAgPiAwIHRvIHRoZSBiYXNlIGBiYXNlYCDiiaUgMS4gUmVzdWx0cyBhcmUgcm91" +
"bmRlZCBkb3duLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBub24tcG9zaXRpdmUgYG51bWAgdmFsdWUgb3IgYSBgYmFzZWAgbGVzcyB0aGFuIDEgdGhyb3cg" +
"YW4gZXJyb3Igd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZXMoKSB7" +
@@ -1384,80 +1386,87 @@ files["std/internal/math.tact"] =
"ICBkbyB7CiAgICAgICAgcSA9IChkaXZjKG51bSwgeCkgLSB4KSAvIDI7CiAgICAgICAgeCArPSBxOwogICAgfSB1bnRpbCAocSA9PSAwKTsKCiAgICByZXR1cm4geDsK" +
"fQo=";
files["std/internal/primitives.tact"] =
- "Ly8vIGBJbnRgIGlzIHRoZSBwcmltaXRpdmUgMjU3LWJpdCBzaWduZWQgaW50ZWdlciB0eXBlLgovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxh" +
- "bmcub3JnL2Jvb2svdHlwZXMvI3ByaW1pdGl2ZS10eXBlcwovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2ludGVnZXJzI3NlcmlhbGl6YXRpb24K" +
- "Ly8vIApwcmltaXRpdmUgSW50OwoKLy8vIGBCb29sYCBpcyB0aGUgY2xhc3NpY2FsIGJvb2xlYW4gdHlwZSwgd2hpY2ggY2FuIGhvbGQgb25seSB0d28gdmFsdWVzOiBg" +
- "dHJ1ZWAgYW5kIGBmYWxzZWAuIAovLy8gSXQgaXMgY29udmVuaWVudCBmb3IgYm9vbGVhbiBhbmQgbG9naWNhbCBvcGVyYXRpb25zLCBhcyB3ZWxsIGFzIGZvciBzdG9y" +
- "aW5nIGZsYWdzLgovLy8gCi8vLyBUaGVyZSBhcmUgbm8gaW1wbGljaXQgdHlwZSBjb252ZXJzaW9ucyBpbiBUYWN0LCBzbyBhZGRpdGlvbiBgK2Agb2YgdHdvIGJvb2xl" +
- "YW4gdmFsdWVzIGlzIAovLy8gbm90IHBvc3NpYmxlLiBIb3dldmVyLCBtYW55IGNvbXBhcmlzb24gb3BlcmF0b3JzIGFyZSBhdmFpbGFibGUuCi8vLyAKLy8vIFBlcnNp" +
- "c3RpbmcgYm9vbHMgdG8gc3RhdGUgaXMgdmVyeSBzcGFjZS1lZmZpY2llbnQsIGFzIHRoZXkgb25seSBvY2N1cHkgMSBiaXQuIAovLy8gU3RvcmluZyAxMDAwIGJvb2xz" +
- "IGluIHN0YXRlIFtjb3N0c10oaHR0cHM6Ly90b24ub3JnL2RvY3MvZGV2ZWxvcC9zbWFydC1jb250cmFjdHMvZmVlcyNob3ctdG8tY2FsY3VsYXRlLWZlZXMpIAovLy8g" +
- "YWJvdXQgMC4wMDA3MiBUT04gcGVyIHllYXIuCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay90eXBlcy8jYm9vbGVhbnMK" +
- "Ly8vIApwcmltaXRpdmUgQm9vbDsKCi8vLyBgQnVpbGRlcmAgaXMgYSBjZWxsIG1hbmlwdWxhdGlvbiBwcmltaXRpdmUgdXNlZCBmb3IgY2VsbCBjcmVhdGlvbiBpbnN0" +
- "cnVjdGlvbnMuIAovLy8gVGhleSBhcmUgaW1tdXRhYmxlIGp1c3QgbGlrZSBjZWxscyBhbmQgYWxsb3cgY29uc3RydWN0aW5nIG5ldyBjZWxscyBmcm9tIHByZXZpb3Vz" +
- "bHkgCi8vLyBzdG9yZWQgdmFsdWVzIGFuZCBjZWxscy4gCi8vLyAKLy8vIFVubGlrZSBjZWxscywgdmFsdWVzIG9mIHR5cGUgYEJ1aWxkZXJgIGFwcGVhciBvbmx5IG9u" +
- "IHRoZSBbVFZNXSBzdGFjayBhbmQgY2Fubm90Ci8vLyBiZSBzdG9yZWQgaW4gcGVyc2lzdGVudCBzdG9yYWdlLiBUaGlzIG1lYW5zLCBmb3IgZXhhbXBsZSwgdGhhdCBw" +
- "ZXJzaXN0ZW50IHN0b3JhZ2UKLy8vIGZpZWxkcyB3aXRoIHR5cGUgYEJ1aWxkZXJgIGFyZSBhY3R1YWxseSBzdG9yZWQgYXMgY2VsbHMgdW5kZXIgdGhlIGhvb2QuCi8v" +
- "LyAKLy8vIFRoZSBgQnVpbGRlcmAgdHlwZSByZXByZXNlbnRzIHBhcnRpYWxseSBjb21wb3NlZCBjZWxscywgZm9yIHdoaWNoIGZhc3Qgb3BlcmF0aW9ucyAKLy8vIHRv" +
- "IGFwcGVuZCBpbnRlZ2Vycywgb3RoZXIgY2VsbHMsIHJlZmVyZW5jZXMgdG8gb3RoZXIgY2VsbHMsIGFuZCBtYW55IG90aGVyIG9wZXJhdGlvbnMgCi8vLyBhcmUgZGVm" +
- "aW5lZC4KLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscy8jYnVpbGRlcgovLy8gCi8vLyBbVFZNXTogaHR0" +
- "cHM6Ly9kb2NzLnRvbi5vcmcvbGVhcm4vdHZtLWluc3RydWN0aW9ucy90dm0tb3ZlcnZpZXcKcHJpbWl0aXZlIEJ1aWxkZXI7CgovLy8gYFNsaWNlYCBpcyBhIGNlbGwg" +
- "bWFuaXB1bGF0aW9uIHByaW1pdGl2ZSB1c2VkIGZvciBjZWxsIHBhcnNpbmcgaW5zdHJ1Y3Rpb25zLgovLy8gVW5saWtlIGNlbGxzLCBzbGljZXMgYXJlIG11dGFibGUg" +
- "YW5kIGFsbG93IGV4dHJhY3Rpb24gb3IgbG9hZGluZyBvZiBkYXRhIHByZXZpb3VzbHkgCi8vLyBzdG9yZWQgaW4gY2VsbHMgdmlhIHNlcmlhbGl6YXRpb24gaW5zdHJ1" +
- "Y3Rpb25zLiBBbHNvIHVubGlrZSBjZWxscywgdmFsdWVzIG9mIHR5cGUgYFNsaWNlYCAKLy8vIGFwcGVhciBvbmx5IG9uIHRoZSBbVFZNXSBzdGFjayBhbmQgY2Fubm90" +
- "IGJlIHN0b3JlZCBpbiBwZXJzaXN0ZW50IHN0b3JhZ2UuIAovLy8gVGhpcyBtZWFucywgZm9yIGV4YW1wbGUsIHRoYXQgcGVyc2lzdGVudCBzdG9yYWdlIGZpZWxkcyB3" +
- "aXRoIHR5cGUgYFNsaWNlYCB3b3VsZCBhY3R1YWxseSAKLy8vIGJlIHN0b3JlZCBhcyBjZWxscyB1bmRlciB0aGUgaG9vZC4KLy8vCi8vLyBUaGUgYFNsaWNlYCB0eXBl" +
- "IHJlcHJlc2VudHMgZWl0aGVyIHRoZSByZW1haW5kZXIgb2YgYSBwYXJ0aWFsbHkgcGFyc2VkIGNlbGwgb3IgYSB2YWx1ZSAoc3ViY2VsbCkgCi8vLyByZXNpZGluZyBp" +
- "bnNpZGUgc3VjaCBhIGNlbGwsIGV4dHJhY3RlZCBmcm9tIGl0IGJ5IGEgcGFyc2luZyBpbnN0cnVjdGlvbi4KLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3Mu" +
- "dGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscy8jc2xpY2UKLy8vIAovLy8gW1RWTV06IGh0dHBzOi8vZG9jcy50b24ub3JnL2xlYXJuL3R2bS1pbnN0cnVjdGlvbnMv" +
- "dHZtLW92ZXJ2aWV3CnByaW1pdGl2ZSBTbGljZTsKCi8vLyBgQ2VsbGAgaXMgYSBwcmltaXRpdmUgYW5kIGEgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIG9yZGluYXJpbHkg" +
- "Y29uc2lzdHMgb2YgdXAgdG8gMTAyMyBjb250aW51b3VzbHkgCi8vLyBsYWlkIG91dCBiaXRzIGFuZCB1cCB0byA0IHJlZmVyZW5jZXMgKHJlZnMpIHRvIG90aGVyIGNl" +
- "bGxzLiBDaXJjdWxhciByZWZlcmVuY2VzIGFyZSBmb3JiaWRkZW4gYW5kIAovLy8gY2Fubm90IGJlIGNyZWF0ZWQgYnkgbWVhbnMgb2YgW1RWTV0sIHdoaWNoIG1lYW5z" +
- "IGNlbGxzIGNhbiBiZSB2aWV3ZWQgYXMgW3F1YWR0cmVlc10KLy8vIG9yIFtkaXJlY3RlZCBhY3ljbGljIGdyYXBocyAoREFHcyldW2RhZ10gb2YgdGhlbXNlbHZlcy4g" +
- "Ci8vLyAKLy8vIENvbnRyYWN0IGNvZGUgaXRzZWxmIGlzIHJlcHJlc2VudGVkIGJ5IGEgdHJlZSBvZiBjZWxscy4KLy8vCi8vLyBDZWxscyBhbmQgY2VsbCBwcmltaXRp" +
- "dmVzIGFyZSBiaXQtb3JpZW50ZWQsIG5vdCBieXRlLW9yaWVudGVkOiBbVFZNXSByZWdhcmRzIGRhdGEga2VwdCBpbiBjZWxscyAKLy8vIGFzIHNlcXVlbmNlcyAoc3Ry" +
- "aW5ncyBvciBzdHJlYW1zKSBvZiB1cCB0byAxMDIzIGJpdHMsIG5vdCBieXRlcy4gSWYgbmVjZXNzYXJ5LCBjb250cmFjdHMgYXJlIAovLy8gZnJlZSB0byB1c2UsIGZv" +
- "ciBleGFtcGxlLCAyMS1iaXQgaW50ZWdlciBmaWVsZHMgc2VyaWFsaXplZCBpbnRvIFtUVk1dIGNlbGxzLCB0aHVzIHVzaW5nIGZld2VyIAovLy8gcGVyc2lzdGVudCBz" +
- "dG9yYWdlIGJ5dGVzIHRvIHJlcHJlc2VudCB0aGUgc2FtZSBkYXRhLgovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3Jl" +
- "LWNlbGxzLyNjZWxsCi8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzLyNjZWxsLXByaW1pdGl2ZXMKLy8vIAovLy8gW1RWTV06IGh0" +
- "dHBzOi8vZG9jcy50b24ub3JnL2xlYXJuL3R2bS1pbnN0cnVjdGlvbnMvdHZtLW92ZXJ2aWV3Ci8vLyBbcXVhZHRyZWVzXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn" +
- "L3dpa2kvUXVhZHRyZWUKLy8vIFtkYWddOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EaXJlY3RlZF9hY3ljbGljX2dyYXBoCnByaW1pdGl2ZSBDZWxsOwoK" +
- "Ly8vIGBBZGRyZXNzYCBpcyBhIHByaW1pdGl2ZSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIFtzbWFydCBjb250cmFjdCBhZGRyZXNzXSBpbiBUT04gQmxvY2tjaGFpbi4K" +
- "Ly8vIAovLy8gW3NtYXJ0IGNvbnRyYWN0IGFkZHJlc3NdOiBodHRwczovL2RvY3MudG9uLm9yZy9sZWFybi9vdmVydmlld3MvYWRkcmVzc2VzI2FkZHJlc3Mtb2Ytc21h" +
- "cnQtY29udHJhY3QKcHJpbWl0aXZlIEFkZHJlc3M7CgovLy8gYFN0cmluZ2AgaXMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIHdoaWNoIG1lYW5z" +
- "IHRoYXQgb25jZSBhIGBTdHJpbmdgIGlzIGNyZWF0ZWQsCi8vLyBpdCBjYW5ub3QgYmUgY2hhbmdlZC4gU3RyaW5ncyBhcmUgdXNlZnVsIGZvciBzdG9yaW5nIHRleHQs" +
- "IHNvIHRoZXkgY2FuIGJlIGNvbnZlcnRlZCB0byBhIGBDZWxsYAovLy8gdHlwZSB0byBiZSB1c2VkIGFzIG1lc3NhZ2UgYm9kaWVzLgovLy8gCi8vLyBUbyBjb25jYXRl" +
- "bmF0ZSBzdHJpbmdzIGluIGEgZ2FzLWVmZmljaWVudCB3YXksIHVzZSBhIGBTdHJpbmdCdWlsZGVyYC4KLy8vIAovLy8gVG8gdXNlIGBTdHJpbmdgIGxpdGVyYWxzIGRp" +
- "cmVjdGx5LCBzZWU6IFtTdHJpbmcgbGl0ZXJhbHNdLgovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXN0cmluZ3MK" +
- "Ly8vIAovLy8gW1N0cmluZyBsaXRlcmFsc106IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhwcmVzc2lvbnMjc3RyaW5nLWxpdGVyYWxzCi8vLyAKcHJp" +
- "bWl0aXZlIFN0cmluZzsKCi8vLyBgU3RyaW5nQnVpbGRlcmAgaXMgYSBwcmltaXRpdmUgdXNlZCBmb3IgZWZmaWNpZW50IHN0cmluZyBjb25jYXRlbmF0aW9uLgovLy8g" +
- "Ci8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXN0cmluZ3MKLy8vIApwcmltaXRpdmUgU3RyaW5nQnVpbGRlcjsK";
+ "Ly8vIGBJbnRgIGlzIHRoZSBwcmltaXRpdmUgMjU3LWJpdCBzaWduZWQgaW50ZWdlciB0eXBlLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcv" +
+ "Ym9vay9pbnRlZ2VycwovLy8KcHJpbWl0aXZlIEludDsKCi8vLyBgQm9vbGAgaXMgdGhlIGNsYXNzaWNhbCBib29sZWFuIHR5cGUsIHdoaWNoIGNhbiBob2xkIG9ubHkg" +
+ "dHdvIHZhbHVlczogYHRydWVgIGFuZCBgZmFsc2VgLgovLy8gSXQgaXMgY29udmVuaWVudCBmb3IgYm9vbGVhbiBhbmQgbG9naWNhbCBvcGVyYXRpb25zLCBhcyB3ZWxs" +
+ "IGFzIGZvciBzdG9yaW5nIGZsYWdzLgovLy8KLy8vIFRoZXJlIGFyZSBubyBpbXBsaWNpdCB0eXBlIGNvbnZlcnNpb25zIGluIFRhY3QsIHNvIGFkZGl0aW9uIGArYCBv" +
+ "ZiB0d28gYm9vbGVhbiB2YWx1ZXMgaXMKLy8vIG5vdCBwb3NzaWJsZS4gSG93ZXZlciwgbWFueSBjb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgYXZhaWxhYmxlLgovLy8K" +
+ "Ly8vIFBlcnNpc3RpbmcgYm9vbHMgdG8gc3RhdGUgaXMgdmVyeSBzcGFjZS1lZmZpY2llbnQsIGFzIHRoZXkgb25seSBvY2N1cHkgMSBiaXQuCi8vLyBTdG9yaW5nIDEw" +
+ "MDAgYm9vbHMgaW4gc3RhdGUgW2Nvc3RzXShodHRwczovL3Rvbi5vcmcvZG9jcy9kZXZlbG9wL3NtYXJ0LWNvbnRyYWN0cy9mZWVzI2hvdy10by1jYWxjdWxhdGUtZmVl" +
+ "cykKLy8vIGFib3V0IDAuMDAwNzIgVE9OIHBlciB5ZWFyLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay90eXBlcyNib29sZWFucwov" +
+ "Ly8KcHJpbWl0aXZlIEJvb2w7CgovLy8gYEJ1aWxkZXJgIGlzIGEgY2VsbCBtYW5pcHVsYXRpb24gcHJpbWl0aXZlIHVzZWQgZm9yIGNlbGwgY3JlYXRpb24gaW5zdHJ1" +
+ "Y3Rpb25zLgovLy8gVGhleSBhcmUgaW1tdXRhYmxlIGp1c3QgbGlrZSBjZWxscyBhbmQgYWxsb3cgY29uc3RydWN0aW5nIG5ldyBjZWxscyBmcm9tIHByZXZpb3VzbHkK" +
+ "Ly8vIHN0b3JlZCB2YWx1ZXMgYW5kIGNlbGxzLgovLy8KLy8vIFVubGlrZSBjZWxscywgdmFsdWVzIG9mIHR5cGUgYEJ1aWxkZXJgIGFwcGVhciBvbmx5IG9uIHRoZSBb" +
+ "VFZNXSBzdGFjayBhbmQgY2Fubm90Ci8vLyBiZSBzdG9yZWQgaW4gcGVyc2lzdGVudCBzdG9yYWdlLiBUaGlzIG1lYW5zLCBmb3IgZXhhbXBsZSwgdGhhdCBwZXJzaXN0" +
+ "ZW50IHN0b3JhZ2UKLy8vIGZpZWxkcyB3aXRoIHR5cGUgYEJ1aWxkZXJgIGFyZSBhY3R1YWxseSBzdG9yZWQgYXMgY2VsbHMgdW5kZXIgdGhlIGhvb2QuCi8vLwovLy8g" +
+ "VGhlIGBCdWlsZGVyYCB0eXBlIHJlcHJlc2VudHMgcGFydGlhbGx5IGNvbXBvc2VkIGNlbGxzLCBmb3Igd2hpY2ggZmFzdCBvcGVyYXRpb25zCi8vLyB0byBhcHBlbmQg" +
+ "aW50ZWdlcnMsIG90aGVyIGNlbGxzLCByZWZlcmVuY2VzIHRvIG90aGVyIGNlbGxzLCBhbmQgbWFueSBvdGhlciBvcGVyYXRpb25zCi8vLyBhcmUgZGVmaW5lZC4KLy8v" +
+ "Ci8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svY2VsbHMjYnVpbGRlcnMKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcv" +
+ "cmVmL2NvcmUtY2VsbHMKLy8vCi8vLyBbVFZNXTogaHR0cHM6Ly9kb2NzLnRvbi5vcmcvbGVhcm4vdHZtLWluc3RydWN0aW9ucy90dm0tb3ZlcnZpZXcKcHJpbWl0aXZl" +
+ "IEJ1aWxkZXI7CgovLy8gYFNsaWNlYCBpcyBhIGNlbGwgbWFuaXB1bGF0aW9uIHByaW1pdGl2ZSB1c2VkIGZvciBjZWxsIHBhcnNpbmcgaW5zdHJ1Y3Rpb25zLgovLy8g" +
+ "VW5saWtlIGNlbGxzLCBzbGljZXMgYXJlIG11dGFibGUgYW5kIGFsbG93IGV4dHJhY3Rpb24gb3IgbG9hZGluZyBvZiBkYXRhIHByZXZpb3VzbHkKLy8vIHN0b3JlZCBp" +
+ "biBjZWxscyB2aWEgc2VyaWFsaXphdGlvbiBpbnN0cnVjdGlvbnMuIEFsc28gdW5saWtlIGNlbGxzLCB2YWx1ZXMgb2YgdHlwZSBgU2xpY2VgCi8vLyBhcHBlYXIgb25s" +
+ "eSBvbiB0aGUgW1RWTV0gc3RhY2sgYW5kIGNhbm5vdCBiZSBzdG9yZWQgaW4gcGVyc2lzdGVudCBzdG9yYWdlLgovLy8gVGhpcyBtZWFucywgZm9yIGV4YW1wbGUsIHRo" +
+ "YXQgcGVyc2lzdGVudCBzdG9yYWdlIGZpZWxkcyB3aXRoIHR5cGUgYFNsaWNlYCB3b3VsZCBhY3R1YWxseQovLy8gYmUgc3RvcmVkIGFzIGNlbGxzIHVuZGVyIHRoZSBo" +
+ "b29kLgovLy8KLy8vIFRoZSBgU2xpY2VgIHR5cGUgcmVwcmVzZW50cyBlaXRoZXIgdGhlIHJlbWFpbmRlciBvZiBhIHBhcnRpYWxseSBwYXJzZWQgY2VsbCBvciBhIHZh" +
+ "bHVlIChzdWJjZWxsKQovLy8gcmVzaWRpbmcgaW5zaWRlIHN1Y2ggYSBjZWxsLCBleHRyYWN0ZWQgZnJvbSBpdCBieSBhIHBhcnNpbmcgaW5zdHJ1Y3Rpb24uCi8vLwov" +
+ "Ly8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2NlbGxzI3NsaWNlcwovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYv" +
+ "Y29yZS1jZWxscwovLy8KLy8vIFtUVk1dOiBodHRwczovL2RvY3MudG9uLm9yZy9sZWFybi90dm0taW5zdHJ1Y3Rpb25zL3R2bS1vdmVydmlldwpwcmltaXRpdmUgU2xp" +
+ "Y2U7CgovLy8gYENlbGxgIGlzIGEgcHJpbWl0aXZlIGFuZCBhIGRhdGEgc3RydWN0dXJlLCB3aGljaCBvcmRpbmFyaWx5IGNvbnNpc3RzIG9mIHVwIHRvIDEwMjMgY29u" +
+ "dGludW91c2x5Ci8vLyBsYWlkIG91dCBiaXRzIGFuZCB1cCB0byA0IHJlZmVyZW5jZXMgKHJlZnMpIHRvIG90aGVyIGNlbGxzLiBDaXJjdWxhciByZWZlcmVuY2VzIGFy" +
+ "ZSBmb3JiaWRkZW4gYW5kCi8vLyBjYW5ub3QgYmUgY3JlYXRlZCBieSBtZWFucyBvZiBbVFZNXSwgd2hpY2ggbWVhbnMgY2VsbHMgY2FuIGJlIHZpZXdlZCBhcyBbcXVh" +
+ "ZHRyZWVzXQovLy8gb3IgW2RpcmVjdGVkIGFjeWNsaWMgZ3JhcGhzIChEQUdzKV1bZGFnXSBvZiB0aGVtc2VsdmVzLgovLy8KLy8vIENvbnRyYWN0IGNvZGUgaXRzZWxm" +
+ "IGlzIHJlcHJlc2VudGVkIGJ5IGEgdHJlZSBvZiBjZWxscy4KLy8vCi8vLyBDZWxscyBhbmQgY2VsbCBwcmltaXRpdmVzIGFyZSBiaXQtb3JpZW50ZWQsIG5vdCBieXRl" +
+ "LW9yaWVudGVkOiBbVFZNXSByZWdhcmRzIGRhdGEga2VwdCBpbiBjZWxscwovLy8gYXMgc2VxdWVuY2VzIChzdHJpbmdzIG9yIHN0cmVhbXMpIG9mIHVwIHRvIDEwMjMg" +
+ "Yml0cywgbm90IGJ5dGVzLiBJZiBuZWNlc3NhcnksIGNvbnRyYWN0cyBhcmUKLy8vIGZyZWUgdG8gdXNlLCBmb3IgZXhhbXBsZSwgMjEtYml0IGludGVnZXIgZmllbGRz" +
+ "IHNlcmlhbGl6ZWQgaW50byBbVFZNXSBjZWxscywgdGh1cyB1c2luZyBmZXdlcgovLy8gcGVyc2lzdGVudCBzdG9yYWdlIGJ5dGVzIHRvIHJlcHJlc2VudCB0aGUgc2Ft" +
+ "ZSBkYXRhLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9jZWxscyNjZWxscwovLy8gKiBodHRwczovL2RvY3MudGFjdC1s" +
+ "YW5nLm9yZy9yZWYvY29yZS1jZWxscwovLy8KLy8vIFtUVk1dOiBodHRwczovL2RvY3MudG9uLm9yZy9sZWFybi90dm0taW5zdHJ1Y3Rpb25zL3R2bS1vdmVydmlldwov" +
+ "Ly8gW3F1YWR0cmVlc106IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1F1YWR0cmVlCi8vLyBbZGFnXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv" +
+ "RGlyZWN0ZWRfYWN5Y2xpY19ncmFwaApwcmltaXRpdmUgQ2VsbDsKCi8vLyBgQWRkcmVzc2AgaXMgYSBwcmltaXRpdmUgdHlwZSB0aGF0IHJlcHJlc2VudHMgYSBbc21h" +
+ "cnQgY29udHJhY3QgYWRkcmVzc10gaW4gVE9OIEJsb2NrY2hhaW4uCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL3R5cGVzI3ByaW1p" +
+ "dGl2ZS10eXBlcwovLy8KLy8vIFtzbWFydCBjb250cmFjdCBhZGRyZXNzXTogaHR0cHM6Ly9kb2NzLnRvbi5vcmcvbGVhcm4vb3ZlcnZpZXdzL2FkZHJlc3NlcyNhZGRy" +
+ "ZXNzLW9mLXNtYXJ0LWNvbnRyYWN0CnByaW1pdGl2ZSBBZGRyZXNzOwoKLy8vIGBTdHJpbmdgIGlzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLCB3" +
+ "aGljaCBtZWFucyB0aGF0IG9uY2UgYSBgU3RyaW5nYCBpcyBjcmVhdGVkLAovLy8gaXQgY2Fubm90IGJlIGNoYW5nZWQuIFN0cmluZ3MgYXJlIHVzZWZ1bCBmb3Igc3Rv" +
+ "cmluZyB0ZXh0LCBzbyB0aGV5IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBgQ2VsbGAKLy8vIHR5cGUgdG8gYmUgdXNlZCBhcyBtZXNzYWdlIGJvZGllcy4KLy8vCi8vLyBU" +
+ "byBjb25jYXRlbmF0ZSBzdHJpbmdzLCB1c2UgYSBgU3RyaW5nQnVpbGRlcmAuCi8vLwovLy8gVG8gdXNlIGBTdHJpbmdgIGxpdGVyYWxzIGRpcmVjdGx5LCBzZWU6IFtT" +
+ "dHJpbmcgbGl0ZXJhbHNdLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay90eXBlcyNwcmltaXRpdmUtdHlwZXMKLy8vICog" +
+ "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncwovLy8KLy8vIFtTdHJpbmcgbGl0ZXJhbHNdOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
+ "Zy9ib29rL2V4cHJlc3Npb25zI3N0cmluZy1saXRlcmFscwovLy8KcHJpbWl0aXZlIFN0cmluZzsKCi8vLyBgU3RyaW5nQnVpbGRlcmAgaXMgYSBwcmltaXRpdmUgdXNl" +
+ "ZCBmb3IgZWZmaWNpZW50IHN0cmluZyBjb25jYXRlbmF0aW9uLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay90eXBlcyNw" +
+ "cmltaXRpdmUtdHlwZXMKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncwovLy8KcHJpbWl0aXZlIFN0cmluZ0J1aWxkZXI7Cg==";
files["std/internal/reserve.tact"] =
"Ly8vIEV4ZWN1dGVzIHRoZSBuYXRpdmUgYFJBV1JFU0VSVkVgIGluc3RydWN0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBhbW91bnQgYW5kIG1vZGUuCi8vLyBUaGUgYFJB" +
- "V1JFU0VSVkVgIGluc3RydWN0aW9uIGNyZWF0ZXMgYW4gb3V0cHV0IGFjdGlvbiB0byByZXNlcnZlIGEgc3BlY2lmaWMgYW1vdW50IG9mIAovLy8gW25hbm9Ub25jb2lu" +
- "XSBmcm9tIHRoZSByZW1haW5pbmcgYmFsYW5jZSBvZiB0aGUgYWNjb3VudC4KLy8vIAovLy8gVGhlIGBSQVdSRVNFUlZFYCBpbnN0cnVjdGlvbiB0YWtlcyB0d28gYXJn" +
- "dW1lbnRzOgovLy8gKiBgYW1vdW50YDogVGhlIG51bWJlciBvZiBbbmFub1RvbmNvaW5dIHRvIHJlc2VydmUuCi8vLyAqIGBtb2RlYDogRGV0ZXJtaW5lcyB0aGUgcmVz" +
- "ZXJ2YXRpb24gYmVoYXZpb3IuCi8vLyAKLy8vIFRoZSBgUkFXUkVTRVJWRWAgaW5zdHJ1Y3Rpb24gaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGNyZWF0aW5nIGFuIG91" +
- "dGJvdW5kIG1lc3NhZ2UgCi8vLyBjYXJyeWluZyB0aGUgc3BlY2lmaWVkIGBhbW91bnRgIG9mIFtuYW5vVG9uY29pbl0gKG9yIGBiIC0gYW1vdW50YCBbbmFub1RvbmNv" +
- "aW5dLCAKLy8vIHdoZXJlIGBiYCBpcyB0aGUgcmVtYWluaW5nIGJhbGFuY2UpIHRvIG9uZXNlbGYuCi8vLyBUaGlzIGVuc3VyZXMgdGhhdCBzdWJzZXF1ZW50IG91dHB1" +
- "dCBhY3Rpb25zIGNhbm5vdCBzcGVuZCBtb3JlIG1vbmV5IHRoYW4gdGhlIHJlbWFpbmRlci4KLy8vIAovLy8gSXQgaXMgcG9zc2libGUgdG8gdXNlIHJhdyBgSW50YCB2" +
- "YWx1ZXMgYW5kIG1hbnVhbGx5IHByb3ZpZGUgdGhlbSBmb3IgdGhlIGBtb2RlYCwgCi8vLyBidXQgZm9yIHlvdXIgY29udmVuaWVuY2UsIHRoZXJlJ3MgYSBzZXQgb2Yg" +
- "Y29uc3RhbnRzIHlvdSBtYXkgdXNlIHRvIGNvbnN0cnVjdCB0aGUgCi8vLyBjb21wb3VuZCBgbW9kZWAgd2l0aCBlYXNlLgovLy8gCi8vLyBOT1RFOiBDdXJyZW50bHks" +
- "IGBhbW91bnRgIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgYW5kIGBtb2RlYCBtdXN0IGJlIGluIHRoZQovLy8gcmFuZ2UgYDAuLjMxYCwgaW5jbHVzaXZl" +
- "LgovLy8gCi8vLyBBZGRpdGlvbmFsbHksIGF0dGVtcHRzIHRvIHF1ZXVlIG1vcmUgdGhhbiAyNTUgcmVzZXJ2YXRpb25zIGluIG9uZSB0cmFuc2FjdGlvbiB0aHJvdyBh" +
- "bgovLy8gZXhjZXB0aW9uIHdpdGggW2V4aXQgY29kZSAzM106IGBBY3Rpb24gbGlzdCBpcyB0b28gbG9uZ2AuCi8vLyAKLy8vIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXMg" +
- "Z2FzLWV4cGVuc2l2ZSBhbmQgdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLyAKLy8vIFtleGl0IGNvZGUgMzNdOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
- "Zy9ib29rL2V4aXQtY29kZXMjMzMKLy8vIFtuYW5vVG9uY29pbl06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svaW50ZWdlcnMjbmFub3RvbmNvaW4KYXNt" +
- "IGZ1biBuYXRpdmVSZXNlcnZlKGFtb3VudDogSW50LCBtb2RlOiBJbnQpIHsgUkFXUkVTRVJWRSB9CgovLy8gUmVzZXJ2ZXMgZXhhY3RseSB0aGUgc3BlY2lmaWVkIGBh" +
- "bW91bnRgIG9mIAovLy8gW25hbm9Ub25jb2luXShodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2ludGVnZXJzI25hbm90b25jb2luKS4KY29uc3QgUmVzZXJ2" +
- "ZUV4YWN0OiBJbnQgPSAwOwoKLy8vIFJlc2VydmVzIGFsbCBidXQgdGhlIHNwZWNpZmllZCBgYW1vdW50YCBvZiAKLy8vIFtuYW5vVG9uY29pbl0oaHR0cHM6Ly9kb2Nz" +
- "LnRhY3QtbGFuZy5vcmcvYm9vay9pbnRlZ2VycyNuYW5vdG9uY29pbikuCmNvbnN0IFJlc2VydmVBbGxFeGNlcHQ6IEludCA9IDE7CgovLy8gUmVzZXJ2ZXMgYXQgbW9z" +
- "dCB0aGUgc3BlY2lmaWVkIGBhbW91bnRgIG9mIAovLy8gW25hbm9Ub25jb2luXShodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2ludGVnZXJzI25hbm90b25j" +
- "b2luKS4KY29uc3QgUmVzZXJ2ZUF0TW9zdDogSW50ID0gMjsKCi8vLyBJbmNyZWFzZXMgdGhlIGBhbW91bnRgIGJ5IHRoZSBvcmlnaW5hbCBiYWxhbmNlIG9mIHRoZSBj" +
- "dXJyZW50IGFjY291bnQgCi8vLyAoYmVmb3JlIHRoZSBjb21wdXRlIHBoYXNlKSwgaW5jbHVkaW5nIGFsbCBleHRyYSBjdXJyZW5jaWVzLgpjb25zdCBSZXNlcnZlQWRk" +
- "T3JpZ2luYWxCYWxhbmNlOiBJbnQgPSA0OwoKLy8vIE5lZ2F0ZXMgdGhlIGBhbW91bnRgIHZhbHVlIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSByZXNlcnZhdGlvbi4KY29u" +
- "c3QgUmVzZXJ2ZUludmVydFNpZ246IEludCA9IDg7CgovLy8gQm91bmNlcyB0aGUgdHJhbnNhY3Rpb24gaWYgdGhlIHJlc2VydmF0aW9uIGZhaWxzLgpjb25zdCBSZXNl" +
- "cnZlQm91bmNlSWZBY3Rpb25GYWlsOiBJbnQgPSAxNjsK";
+ "V1JFU0VSVkVgIGluc3RydWN0aW9uIGNyZWF0ZXMgYW4gb3V0cHV0IGFjdGlvbiB0byByZXNlcnZlIGEgc3BlY2lmaWMgYW1vdW50IG9mCi8vLyBbbmFub1RvbmNvaW5d" +
+ "IGZyb20gdGhlIHJlbWFpbmluZyBiYWxhbmNlIG9mIHRoZSBhY2NvdW50LgovLy8KLy8vIFRoZSBgUkFXUkVTRVJWRWAgaW5zdHJ1Y3Rpb24gdGFrZXMgdHdvIGFyZ3Vt" +
+ "ZW50czoKLy8vICogYGFtb3VudGA6IFRoZSBudW1iZXIgb2YgW25hbm9Ub25jb2luXSB0byByZXNlcnZlLgovLy8gKiBgbW9kZWA6IERldGVybWluZXMgdGhlIHJlc2Vy" +
+ "dmF0aW9uIGJlaGF2aW9yLgovLy8KLy8vIFRoZSBgUkFXUkVTRVJWRWAgaW5zdHJ1Y3Rpb24gaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGNyZWF0aW5nIGFuIG91dGJv" +
+ "dW5kIG1lc3NhZ2UKLy8vIGNhcnJ5aW5nIHRoZSBzcGVjaWZpZWQgYGFtb3VudGAgb2YgW25hbm9Ub25jb2luXSAob3IgYGIgLSBhbW91bnRgIFtuYW5vVG9uY29pbl0s" +
+ "Ci8vLyB3aGVyZSBgYmAgaXMgdGhlIHJlbWFpbmluZyBiYWxhbmNlKSB0byBvbmVzZWxmLgovLy8gVGhpcyBlbnN1cmVzIHRoYXQgc3Vic2VxdWVudCBvdXRwdXQgYWN0" +
+ "aW9ucyBjYW5ub3Qgc3BlbmQgbW9yZSBtb25leSB0aGFuIHRoZSByZW1haW5kZXIuCi8vLwovLy8gSXQgaXMgcG9zc2libGUgdG8gdXNlIHJhdyBgSW50YCB2YWx1ZXMg" +
+ "YW5kIG1hbnVhbGx5IHByb3ZpZGUgdGhlbSBmb3IgdGhlIGBtb2RlYCwKLy8vIGJ1dCBmb3IgeW91ciBjb252ZW5pZW5jZSwgdGhlcmUncyBhIHNldCBvZiBjb25zdGFu" +
+ "dHMgeW91IG1heSB1c2UgdG8gY29uc3RydWN0IHRoZQovLy8gY29tcG91bmQgYG1vZGVgIHdpdGggZWFzZS4KLy8vCi8vLyBOT1RFOiBDdXJyZW50bHksIGBhbW91bnRg" +
+ "IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgYW5kIGBtb2RlYCBtdXN0IGJlIGluIHRoZQovLy8gcmFuZ2UgYDAuLjMxYCwgaW5jbHVzaXZlLgovLy8KLy8v" +
+ "IEFkZGl0aW9uYWxseSwgYXR0ZW1wdHMgdG8gcXVldWUgbW9yZSB0aGFuIDI1NSByZXNlcnZhdGlvbnMgaW4gb25lIHRyYW5zYWN0aW9uIHRocm93IGFuCi8vLyBleGNl" +
+ "cHRpb24gd2l0aCBbZXhpdCBjb2RlIDMzXTogYEFjdGlvbiBsaXN0IGlzIHRvbyBsb25nYC4KLy8vCi8vLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGlzIGdhcy1leHBlbnNp" +
+ "dmUgYW5kIHVzZXMgNTAwIGdhcyB1bml0cyBvciBtb3JlLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29udGV4dHN0YXRl" +
+ "I25hdGl2ZXJlc2VydmUKLy8vCi8vLyBbZXhpdCBjb2RlIDMzXTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leGl0LWNvZGVzIzMzCi8vLyBbbmFub1Rv" +
+ "bmNvaW5dOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2ludGVnZXJzI25hbm90b25jb2luCmFzbSBmdW4gbmF0aXZlUmVzZXJ2ZShhbW91bnQ6IEludCwg" +
+ "bW9kZTogSW50KSB7IFJBV1JFU0VSVkUgfQoKLy8vIFJlc2VydmVzIGV4YWN0bHkgdGhlIHNwZWNpZmllZCBgYW1vdW50YCBvZgovLy8gW25hbm9Ub25jb2luXShodHRw" +
+ "czovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2ludGVnZXJzI25hbm90b25jb2luKS4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9j" +
+ "b3JlLWNvbnRleHRzdGF0ZSNuYXRpdmVyZXNlcnZlLWJhc2UtbW9kZXMKLy8vCmNvbnN0IFJlc2VydmVFeGFjdDogSW50ID0gMDsKCi8vLyBSZXNlcnZlcyBhbGwgYnV0" +
+ "IHRoZSBzcGVjaWZpZWQgYGFtb3VudGAgb2YKLy8vIFtuYW5vVG9uY29pbl0oaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9pbnRlZ2VycyNuYW5vdG9uY29p" +
+ "bikuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jb250ZXh0c3RhdGUjbmF0aXZlcmVzZXJ2ZS1iYXNlLW1vZGVzCi8vLwpj" +
+ "b25zdCBSZXNlcnZlQWxsRXhjZXB0OiBJbnQgPSAxOwoKLy8vIFJlc2VydmVzIGF0IG1vc3QgdGhlIHNwZWNpZmllZCBgYW1vdW50YCBvZgovLy8gW25hbm9Ub25jb2lu" +
+ "XShodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2ludGVnZXJzI25hbm90b25jb2luKS4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3Jn" +
+ "L3JlZi9jb3JlLWNvbnRleHRzdGF0ZSNuYXRpdmVyZXNlcnZlLWJhc2UtbW9kZXMKLy8vCmNvbnN0IFJlc2VydmVBdE1vc3Q6IEludCA9IDI7CgovLy8gSW5jcmVhc2Vz" +
+ "IHRoZSBgYW1vdW50YCBieSB0aGUgb3JpZ2luYWwgYmFsYW5jZSBvZiB0aGUgY3VycmVudCBhY2NvdW50Ci8vLyAoYmVmb3JlIHRoZSBjb21wdXRlIHBoYXNlKSwgaW5j" +
+ "bHVkaW5nIGFsbCBleHRyYSBjdXJyZW5jaWVzLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29udGV4dHN0YXRlI25hdGl2" +
+ "ZXJlc2VydmUtb3B0aW9uYWwtZmxhZ3MKLy8vCmNvbnN0IFJlc2VydmVBZGRPcmlnaW5hbEJhbGFuY2U6IEludCA9IDQ7CgovLy8gTmVnYXRlcyB0aGUgYGFtb3VudGAg" +
+ "dmFsdWUgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIHJlc2VydmF0aW9uLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29udGV4" +
+ "dHN0YXRlI25hdGl2ZXJlc2VydmUtb3B0aW9uYWwtZmxhZ3MKLy8vCmNvbnN0IFJlc2VydmVJbnZlcnRTaWduOiBJbnQgPSA4OwoKLy8vIEJvdW5jZXMgdGhlIHRyYW5z" +
+ "YWN0aW9uIGlmIHRoZSByZXNlcnZhdGlvbiBmYWlscy4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbnRleHRzdGF0ZSNu" +
+ "YXRpdmVyZXNlcnZlLW9wdGlvbmFsLWZsYWdzCi8vLwpjb25zdCBSZXNlcnZlQm91bmNlSWZBY3Rpb25GYWlsOiBJbnQgPSAxNjsK";
files["std/internal/send.tact"] =
"Ly8vIE9yZGluYXJ5IG1lc3NhZ2UgKGRlZmF1bHQpLgovLy8KLy8vIFRoaXMgY29uc3RhbnQgaXMgYXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2Vl" +
"OiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL21lc3NhZ2UtbW9kZSNiYXNlLW1vZGVzCi8vLwpjb25zdCBTZW5kRGVmYXVsdE1vZGU6IEludCA9IDA7Cgov" +
@@ -1480,357 +1489,354 @@ files["std/internal/send.tact"] =
"ZmxhZyBpcyBvZnRlbiB1c2VkIHdpdGggbW9kZSAxMjgsIGBTZW5kUmVtYWluaW5nQmFsYW5jZWAuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
"Zy9ib29rL21lc3NhZ2UtbW9kZSNvcHRpb25hbC1mbGFncwovLy8KY29uc3QgU2VuZERlc3Ryb3lJZlplcm86IEludCA9IDMyOwoKLy8vIFN0cnVjdCBmb3Igc3BlY2lm" +
"eWluZyB0aGUgbWVzc2FnZSBwYXJhbWV0ZXJzIG9mIHRoZSBgc2VuZCgpYCBmdW5jdGlvbi4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3Jl" +
- "Zi9jb3JlLWNvbW1vbiNzZW5kCi8vLwpzdHJ1Y3QgU2VuZFBhcmFtZXRlcnMgewogICAgLy8vIEFuIDgtYml0IHZhbHVlIHRoYXQgY29uZmlndXJlcyBob3cgdG8gc2Vu" +
- "ZCBhIG1lc3NhZ2UsIGRlZmF1bHRzIHRvIDAuCiAgICAvLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL21lc3NhZ2UtbW9kZQogICAgbW9kZTog" +
- "SW50ID0gU2VuZERlZmF1bHRNb2RlOwoKICAgIC8vLyBPcHRpb25hbCBtZXNzYWdlIGJvZHkgYXMgYSBgQ2VsbGAuCiAgICBib2R5OiBDZWxsPyA9IG51bGw7CgogICAg" +
- "Ly8vIE9wdGlvbmFsIGluaXRpYWwgY29kZSBvZiB0aGUgY29udHJhY3QgKGNvbXBpbGVkIGJpdGNvZGUpLgogICAgY29kZTogQ2VsbD8gPSBudWxsOwoKICAgIC8vLyBP" +
- "cHRpb25hbCBpbml0aWFsIGRhdGEgb2YgdGhlIGNvbnRyYWN0IChhcmd1bWVudHMgb2YgYGluaXQoKWAgZnVuY3Rpb24gb3IgdmFsdWVzIG9mIGNvbnRyYWN0IHBhcmFt" +
- "ZXRlcnMpLgogICAgZGF0YTogQ2VsbD8gPSBudWxsOwoKICAgIC8vLyBUaGUgYW1vdW50IG9mIG5hbm9Ub25jb2lucyB5b3Ugd2FudCB0byBzZW5kIHdpdGgKICAgIC8v" +
- "LyB0aGUgbWVzc2FnZS4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNvdmVyIGZvcndhcmQgZmVlcywKICAgIC8vLyB1bmxlc3MgdGhlIG9wdGlvbmFsIGZsYWcgYFNlbmRQ" +
- "YXlHYXNTZXBhcmF0ZWx5YCBpcyB1c2VkLgogICAgdmFsdWU6IEludDsKCiAgICAvLy8gUmVjaXBpZW50IGludGVybmFsIGBBZGRyZXNzYCBvbiBUT04gQmxvY2tjaGFp" +
- "bi4KICAgIHRvOiBBZGRyZXNzOwoKICAgIC8vLyBXaGVuIHNldCB0byBgdHJ1ZWAgKGRlZmF1bHQpIG1lc3NhZ2UgYm91bmNlcyBiYWNrIHRvIHRoZSBzZW5kZXIgaWYK" +
- "ICAgIC8vLyB0aGUgcmVjaXBpZW50IGNvbnRyYWN0IGRvZXNuJ3QgZXhpc3Qgb3Igd2Fzbid0IGFibGUgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZS4KICAgIGJvdW5jZTog" +
- "Qm9vbCA9IHRydWU7Cn0KCi8vLyBTdHJ1Y3QgZm9yIHNwZWNpZnlpbmcgdGhlIG1lc3NhZ2UgcGFyYW1ldGVycyBvZiB0aGUgYG1lc3NhZ2UoKWAgZnVuY3Rpb24uIEF2" +
- "YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29tbW9uI21lc3NhZ2UKLy8vCnN0" +
- "cnVjdCBNZXNzYWdlUGFyYW1ldGVycyB7CiAgICAvLy8gQW4gOC1iaXQgdmFsdWUgdGhhdCBjb25maWd1cmVzIGhvdyB0byBzZW5kIGEgbWVzc2FnZSwgZGVmYXVsdHMg" +
- "dG8gMC4KICAgIC8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svbWVzc2FnZS1tb2RlCiAgICBtb2RlOiBJbnQgPSBTZW5kRGVmYXVsdE1vZGU7" +
- "CgogICAgLy8vIE9wdGlvbmFsIG1lc3NhZ2UgYm9keSBhcyBhIGBDZWxsYC4KICAgIGJvZHk6IENlbGw/ID0gbnVsbDsKCiAgICAvLy8gVGhlIGFtb3VudCBvZiBuYW5v" +
- "VG9uY29pbnMgeW91IHdhbnQgdG8gc2VuZCB3aXRoCiAgICAvLy8gdGhlIG1lc3NhZ2UuIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjb3ZlciBmb3J3YXJkIGZlZXMsCiAg" +
- "ICAvLy8gdW5sZXNzIHRoZSBvcHRpb25hbCBmbGFnIGBTZW5kUGF5R2FzU2VwYXJhdGVseWAgaXMgdXNlZC4KICAgIHZhbHVlOiBJbnQ7CgogICAgLy8vIFJlY2lwaWVu" +
- "dCBpbnRlcm5hbCBgQWRkcmVzc2Agb24gVE9OIEJsb2NrY2hhaW4uCiAgICB0bzogQWRkcmVzczsKCiAgICAvLy8gV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSBt" +
- "ZXNzYWdlIGJvdW5jZXMgYmFjayB0byB0aGUgc2VuZGVyIGlmCiAgICAvLy8gdGhlIHJlY2lwaWVudCBjb250cmFjdCBkb2Vzbid0IGV4aXN0IG9yIHdhc24ndCBhYmxl" +
- "IHRvIHByb2Nlc3MgdGhlIG1lc3NhZ2UuCiAgICBib3VuY2U6IEJvb2wgPSB0cnVlOwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAx" +
- "LjYuMC4KLy8vCi8vLyBRdWV1ZXMgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCB1c2luZyB0aGUgYE1lc3NhZ2VQYXJhbWV0ZXJzYCBzdHJ1Y3QuIEFsbG93cyBmb3IgY2hl" +
- "YXBlciBub24tZGVwbG95bWVudCwgcmVndWxhciBtZXNzYWdlcyBjb21wYXJlZCB0byB0aGUgYHNlbmQoKWAgZnVuY3Rpb24uCi8vLwovLy8gVGhlIGBNZXNzYWdlUGFy" +
- "YW1ldGVyc2Agc3RydWN0IGlzIHNpbWlsYXIgdG8gYFNlbmRQYXJhbWV0ZXJzYCBzdHJ1Y3QsIGJ1dCB3aXRob3V0IHRoZSBgYm9keWAgYW5kIGBjb2RlYCBmaWVsZHMu" +
- "Ci8vLwovLy8gQXR0ZW1wdHMgdG8gcXVldWUgbW9yZSB0aGFuIDI1NSBtZXNzYWdlcyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBhbiBleGl0IGNvZGUgMzM6IGBBY3Rp" +
- "b24gbGlzdCBpcyB0b28gbG9uZ2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbWVzc2FnZShNZXNzYWdlUGFyYW1ldGVyc3sKLy8v" +
- "ICAgICAgICAgdG86IHNlbmRlcigpLCAgICAvLyBiYWNrIHRvIHRoZSBzZW5kZXIsCi8vLyAgICAgICAgIHZhbHVlOiB0b24oIjEiKSwgLy8gd2l0aCAxIFRvbmNvaW4g" +
- "KDFfMDAwXzAwMF8wMDAgbmFub1RvbmNvaW4pLAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBubyBtZXNzYWdlIGJvZHkKLy8vICAgICB9KTsKLy8v" +
- "IH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29tbW9uI21lc3NhZ2UKLy8vICogaHR0cHM6Ly9k" +
- "b2NzLnRhY3QtbGFuZy5vcmcvYm9vay9tZXNzYWdlLW1vZGUKLy8vCmFzbSBmdW4gbWVzc2FnZShwYXJhbXM6IE1lc3NhZ2VQYXJhbWV0ZXJzKSB7CiAgICBORVdDCiAg" +
- "ICBiezAxfSBTVFNMSUNFQ09OU1QgIC8vIHN0b3JlIHRhZyA9ICQwIGFuZCBpaHJfZGlzYWJsZWQgPSB0cnVlCiAgICAxIFNUSSAgICAgICAgICAgICAgIC8vIHN0b3Jl" +
- "IGBib3VuY2VgCiAgICBiezAwMH0gU1RTTElDRUNPTlNUIC8vIHN0b3JlIGJvdW5jZWQgPSBmYWxzZSBhbmQgc3JjID0gYWRkcl9ub25lCiAgICBTVFNMSUNFICAgICAg" +
- "ICAgICAgIC8vIHN0b3JlIGB0b2AKICAgIFNXQVAKICAgIFNUR1JBTVMgICAgICAgICAgICAgLy8gc3RvcmUgYHZhbHVlYAogICAgMTA2IFBVU0hJTlQgICAgICAgICAv" +
- "LyAxICsgNCArIDQgKyA2NCArIDMyICsgMQogICAgU1RaRVJPRVMKICAgIC8vIOKGkiBTdGFjayBzdGF0ZQogICAgLy8gczA6IEJ1aWxkZXIKICAgIC8vIHMxOiBgZGF0" +
- "YWAKICAgIC8vIHMyOiBgY29kZWAKICAgIC8vIHMzOiBgYm9keWAKICAgIC8vIHM0OiBgbW9kZWAKICAgIFNURElDVAogICAgRU5EQwogICAgU1dBUAogICAgU0VORFJB" +
- "V01TRwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBRdWV1ZXMgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCB1c2luZyBhIGBTZW5kUGFyYW1ldGVyc2AgU3RydWN0LgovLy8K" +
- "Ly8vIEF0dGVtcHRzIHRvIHF1ZXVlIG1vcmUgdGhhbiAyNTUgbWVzc2FnZXMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggYW4gZXhpdCBjb2RlIDMzOiBgQWN0aW9uIGxp" +
- "c3QgaXMgdG9vIGxvbmdgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIHNlbmQoU2VuZFBhcmFtZXRlcnN7Ci8vLyAgICAgICAgIHRv" +
- "OiBzZW5kZXIoKSwgICAgLy8gYmFjayB0byB0aGUgc2VuZGVyLAovLy8gICAgICAgICB2YWx1ZTogdG9uKCIxIiksIC8vIHdpdGggMSBUb25jb2luICgxXzAwMF8wMDBf" +
- "MDAwIG5hbm9Ub25jb2luKSwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm8gbWVzc2FnZSBib2R5Ci8vLyAgICAgfSk7Ci8vLyB9Ci8vLyBgYGAK" +
- "Ly8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbW1vbiNzZW5kCi8vLwphc20gZnVuIHNlbmQocGFyYW1zOiBTZW5kUGFyYW1l" +
- "dGVycykgewogICAgLy8gSW5zdHJ1Y3Rpb25zIGFyZSBncm91cGVkLCBhbmQgdGhlIHN0YWNrIHN0YXRlcyB0aGV5IHByb2R1Y2UgYXMgYSBncm91cCBhcmUgc2hvd24g" +
- "cmlnaHQgYWZ0ZXIuCiAgICAvLyBJbiB0aGUgZW5kLCBvdXIgbWVzc2FnZSBDZWxsIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgVEwtQiBzdHJ1Y3R1cmU6CiAgICAv" +
- "LyBtZXNzYWdlJF8ge1g6VHlwZX0KICAgIC8vICAgaW5mbzpDb21tb25Nc2dJbmZvUmVsYXhlZAogICAgLy8gICBpbml0OihNYXliZSAoRWl0aGVyIFN0YXRlSW5pdCBe" +
- "U3RhdGVJbml0KSkKICAgIC8vICAgYm9keTooRWl0aGVyIFggXlgpCiAgICAvLyA9IE1lc3NhZ2VSZWxheGVkIFg7CgogICAgLy8g4oaSIFN0YWNrIHN0YXRlCiAgICAv" +
- "LyBzMDogYHBhcmFtcy5ib3VuY2VgCiAgICAvLyBzMTogYHBhcmFtcy50b2AKICAgIC8vIHMyOiBgcGFyYW1zLnZhbHVlYAogICAgLy8gczM6IGBwYXJhbXMuZGF0YWAK" +
- "ICAgIC8vIHM0OiBgcGFyYW1zLmNvZGVgCiAgICAvLyBzNTogYHBhcmFtcy5ib2R5YAogICAgLy8gczY6IGBwYXJhbXMubW9kZWAKICAgIC8vIEZvciBicmV2aXR5LCB0" +
- "aGUgInBhcmFtcyIgcHJlZml4IHdpbGwgYmUgb21pdHRlZCBmcm9tIG5vdyBvbi4KCiAgICAvLyBHcm91cCAxOiBTdG9yaW5nIHRoZSBgYm91bmNlYCwgYHRvYCBhbmQg" +
- "YHZhbHVlYCBpbnRvIGEgQnVpbGRlcgogICAgTkVXQwogICAgYnswMX0gU1RTTElDRUNPTlNUICAvLyBzdG9yZSB0YWcgPSAkMCBhbmQgaWhyX2Rpc2FibGVkID0gdHJ1" +
- "ZQogICAgMSBTVEkgICAgICAgICAgICAgICAvLyBzdG9yZSBgYm91bmNlYAogICAgYnswMDB9IFNUU0xJQ0VDT05TVCAvLyBzdG9yZSBib3VuY2VkID0gZmFsc2UgYW5k" +
- "IHNyYyA9IGFkZHJfbm9uZQogICAgU1RTTElDRSAgICAgICAgICAgICAvLyBzdG9yZSBgdG9gCiAgICBTV0FQCiAgICBTVEdSQU1TICAgICAgICAgICAgIC8vIHN0b3Jl" +
- "IGB2YWx1ZWAKICAgIDEwNSBQVVNISU5UICAgICAgICAgLy8gMSArIDQgKyA0ICsgNjQgKyAzMgogICAgU1RaRVJPRVMgICAgICAgICAgICAvLyBzdG9yZSBjdXJyZW5j" +
- "eV9jb2xsZWN0aW9uLCBpaHJfZmVlLCBmd2RfZmVlLCBjcmVhdGVkX2x0IGFuZCBjcmVhdGVkX2F0CiAgICAvLyDihpIgU3RhY2sgc3RhdGUKICAgIC8vIHMwOiBCdWls" +
- "ZGVyCiAgICAvLyBzMTogYGRhdGFgCiAgICAvLyBzMjogYGNvZGVgCiAgICAvLyBzMzogYGJvZHlgCiAgICAvLyBzNDogYG1vZGVgCgogICAgLy8gR3JvdXAgMjogUGxh" +
- "Y2luZyB0aGUgQnVpbGRlciBhZnRlciBjb2RlIGFuZCBkYXRhLCB0aGVuIGNoZWNraW5nIHRob3NlIGZvciBudWxsYWJpbGl0eQogICAgczIgWENIRzAKICAgIERVUDIK" +
- "ICAgIElTTlVMTAogICAgU1dBUAogICAgSVNOVUxMCiAgICBBTkQKICAgIC8vIOKGkiBTdGFjayBzdGF0ZQogICAgLy8gczA6IC0xICh0cnVlKSBpZiBgZGF0YWAgYW5k" +
- "IGBjb2RlYCBhcmUgYm90aCBudWxsLCAwIChmYWxzZSkgb3RoZXJ3aXNlCiAgICAvLyBzMTogYGNvZGVgCiAgICAvLyBzMjogYGRhdGFgCiAgICAvLyBzMzogQnVpbGRl" +
- "cgogICAgLy8gczQ6IGBib2R5YAogICAgLy8gczU6IGBtb2RlYAoKICAgIC8vIEdyb3VwIDM6IExlZnQgYnJhbmNoIG9mIHRoZSBJRkVMU0UsIGV4ZWN1dGVkIGlmIHMw" +
- "IGlzIC0xICh0cnVlKQogICAgPHsKICAgICAgICBEUk9QMiAvLyBkcm9wIGBkYXRhYCBhbmQgYGNvZGVgLCBzaW5jZSBlaXRoZXIgb2YgdGhvc2UgaXMgbnVsbAogICAg" +
- "ICAgIGJ7MH0gU1RTTElDRUNPTlNUCiAgICB9PiBQVVNIQ09OVAoKICAgIC8vIEdyb3VwIDM6IFJpZ2h0IGJyYW5jaCBvZiB0aGUgSUZFTFNFLCBleGVjdXRlZCBpZiBz" +
- "MCBpcyAwIChmYWxzZSkKICAgIDx7CiAgICAgICAgLy8gXyBzcGxpdF9kZXB0aDooTWF5YmUgKCMjIDUpKQogICAgICAgIC8vICAgc3BlY2lhbDooTWF5YmUgVGlja1Rv" +
- "Y2spCiAgICAgICAgLy8gICBjb2RlOihNYXliZSBeQ2VsbCkKICAgICAgICAvLyAgIGRhdGE6KE1heWJlIF5DZWxsKQogICAgICAgIC8vICAgbGlicmFyeTooTWF5YmUg" +
- "XkNlbGwpCiAgICAgICAgLy8gPSBTdGF0ZUluaXQ7CiAgICAgICAgUk9UICAgICAgICAgICAgICAgIC8vIHBsYWNlIG1lc3NhZ2UgQnVpbGRlciBvbiB0b3AKICAgICAg" +
- "ICBiezEwfSBTVFNMSUNFQ09OU1QgLy8gc3RvcmUgTWF5YmUgPSB0cnVlLCBFaXRoZXIgPSBmYWxzZQogICAgICAgIC8vIFN0YXJ0IGNvbXBvc2luZyBpbmxpbmVkIFN0" +
- "YXRlSW5pdAogICAgICAgIGJ7MDB9IFNUU0xJQ0VDT05TVCAvLyBzdG9yZSBzcGxpdF9kZXB0aCBhbmQgc3BlY2lhbCBmaXJzdAogICAgICAgIFNURElDVCAgICAgICAg" +
- "ICAgICAvLyBzdG9yZSBjb2RlCiAgICAgICAgU1RESUNUICAgICAgICAgICAgIC8vIHN0b3JlIGRhdGEKICAgICAgICBiezB9IFNUU0xJQ0VDT05TVCAgLy8gc3RvcmUg" +
- "bGlicmFyeQogICAgfT4gUFVTSENPTlQKCiAgICAvLyBHcm91cCAzOiBJRkVMU0UgdGhhdCBkb2VzIHRoZSBicmFuY2hpbmcgc2hvd24gYWJvdmUKICAgIElGRUxTRQog" +
- "ICAgLy8g4oaSIFN0YWNrIHN0YXRlCiAgICAvLyBzMDogQnVpbGRlcgogICAgLy8gczE6IG51bGwgb3IgU3RhdGVJbml0CiAgICAvLyBzMjogYGJvZHlgCiAgICAvLyBz" +
- "MzogYG1vZGVgCgogICAgLy8gR3JvdXAgNDogRmluYWxpemluZyB0aGUgbWVzc2FnZQogICAgU1RESUNUIC8vIHN0b3JlIGBib2R5YCBhcyByZWYgd2l0aCBhbiBleHRy" +
- "YSBNYXliZSBiaXQsIHNpbmNlIGBib2R5YCBtaWdodCBiZSBudWxsCiAgICBFTkRDCiAgICAvLyDihpIgU3RhY2sgc3RhdGUKICAgIC8vIHMwOiBDZWxsCiAgICAvLyBz" +
- "MTogYG1vZGVgCgogICAgLy8gR3JvdXAgNTogU2VuZGluZyB0aGUgbWVzc2FnZSwgd2l0aCBgbW9kZWAgb24gdG9wCiAgICBTV0FQCiAgICBTRU5EUkFXTVNHIC8vIGh0" +
- "dHBzOi8vZ2l0aHViLmNvbS90YWN0LWxhbmcvdGFjdC9pc3N1ZXMvMTU1OAp9CgovLy8gU3RydWN0IGZvciBzcGVjaWZ5aW5nIHRoZSBkZXBsb3ltZW50IG1lc3NhZ2Ug" +
- "cGFyYW1ldGVycyBvZiB0aGUgYGRlcGxveSgpYCBmdW5jdGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFj" +
- "dC1sYW5nLm9yZy9yZWYvY29yZS1jb21tb24jZGVwbG95Ci8vLwpzdHJ1Y3QgRGVwbG95UGFyYW1ldGVycyB7CiAgICAvLy8gQW4gOC1iaXQgdmFsdWUgdGhhdCBjb25m" +
- "aWd1cmVzIGhvdyB0byBzZW5kIGEgbWVzc2FnZSwgZGVmYXVsdHMgdG8gMC4KICAgIC8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svbWVzc2Fn" +
- "ZS1tb2RlCiAgICBtb2RlOiBJbnQgPSBTZW5kRGVmYXVsdE1vZGU7CgogICAgLy8vIE9wdGlvbmFsIG1lc3NhZ2UgYm9keSBhcyBhIGBDZWxsYC4KICAgIGJvZHk6IENl" +
- "bGw/ID0gbnVsbDsKCiAgICAvLy8gVGhlIGFtb3VudCBvZiBuYW5vVG9uY29pbnMgeW91IHdhbnQgdG8gc2VuZCB3aXRoCiAgICAvLy8gdGhlIG1lc3NhZ2UuIFRoaXMg" +
- "dmFsdWUgaXMgdXNlZCB0byBjb3ZlciBmb3J3YXJkIGZlZXMsCiAgICAvLy8gdW5sZXNzIHRoZSBvcHRpb25hbCBmbGFnIGBTZW5kUGF5R2FzU2VwYXJhdGVseWAgaXMg" +
- "dXNlZC4KICAgIHZhbHVlOiBJbnQ7CgogICAgLy8vIFdoZW4gc2V0IHRvIGB0cnVlYCAoZGVmYXVsdCkgbWVzc2FnZSBib3VuY2VzIGJhY2sgdG8gdGhlIHNlbmRlciBp" +
- "ZgogICAgLy8vIHRoZSByZWNpcGllbnQgY29udHJhY3QgZG9lc24ndCBleGlzdCBvciB3YXNuJ3QgYWJsZSB0byBwcm9jZXNzIHRoZSBtZXNzYWdlLgogICAgYm91bmNl" +
- "OiBCb29sID0gdHJ1ZTsKCiAgICAvLy8gSW5pdGlhbCBwYWNrYWdlIG9mIHRoZSBjb250cmFjdCAoaW5pdGlhbCBjb2RlIGFuZCBpbml0aWFsIGRhdGEpLgogICAgLy8v" +
- "IFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9leHByZXNzaW9ucyNpbml0b2YKICAgIGluaXQ6IFN0YXRlSW5pdDsKfQoKLy8vIEdsb2JhbCBmdW5j" +
- "dGlvbi4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gUXVldWVzIHRoZSBjb250cmFjdCBkZXBsb3ltZW50IG1lc3NhZ2UgdG8gYmUgc2VudCB1c2lu" +
- "ZyB0aGUgYERlcGxveVBhcmFtZXRlcnNgIFN0cnVjdC4gQWxsb3dzIGZvciBjaGVhcGVyIG9uLWNoYWluIGRlcGxveW1lbnRzIGNvbXBhcmVkIHRvIHRoZSBgc2VuZCgp" +
- "YCBmdW5jdGlvbi4KLy8vCi8vLyBUaGUgYERlcGxveVBhcmFtZXRlcnNgIFN0cnVjdCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczoKLy8vICogYG1vZGU6" +
- "IEludGAsIGFuIDgtYml0IHZhbHVlIHRoYXQgY29uZmlndXJlcyBob3cgdG8gc2VuZCBhIG1lc3NhZ2UsIGRlZmF1bHRzIHRvIDAuCi8vLyAqIGBib2R5OiBDZWxsP2As" +
- "IG9wdGlvbmFsIG1lc3NhZ2UgYm9keSBhcyBhIGBDZWxsYC4KLy8vICogYHZhbHVlOiBJbnRgLCB0aGUgYW1vdW50IG9mIG5hbm9Ub25jb2lucyB5b3Ugd2FudCB0byBz" +
- "ZW5kIHdpdGggdGhlIG1lc3NhZ2UuCi8vLyAgIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjb3ZlciBmb3J3YXJkIGZlZXMsIHVubGVzcyB0aGUgb3B0aW9uYWwgZmxhZyBg" +
- "U2VuZFBheUdhc1NlcGFyYXRlbHlgIGlzIHVzZWQuCi8vLyAqIGBib3VuY2U6IEJvb2xgLCB3aGVuIHNldCB0byBgdHJ1ZWAgKGRlZmF1bHQpIG1lc3NhZ2UgYm91bmNl" +
- "cyBiYWNrIHRvIHRoZSBzZW5kZXIKLy8vICAgIGlmIHRoZSByZWNpcGllbnQgY29udHJhY3QgZG9lc24ndCBleGlzdCBvciB3YXNuJ3QgYWJsZSB0byBwcm9jZXNzIHRo" +
- "ZSBtZXNzYWdlLgovLy8gKiBgaW5pdDogU3RhdGVJbml0YCwgaW5pdCBwYWNrYWdlIG9mIHRoZSBjb250cmFjdCAoaW5pdGlhbCBjb2RlIGFuZCBpbml0aWFsIGRhdGEp" +
- "LgovLy8KLy8vIEF0dGVtcHRzIHRvIHF1ZXVlIG1vcmUgdGhhbiAyNTUgbWVzc2FnZXMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggYW4gZXhpdCBjb2RlIDMzOiBgQWN0" +
- "aW9uIGxpc3QgaXMgdG9vIGxvbmdgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGRlcGxveShEZXBsb3lQYXJhbWV0ZXJzewovLy8g" +
- "ICAgICAgICBpbml0OiBpbml0T2YgU29tZUNvbnRyYWN0KCksIC8vIHdpdGggaW5pdGlhbCBjb2RlIGFuZCBkYXRhIG9mIFNvbWVDb250cmFjdAovLy8gICAgICAgICAg" +
- "ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBubyBhZGRpdGlvbmFsIG1lc3NhZ2UgYm9keQovLy8gICAgICAgICBtb2RlOiBTZW5kSWdub3JlRXJyb3Jz" +
- "LCAgICAgIC8vIHNraXAgdGhlIG1lc3NhZ2UgaW4gY2FzZSBvZiBlcnJvcnMKLy8vICAgICAgICAgdmFsdWU6IHRvbigiMSIpLCAgICAgICAgICAgICAvLyBzZW5kIDEg" +
- "VG9uY29pbiAoMV8wMDBfMDAwXzAwMCBuYW5vVG9uY29pbikKLy8vICAgICB9KTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRh" +
- "Y3QtbGFuZy5vcmcvcmVmL2NvcmUtY29tbW9uI2RlcGxveQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL21lc3NhZ2UtbW9kZQovLy8KYXNtIGZ1" +
- "biBkZXBsb3kocGFyYW1zOiBEZXBsb3lQYXJhbWV0ZXJzKSB7CiAgICAvLyBJbnN0cnVjdGlvbnMgYXJlIGdyb3VwZWQsIGFuZCB0aGUgc3RhY2sgc3RhdGVzIHRoZXkg" +
- "cHJvZHVjZSBhcyBhIGdyb3VwIGFyZSBzaG93biByaWdodCBhZnRlci4KICAgIC8vCiAgICAvLyDihpIgU3RhY2sgc3RhdGUKICAgIC8vIHMwOiBgcGFyYW1zLmluaXQu" +
- "ZGF0YWAKICAgIC8vIHMxOiBgcGFyYW1zLmluaXQuY29kZWAKICAgIC8vIHMyOiBgcGFyYW1zLmJvdW5jZWAKICAgIC8vIHMzOiBgcGFyYW1zLnZhbHVlYAogICAgLy8g" +
- "czQ6IGBwYXJhbXMuYm9keWAKICAgIC8vIHM1OiBgcGFyYW1zLm1vZGVgCiAgICAvLyBGb3IgYnJldml0eSwgdGhlICJwYXJhbXMiIHByZWZpeCB3aWxsIGJlIG9taXR0" +
- "ZWQgZnJvbSBub3cgb24uCgogICAgLy8gR3JvdXAgMTogUHJlcGFyYXRpb24gb2YgbmVlZGVkIHBhcmFtcwogICAgLy8gRm9yIGFsbW9zdCBpZGVudGljYWwgbG9naWMg" +
- "YW5kIGluc3RydWN0aW9ucywKICAgIC8vIHNlZSBjb21tZW50cyBpbnNpZGUgYGNvbnRyYWN0SGFzaCgpYCBmdW5jdGlvbiBpbiBjb250cmFjdC50YWN0CiAgICA0IDEg" +
- "QkxLUFVTSCAvLyBwdXNoZXMgMiBjb3BpZXMgb2YgYGluaXQuY29kZWAgYW5kIGBpbml0LmRhdGFgCiAgICBIQVNIQ1UgLy8gYGluaXQuZGF0YWAgaGFzaAogICAgU1dB" +
- "UAogICAgSEFTSENVIC8vIGBpbml0LmNvZGVgIGhhc2gKICAgIFNXQVAyCiAgICBDREVQVEggLy8gYGluaXQuZGF0YWAgZGVwdGgKICAgIFNXQVAKICAgIENERVBUSCAv" +
- "LyBgaW5pdC5jb2RlYCBkZXB0aAoKICAgIC8vIEdyb3VwIDI6IENhbGN1bGF0aW5nIGRlc3RpbmF0aW9uIGFkZHJlc3MKICAgIC8vIEZvciBhbG1vc3QgaWRlbnRpY2Fs" +
- "IGxvZ2ljIGFuZCBpbnN0cnVjdGlvbnMsCiAgICAvLyBzZWUgY29tbWVudHMgaW5zaWRlIGBjb250cmFjdEhhc2goKWAgZnVuY3Rpb24gaW4gY29udHJhY3QudGFjdAog" +
- "ICAgMTMxMzgwIElOVCAvLyAoMiA8PCAxNikgfCAoMSA8PCA4KSB8IDB4MzQKICAgIE5FV0MKICAgIDI0IFNUVQogICAgMTYgU1RVCiAgICAxNiBTVFUKICAgIDI1NiBT" +
- "VFUKICAgIDI1NiBTVFUKICAgIE9ORSBIQVNIRVhUX1NIQTI1NiAvLyBvYnRhaW5zIGhhc2ggcGFydCAoYWNjb3VudCBpZCkgb2YgdGhlIGFkZHJlc3MKICAgIC8vIOKG" +
- "kiBTdGFjayBzdGF0ZQogICAgLy8gczA6IGRlc3RBZGRyKGhhc2ggcGFydCkKICAgIC8vIHMxOiBgaW5pdC5kYXRhYAogICAgLy8gczI6IGBpbml0LmNvZGVgCiAgICAv" +
- "LyBzMyBhbmQgYmVsb3c6IGBib3VuY2VgLCBgdmFsdWVgLCBgYm9keWAsIGBtb2RlYAoKICAgIC8vIEdyb3VwIDM6IEJ1aWxkaW5nIGEgbWVzc2FnZSAoQ29tbW9uTXNn" +
- "SW5mb1JlbGF4ZWQpCiAgICBzMyBYQ0hHMCAgICAgICAgICAgLy8gc3dhcHMgYGJvdW5jZWAgd2l0aCBkZXN0QWRkcihoYXNoIHBhcnQpCiAgICBORVdDCiAgICBiezAx" +
- "fSBTVFNMSUNFQ09OU1QgLy8gc3RvcmUgdGFnID0gJDAgYW5kIGlocl9kaXNhYmxlZCA9IHRydWUKICAgIDEgU1RJICAgICAgICAgICAgICAvLyBzdG9yZSBgYm91bmNl" +
- "YAogICAgczEgczIgWENIRyAgICAgICAgIC8vIHN3YXAgYGluaXQuZGF0YWAgd2l0aCBgaW5pdC5jb2RlYCwgcGxhY2luZyBjb2RlIG9uIHMxCiAgICBTVFJFRiAgICAg" +
- "ICAgICAgICAgLy8gc3RvcmUgYGluaXQuY29kZWAKICAgIFNUUkVGICAgICAgICAgICAgICAvLyBzdG9yZSBgaW5pdC5kYXRhYAogICAgLy8gSW5saW5lIFN0YXRlSW5p" +
- "dDoKICAgIGJ7MDAwMTAwMDAwMDAwMDB9IFNUU0xJQ0VDT05TVAogICAgLy8gMCArIDAwICsgMTAgKyAwICsgMDAwMDAwMDAKICAgIC8vIDEpIDAgLSBib3VuY2VkID0g" +
- "ZmFsc2UKICAgIC8vIDIpIDAwIC0gc3JjID0gYWRkcl9ub25lCiAgICAvLyAzKSAxMCAtIHRhZyBvZiBhZGRyX3N0ZCAocGFydCBvZiBkZXN0KQogICAgLy8gNCkgMCAt" +
- "IE1heWJlIEFueWNhc3QgPSBmYWxzZQogICAgLy8gNSkgMDAwMDAwMDAgLSB3b3JrY2hhaW5faWQgKHBhcnQgb2YgZGVzdCkKICAgIC8vCiAgICAyNTYgU1RVICAgICAv" +
- "LyBzdG9yZSBkZXN0QWRkcihoYXNoIHBhcnQpCiAgICBTV0FQICAgICAgICAvLyBCdWlsZGVyIG9uIHRvcCwgYHZhbHVlYCBiZWxvdwogICAgU1RHUkFNUyAgICAgLy8g" +
- "c3RvcmUgYHZhbHVlYAogICAgMTA1IFBVU0hJTlQgLy8gMSArIDQgKyA0ICsgNjQgKyAzMgogICAgU1RaRVJPRVMgICAgLy8gc3RvcmUgY3VycmVuY3lfY29sbGVjdGlv" +
- "biwgaWhyX2ZlZSwgZndkX2ZlZSwgY3JlYXRlZF9sdCBhbmQgY3JlYXRlZF9hdAoKICAgIC8vIEdyb3VwIDQ6IENvbnRpbnVlIGJ1aWxkaW5nIGEgbWVzc2FnZSAoQ29t" +
- "bW9uTXNnSW5mb1JlbGF4ZWQgaW50byBNZXNzYWdlUmVsYXhlZCkKICAgIC8vIFJlbWFpbmluZyBiaXRzIG9mIE1lc3NhZ2VSZWxheGVkOgogICAgYnsxMDAwMTEwfSBT" +
- "VFNMSUNFQ09OU1QKICAgIC8vIDEwICsgMCArIDAgKyAxICsgMSArIDAKICAgIC8vIDEwIC0gTWF5YmUgKEVpdGhlciBTdGF0ZUluaXQgXlN0YXRlSW5pdCkgPSB0cnVl" +
- "IGZhbHNlCiAgICAvLyAwIC0gc3BsaXRfZGVwdGg6KE1heWJlICgjIyA1KSkgPSBmYWxzZQogICAgLy8gMCA9IHNwZWNpYWw6KE1heWJlIFRpY2tUb2NrKSA9IGZhbHNl" +
- "CiAgICAvLyAxID0gY29kZTooTWF5YmUgXkNlbGwpID0gdHJ1ZQogICAgLy8gMSA9IGRhdGE6KE1heWJlIF5DZWxsKSA9IHRydWUKICAgIC8vIDAgPSBsaWJyYXJ5OihN" +
- "YXliZSBeQ2VsbCkgPSBmYWxzZQogICAgLy8KICAgIFNURElDVCAvLyBzdG9yZSBgYm9keWAgYXMgcmVmIHdpdGggYW4gZXh0cmEgTWF5YmUgYml0LCBzaW5jZSBgYm9k" +
- "eWAgbWlnaHQgYmUgbnVsbAogICAgRU5EQyAgIC8vIGZpbmFsaXplIHRoZSBtZXNzYWdlCiAgICAvLyDihpIgU3RhY2sgc3RhdGUKICAgIC8vIHMwOiBDZWxsCiAgICAv" +
- "LyBzMTogcGFyYW1zLmBtb2RlYAoKICAgIC8vIEdyb3VwIDU6IFNlbmRpbmcgdGhlIG1lc3NhZ2UsIHdpdGggYG1vZGVgIG9uIHRvcAogICAgU1dBUAogICAgU0VORFJB" +
- "V01TRwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMS4KLy8vCi8vLyBRdWV1ZXMgYW4gZW1wdHkgbWVzc2FnZSB0byBiZSBz" +
- "ZW50IHdpdGggdGhlIGBTZW5kUmVtYWluaW5nVmFsdWVgIG1vZGUgYW5kIHRoZSBgU2VuZElnbm9yZUVycm9yc2AgZmxhZyB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVz" +
- "cyBgdG9gLgovLy8gVGhpcyBpcyB0aGUgbW9zdCBnYXMtZWZmaWNpZW50IHdheSB0byBzZW5kIHRoZSByZW1haW5pbmcgdmFsdWUgZnJvbSB0aGUgaW5jb21pbmcgbWVz" +
- "c2FnZSB0byB0aGUgZ2l2ZW4gYWRkcmVzcy4KLy8vCi8vLyBBdHRlbXB0cyB0byBxdWV1ZSBtb3JlIHRoYW4gMjU1IG1lc3NhZ2VzIHRocm93IGFuIGV4Y2VwdGlvbiB3" +
- "aXRoIGV4aXQgY29kZSAzMzogYEFjdGlvbiBsaXN0IGlzIHRvbyBsb25nYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZXMoKSB7Ci8vLyAgICAgLy8gRm9y" +
- "d2FyZCB0aGUgcmVtYWluaW5nIHZhbHVlIGJhY2sgdG8gdGhlIHNlbmRlcgovLy8gICAgIGNhc2hiYWNrKHNlbmRlcigpKTsKLy8vCi8vLyAgICAgLy8gVGhlIGNhc2hi" +
- "YWNrKCkgZnVuY3Rpb24gYWJvdmUgaXMgY2hlYXBlciwgYnV0IGZ1bmN0aW9uYWxseQovLy8gICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBjYWxsIHRv" +
- "IHRoZSBtZXNzYWdlKCkgZnVuY3Rpb24KLy8vICAgICBtZXNzYWdlKE1lc3NhZ2VQYXJhbWV0ZXJzewovLy8gICAgICAgICBtb2RlOiBTZW5kUmVtYWluaW5nVmFsdWUg" +
- "fCBTZW5kSWdub3JlRXJyb3JzLAovLy8gICAgICAgICBib2R5OiBudWxsLAovLy8gICAgICAgICB2YWx1ZTogMCwKLy8vICAgICAgICAgdG86IHNlbmRlcigpLAovLy8g" +
- "ICAgICAgICBib3VuY2U6IGZhbHNlLAovLy8gICAgIH0pOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29y" +
- "ZS1jb21tb24vI2Nhc2hiYWNrCi8vLwphc20gZnVuIGNhc2hiYWNrKHRvOiBBZGRyZXNzKSB7CiAgICAxNiBQVVNISU5UICAgICAgIC8vIDB4MTAsIGkuZS4gMHgxOCBi" +
- "dXQgd2l0aCBib3VuY2UgPSBmYWxzZQogICAgTkVXQwogICAgNiBTVFUgICAgICAgICAgICAvLyAuc3RvcmVVaW50KDB4MTAsIDYpCiAgICBTVFNMSUNFICAgICAgICAg" +
- "IC8vIC5zdG9yZUFkZHJlc3ModG8pCiAgICAwIFBVU0hJTlQgICAgICAgIC8vIDAKICAgIDExMSBTVFVSICAgICAgICAgLy8gLnN0b3JlVWludCgwLCAxMTEpCiAgICAg" +
- "ICAgICAgICAgICAgICAgIC8vIDQgemVyb3MgZm9yIGNvaW5zIGFuZCAxMDcgemVyb3MgZm9yIGx0LCBmZWVzLCBldGMuCiAgICBFTkRDCiAgICA2NiBQVVNISU5UICAg" +
- "ICAgIC8vIFNlbmRSZW1haW5pbmdWYWx1ZSB8IFNlbmRJZ25vcmVFcnJvcnMKICAgIFNFTkRSQVdNU0cKfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4KLy8vCi8vLyBRdWV1" +
- "ZXMgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCBieSBzcGVjaWZ5aW5nIHRoZSBjb21wbGV0ZSBgY2VsbGAgYW5kIHRoZSBtZXNzYWdlIGBtb2RlYC4KLy8vCi8vLyBBdHRl" +
+ "Zi9jb3JlLXNlbmQjc2VuZAovLy8Kc3RydWN0IFNlbmRQYXJhbWV0ZXJzIHsKICAgIC8vLyBBbiA4LWJpdCB2YWx1ZSB0aGF0IGNvbmZpZ3VyZXMgaG93IHRvIHNlbmQg" +
+ "YSBtZXNzYWdlLCBkZWZhdWx0cyB0byAwLgogICAgLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9tZXNzYWdlLW1vZGUKICAgIG1vZGU6IElu" +
+ "dCA9IFNlbmREZWZhdWx0TW9kZTsKCiAgICAvLy8gT3B0aW9uYWwgbWVzc2FnZSBib2R5IGFzIGEgYENlbGxgLgogICAgYm9keTogQ2VsbD8gPSBudWxsOwoKICAgIC8v" +
+ "LyBPcHRpb25hbCBpbml0aWFsIGNvZGUgb2YgdGhlIGNvbnRyYWN0IChjb21waWxlZCBiaXRjb2RlKS4KICAgIGNvZGU6IENlbGw/ID0gbnVsbDsKCiAgICAvLy8gT3B0" +
+ "aW9uYWwgaW5pdGlhbCBkYXRhIG9mIHRoZSBjb250cmFjdCAoYXJndW1lbnRzIG9mIGBpbml0KClgIGZ1bmN0aW9uIG9yIHZhbHVlcyBvZiBjb250cmFjdCBwYXJhbWV0" +
+ "ZXJzKS4KICAgIGRhdGE6IENlbGw/ID0gbnVsbDsKCiAgICAvLy8gVGhlIGFtb3VudCBvZiBuYW5vVG9uY29pbnMgeW91IHdhbnQgdG8gc2VuZCB3aXRoCiAgICAvLy8g" +
+ "dGhlIG1lc3NhZ2UuIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBjb3ZlciBmb3J3YXJkIGZlZXMsCiAgICAvLy8gdW5sZXNzIHRoZSBvcHRpb25hbCBmbGFnIGBTZW5kUGF5" +
+ "R2FzU2VwYXJhdGVseWAgaXMgdXNlZC4KICAgIHZhbHVlOiBJbnQ7CgogICAgLy8vIFJlY2lwaWVudCBpbnRlcm5hbCBgQWRkcmVzc2Agb24gVE9OIEJsb2NrY2hhaW4u" +
+ "CiAgICB0bzogQWRkcmVzczsKCiAgICAvLy8gV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSBtZXNzYWdlIGJvdW5jZXMgYmFjayB0byB0aGUgc2VuZGVyIGlmCiAg" +
+ "ICAvLy8gdGhlIHJlY2lwaWVudCBjb250cmFjdCBkb2Vzbid0IGV4aXN0IG9yIHdhc24ndCBhYmxlIHRvIHByb2Nlc3MgdGhlIG1lc3NhZ2UuCiAgICBib3VuY2U6IEJv" +
+ "b2wgPSB0cnVlOwp9CgovLy8gU3RydWN0IGZvciBzcGVjaWZ5aW5nIHRoZSBtZXNzYWdlIHBhcmFtZXRlcnMgb2YgdGhlIGBtZXNzYWdlKClgIGZ1bmN0aW9uLiBBdmFp" +
+ "bGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXNlbmQjbWVzc2FnZQovLy8Kc3RydWN0" +
+ "IE1lc3NhZ2VQYXJhbWV0ZXJzIHsKICAgIC8vLyBBbiA4LWJpdCB2YWx1ZSB0aGF0IGNvbmZpZ3VyZXMgaG93IHRvIHNlbmQgYSBtZXNzYWdlLCBkZWZhdWx0cyB0byAw" +
+ "LgogICAgLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9tZXNzYWdlLW1vZGUKICAgIG1vZGU6IEludCA9IFNlbmREZWZhdWx0TW9kZTsKCiAg" +
+ "ICAvLy8gT3B0aW9uYWwgbWVzc2FnZSBib2R5IGFzIGEgYENlbGxgLgogICAgYm9keTogQ2VsbD8gPSBudWxsOwoKICAgIC8vLyBUaGUgYW1vdW50IG9mIG5hbm9Ub25j" +
+ "b2lucyB5b3Ugd2FudCB0byBzZW5kIHdpdGgKICAgIC8vLyB0aGUgbWVzc2FnZS4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNvdmVyIGZvcndhcmQgZmVlcywKICAgIC8v" +
+ "LyB1bmxlc3MgdGhlIG9wdGlvbmFsIGZsYWcgYFNlbmRQYXlHYXNTZXBhcmF0ZWx5YCBpcyB1c2VkLgogICAgdmFsdWU6IEludDsKCiAgICAvLy8gUmVjaXBpZW50IGlu" +
+ "dGVybmFsIGBBZGRyZXNzYCBvbiBUT04gQmxvY2tjaGFpbi4KICAgIHRvOiBBZGRyZXNzOwoKICAgIC8vLyBXaGVuIHNldCB0byBgdHJ1ZWAgKGRlZmF1bHQpIG1lc3Nh" +
+ "Z2UgYm91bmNlcyBiYWNrIHRvIHRoZSBzZW5kZXIgaWYKICAgIC8vLyB0aGUgcmVjaXBpZW50IGNvbnRyYWN0IGRvZXNuJ3QgZXhpc3Qgb3Igd2Fzbid0IGFibGUgdG8g" +
+ "cHJvY2VzcyB0aGUgbWVzc2FnZS4KICAgIGJvdW5jZTogQm9vbCA9IHRydWU7Cn0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4w" +
+ "LgovLy8KLy8vIFF1ZXVlcyB0aGUgbWVzc2FnZSB0byBiZSBzZW50IHVzaW5nIHRoZSBgTWVzc2FnZVBhcmFtZXRlcnNgIHN0cnVjdC4gQWxsb3dzIGZvciBjaGVhcGVy" +
+ "IG5vbi1kZXBsb3ltZW50LCByZWd1bGFyIG1lc3NhZ2VzIGNvbXBhcmVkIHRvIHRoZSBgc2VuZCgpYCBmdW5jdGlvbi4KLy8vCi8vLyBUaGUgYE1lc3NhZ2VQYXJhbWV0" +
+ "ZXJzYCBzdHJ1Y3QgaXMgc2ltaWxhciB0byBgU2VuZFBhcmFtZXRlcnNgIHN0cnVjdCwgYnV0IHdpdGhvdXQgdGhlIGBjb2RlYCBhbmQgYGRhdGFgIGZpZWxkcy4KLy8v" +
+ "Ci8vLyBBdHRlbXB0cyB0byBxdWV1ZSBtb3JlIHRoYW4gMjU1IG1lc3NhZ2VzIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGFuIGV4aXQgY29kZSAzMzogYEFjdGlvbiBs" +
+ "aXN0IGlzIHRvbyBsb25nYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBtZXNzYWdlKE1lc3NhZ2VQYXJhbWV0ZXJzewovLy8gICAg" +
+ "ICAgICB0bzogc2VuZGVyKCksICAgIC8vIGJhY2sgdG8gdGhlIHNlbmRlciwKLy8vICAgICAgICAgdmFsdWU6IHRvbigiMSIpLCAvLyB3aXRoIDEgVG9uY29pbiAoMV8w" +
+ "MDBfMDAwXzAwMCBuYW5vVG9uY29pbiksCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIG5vIG1lc3NhZ2UgYm9keQovLy8gICAgIH0pOwovLy8gfQov" +
+ "Ly8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1zZW5kI21lc3NhZ2UKLy8vICogaHR0cHM6Ly9kb2NzLnRh" +
+ "Y3QtbGFuZy5vcmcvYm9vay9tZXNzYWdlLW1vZGUKLy8vCmFzbSBmdW4gbWVzc2FnZShwYXJhbXM6IE1lc3NhZ2VQYXJhbWV0ZXJzKSB7CiAgICBORVdDCiAgICBiezAx" +
+ "fSBTVFNMSUNFQ09OU1QgIC8vIHN0b3JlIHRhZyA9ICQwIGFuZCBpaHJfZGlzYWJsZWQgPSB0cnVlCiAgICAxIFNUSSAgICAgICAgICAgICAgIC8vIHN0b3JlIGBib3Vu" +
+ "Y2VgCiAgICBiezAwMH0gU1RTTElDRUNPTlNUIC8vIHN0b3JlIGJvdW5jZWQgPSBmYWxzZSBhbmQgc3JjID0gYWRkcl9ub25lCiAgICBTVFNMSUNFICAgICAgICAgICAg" +
+ "IC8vIHN0b3JlIGB0b2AKICAgIFNXQVAKICAgIFNUR1JBTVMgICAgICAgICAgICAgLy8gc3RvcmUgYHZhbHVlYAogICAgMTA2IFBVU0hJTlQgICAgICAgICAvLyAxICsg" +
+ "NCArIDQgKyA2NCArIDMyICsgMQogICAgU1RaRVJPRVMKICAgIC8vIOKGkiBTdGFjayBzdGF0ZQogICAgLy8gczA6IEJ1aWxkZXIKICAgIC8vIHMxOiBgZGF0YWAKICAg" +
+ "IC8vIHMyOiBgY29kZWAKICAgIC8vIHMzOiBgYm9keWAKICAgIC8vIHM0OiBgbW9kZWAKICAgIFNURElDVAogICAgRU5EQwogICAgU1dBUAogICAgU0VORFJBV01TRwp9" +
+ "CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBRdWV1ZXMgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCB1c2luZyBhIGBTZW5kUGFyYW1ldGVyc2AgU3RydWN0LgovLy8KLy8vIEF0" +
+ "dGVtcHRzIHRvIHF1ZXVlIG1vcmUgdGhhbiAyNTUgbWVzc2FnZXMgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggYW4gZXhpdCBjb2RlIDMzOiBgQWN0aW9uIGxpc3QgaXMg" +
+ "dG9vIGxvbmdgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIHNlbmQoU2VuZFBhcmFtZXRlcnN7Ci8vLyAgICAgICAgIHRvOiBzZW5k" +
+ "ZXIoKSwgICAgLy8gYmFjayB0byB0aGUgc2VuZGVyLAovLy8gICAgICAgICB2YWx1ZTogdG9uKCIxIiksIC8vIHdpdGggMSBUb25jb2luICgxXzAwMF8wMDBfMDAwIG5h" +
+ "bm9Ub25jb2luKSwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm8gbWVzc2FnZSBib2R5Ci8vLyAgICAgfSk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8v" +
+ "LyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXNlbmQjc2VuZAovLy8KYXNtIGZ1biBzZW5kKHBhcmFtczogU2VuZFBhcmFtZXRlcnMpIHsK" +
+ "ICAgIC8vIEluc3RydWN0aW9ucyBhcmUgZ3JvdXBlZCwgYW5kIHRoZSBzdGFjayBzdGF0ZXMgdGhleSBwcm9kdWNlIGFzIGEgZ3JvdXAgYXJlIHNob3duIHJpZ2h0IGFm" +
+ "dGVyLgogICAgLy8gSW4gdGhlIGVuZCwgb3VyIG1lc3NhZ2UgQ2VsbCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIFRMLUIgc3RydWN0dXJlOgogICAgLy8gbWVzc2Fn" +
+ "ZSRfIHtYOlR5cGV9CiAgICAvLyAgIGluZm86Q29tbW9uTXNnSW5mb1JlbGF4ZWQKICAgIC8vICAgaW5pdDooTWF5YmUgKEVpdGhlciBTdGF0ZUluaXQgXlN0YXRlSW5p" +
+ "dCkpCiAgICAvLyAgIGJvZHk6KEVpdGhlciBYIF5YKQogICAgLy8gPSBNZXNzYWdlUmVsYXhlZCBYOwoKICAgIC8vIOKGkiBTdGFjayBzdGF0ZQogICAgLy8gczA6IGBw" +
+ "YXJhbXMuYm91bmNlYAogICAgLy8gczE6IGBwYXJhbXMudG9gCiAgICAvLyBzMjogYHBhcmFtcy52YWx1ZWAKICAgIC8vIHMzOiBgcGFyYW1zLmRhdGFgCiAgICAvLyBz" +
+ "NDogYHBhcmFtcy5jb2RlYAogICAgLy8gczU6IGBwYXJhbXMuYm9keWAKICAgIC8vIHM2OiBgcGFyYW1zLm1vZGVgCiAgICAvLyBGb3IgYnJldml0eSwgdGhlICJwYXJh" +
+ "bXMiIHByZWZpeCB3aWxsIGJlIG9taXR0ZWQgZnJvbSBub3cgb24uCgogICAgLy8gR3JvdXAgMTogU3RvcmluZyB0aGUgYGJvdW5jZWAsIGB0b2AgYW5kIGB2YWx1ZWAg" +
+ "aW50byBhIEJ1aWxkZXIKICAgIE5FV0MKICAgIGJ7MDF9IFNUU0xJQ0VDT05TVCAgLy8gc3RvcmUgdGFnID0gJDAgYW5kIGlocl9kaXNhYmxlZCA9IHRydWUKICAgIDEg" +
+ "U1RJICAgICAgICAgICAgICAgLy8gc3RvcmUgYGJvdW5jZWAKICAgIGJ7MDAwfSBTVFNMSUNFQ09OU1QgLy8gc3RvcmUgYm91bmNlZCA9IGZhbHNlIGFuZCBzcmMgPSBh" +
+ "ZGRyX25vbmUKICAgIFNUU0xJQ0UgICAgICAgICAgICAgLy8gc3RvcmUgYHRvYAogICAgU1dBUAogICAgU1RHUkFNUyAgICAgICAgICAgICAvLyBzdG9yZSBgdmFsdWVg" +
+ "CiAgICAxMDUgUFVTSElOVCAgICAgICAgIC8vIDEgKyA0ICsgNCArIDY0ICsgMzIKICAgIFNUWkVST0VTICAgICAgICAgICAgLy8gc3RvcmUgY3VycmVuY3lfY29sbGVj" +
+ "dGlvbiwgaWhyX2ZlZSwgZndkX2ZlZSwgY3JlYXRlZF9sdCBhbmQgY3JlYXRlZF9hdAogICAgLy8g4oaSIFN0YWNrIHN0YXRlCiAgICAvLyBzMDogQnVpbGRlcgogICAg" +
+ "Ly8gczE6IGBkYXRhYAogICAgLy8gczI6IGBjb2RlYAogICAgLy8gczM6IGBib2R5YAogICAgLy8gczQ6IGBtb2RlYAoKICAgIC8vIEdyb3VwIDI6IFBsYWNpbmcgdGhl" +
+ "IEJ1aWxkZXIgYWZ0ZXIgY29kZSBhbmQgZGF0YSwgdGhlbiBjaGVja2luZyB0aG9zZSBmb3IgbnVsbGFiaWxpdHkKICAgIHMyIFhDSEcwCiAgICBEVVAyCiAgICBJU05V" +
+ "TEwKICAgIFNXQVAKICAgIElTTlVMTAogICAgQU5ECiAgICAvLyDihpIgU3RhY2sgc3RhdGUKICAgIC8vIHMwOiAtMSAodHJ1ZSkgaWYgYGRhdGFgIGFuZCBgY29kZWAg" +
+ "YXJlIGJvdGggbnVsbCwgMCAoZmFsc2UpIG90aGVyd2lzZQogICAgLy8gczE6IGBjb2RlYAogICAgLy8gczI6IGBkYXRhYAogICAgLy8gczM6IEJ1aWxkZXIKICAgIC8v" +
+ "IHM0OiBgYm9keWAKICAgIC8vIHM1OiBgbW9kZWAKCiAgICAvLyBHcm91cCAzOiBMZWZ0IGJyYW5jaCBvZiB0aGUgSUZFTFNFLCBleGVjdXRlZCBpZiBzMCBpcyAtMSAo" +
+ "dHJ1ZSkKICAgIDx7CiAgICAgICAgRFJPUDIgLy8gZHJvcCBgZGF0YWAgYW5kIGBjb2RlYCwgc2luY2UgZWl0aGVyIG9mIHRob3NlIGlzIG51bGwKICAgICAgICBiezB9" +
+ "IFNUU0xJQ0VDT05TVAogICAgfT4gUFVTSENPTlQKCiAgICAvLyBHcm91cCAzOiBSaWdodCBicmFuY2ggb2YgdGhlIElGRUxTRSwgZXhlY3V0ZWQgaWYgczAgaXMgMCAo" +
+ "ZmFsc2UpCiAgICA8ewogICAgICAgIC8vIF8gc3BsaXRfZGVwdGg6KE1heWJlICgjIyA1KSkKICAgICAgICAvLyAgIHNwZWNpYWw6KE1heWJlIFRpY2tUb2NrKQogICAg" +
+ "ICAgIC8vICAgY29kZTooTWF5YmUgXkNlbGwpCiAgICAgICAgLy8gICBkYXRhOihNYXliZSBeQ2VsbCkKICAgICAgICAvLyAgIGxpYnJhcnk6KE1heWJlIF5DZWxsKQog" +
+ "ICAgICAgIC8vID0gU3RhdGVJbml0OwogICAgICAgIFJPVCAgICAgICAgICAgICAgICAvLyBwbGFjZSBtZXNzYWdlIEJ1aWxkZXIgb24gdG9wCiAgICAgICAgYnsxMH0g" +
+ "U1RTTElDRUNPTlNUIC8vIHN0b3JlIE1heWJlID0gdHJ1ZSwgRWl0aGVyID0gZmFsc2UKICAgICAgICAvLyBTdGFydCBjb21wb3NpbmcgaW5saW5lZCBTdGF0ZUluaXQK" +
+ "ICAgICAgICBiezAwfSBTVFNMSUNFQ09OU1QgLy8gc3RvcmUgc3BsaXRfZGVwdGggYW5kIHNwZWNpYWwgZmlyc3QKICAgICAgICBTVERJQ1QgICAgICAgICAgICAgLy8g" +
+ "c3RvcmUgY29kZQogICAgICAgIFNURElDVCAgICAgICAgICAgICAvLyBzdG9yZSBkYXRhCiAgICAgICAgYnswfSBTVFNMSUNFQ09OU1QgIC8vIHN0b3JlIGxpYnJhcnkK" +
+ "ICAgIH0+IFBVU0hDT05UCgogICAgLy8gR3JvdXAgMzogSUZFTFNFIHRoYXQgZG9lcyB0aGUgYnJhbmNoaW5nIHNob3duIGFib3ZlCiAgICBJRkVMU0UKICAgIC8vIOKG" +
+ "kiBTdGFjayBzdGF0ZQogICAgLy8gczA6IEJ1aWxkZXIKICAgIC8vIHMxOiBudWxsIG9yIFN0YXRlSW5pdAogICAgLy8gczI6IGBib2R5YAogICAgLy8gczM6IGBtb2Rl" +
+ "YAoKICAgIC8vIEdyb3VwIDQ6IEZpbmFsaXppbmcgdGhlIG1lc3NhZ2UKICAgIFNURElDVCAvLyBzdG9yZSBgYm9keWAgYXMgcmVmIHdpdGggYW4gZXh0cmEgTWF5YmUg" +
+ "Yml0LCBzaW5jZSBgYm9keWAgbWlnaHQgYmUgbnVsbAogICAgRU5EQwogICAgLy8g4oaSIFN0YWNrIHN0YXRlCiAgICAvLyBzMDogQ2VsbAogICAgLy8gczE6IGBtb2Rl" +
+ "YAoKICAgIC8vIEdyb3VwIDU6IFNlbmRpbmcgdGhlIG1lc3NhZ2UsIHdpdGggYG1vZGVgIG9uIHRvcAogICAgU1dBUAogICAgU0VORFJBV01TRyAvLyBodHRwczovL2dp" +
+ "dGh1Yi5jb20vdGFjdC1sYW5nL3RhY3QvaXNzdWVzLzE1NTgKfQoKLy8vIFN0cnVjdCBmb3Igc3BlY2lmeWluZyB0aGUgZGVwbG95bWVudCBtZXNzYWdlIHBhcmFtZXRl" +
+ "cnMgb2YgdGhlIGBkZXBsb3koKWAgZnVuY3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" +
+ "cmcvcmVmL2NvcmUtc2VuZCNkZXBsb3kKLy8vCnN0cnVjdCBEZXBsb3lQYXJhbWV0ZXJzIHsKICAgIC8vLyBBbiA4LWJpdCB2YWx1ZSB0aGF0IGNvbmZpZ3VyZXMgaG93" +
+ "IHRvIHNlbmQgYSBtZXNzYWdlLCBkZWZhdWx0cyB0byAwLgogICAgLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9tZXNzYWdlLW1vZGUKICAg" +
+ "IG1vZGU6IEludCA9IFNlbmREZWZhdWx0TW9kZTsKCiAgICAvLy8gT3B0aW9uYWwgbWVzc2FnZSBib2R5IGFzIGEgYENlbGxgLgogICAgYm9keTogQ2VsbD8gPSBudWxs" +
+ "OwoKICAgIC8vLyBUaGUgYW1vdW50IG9mIG5hbm9Ub25jb2lucyB5b3Ugd2FudCB0byBzZW5kIHdpdGgKICAgIC8vLyB0aGUgbWVzc2FnZS4gVGhpcyB2YWx1ZSBpcyB1" +
+ "c2VkIHRvIGNvdmVyIGZvcndhcmQgZmVlcywKICAgIC8vLyB1bmxlc3MgdGhlIG9wdGlvbmFsIGZsYWcgYFNlbmRQYXlHYXNTZXBhcmF0ZWx5YCBpcyB1c2VkLgogICAg" +
+ "dmFsdWU6IEludDsKCiAgICAvLy8gV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSBtZXNzYWdlIGJvdW5jZXMgYmFjayB0byB0aGUgc2VuZGVyIGlmCiAgICAvLy8g" +
+ "dGhlIHJlY2lwaWVudCBjb250cmFjdCBkb2Vzbid0IGV4aXN0IG9yIHdhc24ndCBhYmxlIHRvIHByb2Nlc3MgdGhlIG1lc3NhZ2UuCiAgICBib3VuY2U6IEJvb2wgPSB0" +
+ "cnVlOwoKICAgIC8vLyBJbml0aWFsIHBhY2thZ2Ugb2YgdGhlIGNvbnRyYWN0IChpbml0aWFsIGNvZGUgYW5kIGluaXRpYWwgZGF0YSkuCiAgICAvLy8gU2VlOiBodHRw" +
+ "czovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL2V4cHJlc3Npb25zI2luaXRvZgogICAgaW5pdDogU3RhdGVJbml0Owp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLiBBdmFp" +
+ "bGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBRdWV1ZXMgdGhlIGNvbnRyYWN0IGRlcGxveW1lbnQgbWVzc2FnZSB0byBiZSBzZW50IHVzaW5nIHRoZSBgRGVw" +
+ "bG95UGFyYW1ldGVyc2AgU3RydWN0LiBBbGxvd3MgZm9yIGNoZWFwZXIgb24tY2hhaW4gZGVwbG95bWVudHMgY29tcGFyZWQgdG8gdGhlIGBzZW5kKClgIGZ1bmN0aW9u" +
+ "LgovLy8KLy8vIFRoZSBgRGVwbG95UGFyYW1ldGVyc2AgU3RydWN0IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOgovLy8gKiBgbW9kZTogSW50YCwgYW4g" +
+ "OC1iaXQgdmFsdWUgdGhhdCBjb25maWd1cmVzIGhvdyB0byBzZW5kIGEgbWVzc2FnZSwgZGVmYXVsdHMgdG8gMC4KLy8vICogYGJvZHk6IENlbGw/YCwgb3B0aW9uYWwg" +
+ "bWVzc2FnZSBib2R5IGFzIGEgYENlbGxgLgovLy8gKiBgdmFsdWU6IEludGAsIHRoZSBhbW91bnQgb2YgbmFub1RvbmNvaW5zIHlvdSB3YW50IHRvIHNlbmQgd2l0aCB0" +
+ "aGUgbWVzc2FnZS4KLy8vICAgVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGNvdmVyIGZvcndhcmQgZmVlcywgdW5sZXNzIHRoZSBvcHRpb25hbCBmbGFnIGBTZW5kUGF5R2Fz" +
+ "U2VwYXJhdGVseWAgaXMgdXNlZC4KLy8vICogYGJvdW5jZTogQm9vbGAsIHdoZW4gc2V0IHRvIGB0cnVlYCAoZGVmYXVsdCkgbWVzc2FnZSBib3VuY2VzIGJhY2sgdG8g" +
+ "dGhlIHNlbmRlcgovLy8gICAgaWYgdGhlIHJlY2lwaWVudCBjb250cmFjdCBkb2Vzbid0IGV4aXN0IG9yIHdhc24ndCBhYmxlIHRvIHByb2Nlc3MgdGhlIG1lc3NhZ2Uu" +
+ "Ci8vLyAqIGBpbml0OiBTdGF0ZUluaXRgLCBpbml0IHBhY2thZ2Ugb2YgdGhlIGNvbnRyYWN0IChpbml0aWFsIGNvZGUgYW5kIGluaXRpYWwgZGF0YSkuCi8vLwovLy8g" +
+ "QXR0ZW1wdHMgdG8gcXVldWUgbW9yZSB0aGFuIDI1NSBtZXNzYWdlcyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBhbiBleGl0IGNvZGUgMzM6IGBBY3Rpb24gbGlzdCBp" +
+ "cyB0b28gbG9uZ2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgZGVwbG95KERlcGxveVBhcmFtZXRlcnN7Ci8vLyAgICAgICAgIGlu" +
+ "aXQ6IGluaXRPZiBTb21lQ29udHJhY3QoKSwgLy8gd2l0aCBpbml0aWFsIGNvZGUgYW5kIGRhdGEgb2YgU29tZUNvbnRyYWN0Ci8vLyAgICAgICAgICAgICAgICAgICAg" +
+ "ICAgICAgICAgICAgICAgICAgLy8gYW5kIG5vIGFkZGl0aW9uYWwgbWVzc2FnZSBib2R5Ci8vLyAgICAgICAgIG1vZGU6IFNlbmRJZ25vcmVFcnJvcnMsICAgICAgLy8g" +
+ "c2tpcCB0aGUgbWVzc2FnZSBpbiBjYXNlIG9mIGVycm9ycwovLy8gICAgICAgICB2YWx1ZTogdG9uKCIxIiksICAgICAgICAgICAgIC8vIHNlbmQgMSBUb25jb2luICgx" +
+ "XzAwMF8wMDBfMDAwIG5hbm9Ub25jb2luKQovLy8gICAgIH0pOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
+ "Zy9yZWYvY29yZS1zZW5kI2RlcGxveQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9ib29rL21lc3NhZ2UtbW9kZQovLy8KYXNtIGZ1biBkZXBsb3kocGFy" +
+ "YW1zOiBEZXBsb3lQYXJhbWV0ZXJzKSB7CiAgICAvLyBJbnN0cnVjdGlvbnMgYXJlIGdyb3VwZWQsIGFuZCB0aGUgc3RhY2sgc3RhdGVzIHRoZXkgcHJvZHVjZSBhcyBh" +
+ "IGdyb3VwIGFyZSBzaG93biByaWdodCBhZnRlci4KICAgIC8vCiAgICAvLyDihpIgU3RhY2sgc3RhdGUKICAgIC8vIHMwOiBgcGFyYW1zLmluaXQuZGF0YWAKICAgIC8v" +
+ "IHMxOiBgcGFyYW1zLmluaXQuY29kZWAKICAgIC8vIHMyOiBgcGFyYW1zLmJvdW5jZWAKICAgIC8vIHMzOiBgcGFyYW1zLnZhbHVlYAogICAgLy8gczQ6IGBwYXJhbXMu" +
+ "Ym9keWAKICAgIC8vIHM1OiBgcGFyYW1zLm1vZGVgCiAgICAvLyBGb3IgYnJldml0eSwgdGhlICJwYXJhbXMiIHByZWZpeCB3aWxsIGJlIG9taXR0ZWQgZnJvbSBub3cg" +
+ "b24uCgogICAgLy8gR3JvdXAgMTogUHJlcGFyYXRpb24gb2YgbmVlZGVkIHBhcmFtcwogICAgLy8gRm9yIGFsbW9zdCBpZGVudGljYWwgbG9naWMgYW5kIGluc3RydWN0" +
+ "aW9ucywKICAgIC8vIHNlZSBjb21tZW50cyBpbnNpZGUgYGNvbnRyYWN0SGFzaCgpYCBmdW5jdGlvbiBpbiBjb250cmFjdC50YWN0CiAgICA0IDEgQkxLUFVTSCAvLyBw" +
+ "dXNoZXMgMiBjb3BpZXMgb2YgYGluaXQuY29kZWAgYW5kIGBpbml0LmRhdGFgCiAgICBIQVNIQ1UgLy8gYGluaXQuZGF0YWAgaGFzaAogICAgU1dBUAogICAgSEFTSENV" +
+ "IC8vIGBpbml0LmNvZGVgIGhhc2gKICAgIFNXQVAyCiAgICBDREVQVEggLy8gYGluaXQuZGF0YWAgZGVwdGgKICAgIFNXQVAKICAgIENERVBUSCAvLyBgaW5pdC5jb2Rl" +
+ "YCBkZXB0aAoKICAgIC8vIEdyb3VwIDI6IENhbGN1bGF0aW5nIGRlc3RpbmF0aW9uIGFkZHJlc3MKICAgIC8vIEZvciBhbG1vc3QgaWRlbnRpY2FsIGxvZ2ljIGFuZCBp" +
+ "bnN0cnVjdGlvbnMsCiAgICAvLyBzZWUgY29tbWVudHMgaW5zaWRlIGBjb250cmFjdEhhc2goKWAgZnVuY3Rpb24gaW4gY29udHJhY3QudGFjdAogICAgMTMxMzgwIElO" +
+ "VCAvLyAoMiA8PCAxNikgfCAoMSA8PCA4KSB8IDB4MzQKICAgIE5FV0MKICAgIDI0IFNUVQogICAgMTYgU1RVCiAgICAxNiBTVFUKICAgIDI1NiBTVFUKICAgIDI1NiBT" +
+ "VFUKICAgIE9ORSBIQVNIRVhUX1NIQTI1NiAvLyBvYnRhaW5zIGhhc2ggcGFydCAoYWNjb3VudCBpZCkgb2YgdGhlIGFkZHJlc3MKICAgIC8vIOKGkiBTdGFjayBzdGF0" +
+ "ZQogICAgLy8gczA6IGRlc3RBZGRyKGhhc2ggcGFydCkKICAgIC8vIHMxOiBgaW5pdC5kYXRhYAogICAgLy8gczI6IGBpbml0LmNvZGVgCiAgICAvLyBzMyBhbmQgYmVs" +
+ "b3c6IGBib3VuY2VgLCBgdmFsdWVgLCBgYm9keWAsIGBtb2RlYAoKICAgIC8vIEdyb3VwIDM6IEJ1aWxkaW5nIGEgbWVzc2FnZSAoQ29tbW9uTXNnSW5mb1JlbGF4ZWQp" +
+ "CiAgICBzMyBYQ0hHMCAgICAgICAgICAgLy8gc3dhcHMgYGJvdW5jZWAgd2l0aCBkZXN0QWRkcihoYXNoIHBhcnQpCiAgICBORVdDCiAgICBiezAxfSBTVFNMSUNFQ09O" +
+ "U1QgLy8gc3RvcmUgdGFnID0gJDAgYW5kIGlocl9kaXNhYmxlZCA9IHRydWUKICAgIDEgU1RJICAgICAgICAgICAgICAvLyBzdG9yZSBgYm91bmNlYAogICAgczEgczIg" +
+ "WENIRyAgICAgICAgIC8vIHN3YXAgYGluaXQuZGF0YWAgd2l0aCBgaW5pdC5jb2RlYCwgcGxhY2luZyBjb2RlIG9uIHMxCiAgICBTVFJFRiAgICAgICAgICAgICAgLy8g" +
+ "c3RvcmUgYGluaXQuY29kZWAKICAgIFNUUkVGICAgICAgICAgICAgICAvLyBzdG9yZSBgaW5pdC5kYXRhYAogICAgLy8gSW5saW5lIFN0YXRlSW5pdDoKICAgIGJ7MDAw" +
+ "MTAwMDAwMDAwMDB9IFNUU0xJQ0VDT05TVAogICAgLy8gMCArIDAwICsgMTAgKyAwICsgMDAwMDAwMDAKICAgIC8vIDEpIDAgLSBib3VuY2VkID0gZmFsc2UKICAgIC8v" +
+ "IDIpIDAwIC0gc3JjID0gYWRkcl9ub25lCiAgICAvLyAzKSAxMCAtIHRhZyBvZiBhZGRyX3N0ZCAocGFydCBvZiBkZXN0KQogICAgLy8gNCkgMCAtIE1heWJlIEFueWNh" +
+ "c3QgPSBmYWxzZQogICAgLy8gNSkgMDAwMDAwMDAgLSB3b3JrY2hhaW5faWQgKHBhcnQgb2YgZGVzdCkKICAgIC8vCiAgICAyNTYgU1RVICAgICAvLyBzdG9yZSBkZXN0" +
+ "QWRkcihoYXNoIHBhcnQpCiAgICBTV0FQICAgICAgICAvLyBCdWlsZGVyIG9uIHRvcCwgYHZhbHVlYCBiZWxvdwogICAgU1RHUkFNUyAgICAgLy8gc3RvcmUgYHZhbHVl" +
+ "YAogICAgMTA1IFBVU0hJTlQgLy8gMSArIDQgKyA0ICsgNjQgKyAzMgogICAgU1RaRVJPRVMgICAgLy8gc3RvcmUgY3VycmVuY3lfY29sbGVjdGlvbiwgaWhyX2ZlZSwg" +
+ "ZndkX2ZlZSwgY3JlYXRlZF9sdCBhbmQgY3JlYXRlZF9hdAoKICAgIC8vIEdyb3VwIDQ6IENvbnRpbnVlIGJ1aWxkaW5nIGEgbWVzc2FnZSAoQ29tbW9uTXNnSW5mb1Jl" +
+ "bGF4ZWQgaW50byBNZXNzYWdlUmVsYXhlZCkKICAgIC8vIFJlbWFpbmluZyBiaXRzIG9mIE1lc3NhZ2VSZWxheGVkOgogICAgYnsxMDAwMTEwfSBTVFNMSUNFQ09OU1QK" +
+ "ICAgIC8vIDEwICsgMCArIDAgKyAxICsgMSArIDAKICAgIC8vIDEwIC0gTWF5YmUgKEVpdGhlciBTdGF0ZUluaXQgXlN0YXRlSW5pdCkgPSB0cnVlIGZhbHNlCiAgICAv" +
+ "LyAwIC0gc3BsaXRfZGVwdGg6KE1heWJlICgjIyA1KSkgPSBmYWxzZQogICAgLy8gMCA9IHNwZWNpYWw6KE1heWJlIFRpY2tUb2NrKSA9IGZhbHNlCiAgICAvLyAxID0g" +
+ "Y29kZTooTWF5YmUgXkNlbGwpID0gdHJ1ZQogICAgLy8gMSA9IGRhdGE6KE1heWJlIF5DZWxsKSA9IHRydWUKICAgIC8vIDAgPSBsaWJyYXJ5OihNYXliZSBeQ2VsbCkg" +
+ "PSBmYWxzZQogICAgLy8KICAgIFNURElDVCAvLyBzdG9yZSBgYm9keWAgYXMgcmVmIHdpdGggYW4gZXh0cmEgTWF5YmUgYml0LCBzaW5jZSBgYm9keWAgbWlnaHQgYmUg" +
+ "bnVsbAogICAgRU5EQyAgIC8vIGZpbmFsaXplIHRoZSBtZXNzYWdlCiAgICAvLyDihpIgU3RhY2sgc3RhdGUKICAgIC8vIHMwOiBDZWxsCiAgICAvLyBzMTogcGFyYW1z" +
+ "LmBtb2RlYAoKICAgIC8vIEdyb3VwIDU6IFNlbmRpbmcgdGhlIG1lc3NhZ2UsIHdpdGggYG1vZGVgIG9uIHRvcAogICAgU1dBUAogICAgU0VORFJBV01TRwp9CgovLy8g" +
+ "R2xvYmFsIGZ1bmN0aW9uLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMS4KLy8vCi8vLyBRdWV1ZXMgYW4gZW1wdHkgbWVzc2FnZSB0byBiZSBzZW50IHdpdGggdGhl" +
+ "IGBTZW5kUmVtYWluaW5nVmFsdWVgIG1vZGUgYW5kIHRoZSBgU2VuZElnbm9yZUVycm9yc2AgZmxhZyB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBgdG9gLgovLy8g" +
+ "VGhpcyBpcyB0aGUgbW9zdCBnYXMtZWZmaWNpZW50IHdheSB0byBzZW5kIHRoZSByZW1haW5pbmcgdmFsdWUgZnJvbSB0aGUgaW5jb21pbmcgbWVzc2FnZSB0byB0aGUg" +
+ "Z2l2ZW4gYWRkcmVzcy4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIHdvbid0IGZvcndhcmQgZXhjZXNzIHZhbHVlcyBpZiBhbnkgb3RoZXIgbWVzc2FnZS1zZW5kaW5nIGZ1" +
+ "bmN0aW9ucyB3ZXJlIGNhbGxlZCBpbiB0aGUgc2FtZSByZWNlaXZlciBiZWZvcmUuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcXVldWUgbW9yZSB0aGFuIDI1NSBtZXNzYWdl" +
+ "cyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgMzM6IGBBY3Rpb24gbGlzdCBpcyB0b28gbG9uZ2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1w" +
+ "bGVzKCkgewovLy8gICAgIC8vIEZvcndhcmQgdGhlIHJlbWFpbmluZyB2YWx1ZSBiYWNrIHRvIHRoZSBzZW5kZXIKLy8vICAgICBjYXNoYmFjayhzZW5kZXIoKSk7Ci8v" +
+ "LwovLy8gICAgIC8vIFRoZSBjYXNoYmFjaygpIGZ1bmN0aW9uIGFib3ZlIGlzIGNoZWFwZXIsIGJ1dCBmdW5jdGlvbmFsbHkKLy8vICAgICAvLyBlcXVpdmFsZW50IHRv" +
+ "IHRoZSBmb2xsb3dpbmcgY2FsbCB0byB0aGUgbWVzc2FnZSgpIGZ1bmN0aW9uCi8vLyAgICAgbWVzc2FnZShNZXNzYWdlUGFyYW1ldGVyc3sKLy8vICAgICAgICAgbW9k" +
+ "ZTogU2VuZFJlbWFpbmluZ1ZhbHVlIHwgU2VuZElnbm9yZUVycm9ycywKLy8vICAgICAgICAgYm9keTogbnVsbCwKLy8vICAgICAgICAgdmFsdWU6IDAsCi8vLyAgICAg" +
+ "ICAgIHRvOiBzZW5kZXIoKSwKLy8vICAgICAgICAgYm91bmNlOiBmYWxzZSwKLy8vICAgICB9KTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2Nz" +
+ "LnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc2VuZCNjYXNoYmFjawovLy8KYXNtIGZ1biBjYXNoYmFjayh0bzogQWRkcmVzcykgewogICAgMTYgUFVTSElOVCAgICAgICAv" +
+ "LyAweDEwLCBpLmUuIDB4MTggYnV0IHdpdGggYm91bmNlID0gZmFsc2UKICAgIE5FV0MKICAgIDYgU1RVICAgICAgICAgICAgLy8gLnN0b3JlVWludCgweDEwLCA2KQog" +
+ "ICAgU1RTTElDRSAgICAgICAgICAvLyAuc3RvcmVBZGRyZXNzKHRvKQogICAgMCBQVVNISU5UICAgICAgICAvLyAwCiAgICAxMTEgU1RVUiAgICAgICAgIC8vIC5zdG9y" +
+ "ZVVpbnQoMCwgMTExKQogICAgICAgICAgICAgICAgICAgICAvLyA0IHplcm9zIGZvciBjb2lucyBhbmQgMTA3IHplcm9zIGZvciBsdCwgZmVlcywgZXRjLgogICAgRU5E" +
+ "QwogICAgNjYgUFVTSElOVCAgICAgICAvLyBTZW5kUmVtYWluaW5nVmFsdWUgfCBTZW5kSWdub3JlRXJyb3JzCiAgICBTRU5EUkFXTVNHCn0KCi8vLyBHbG9iYWwgZnVu" +
+ "Y3Rpb24uCi8vLwovLy8gUXVldWVzIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQgYnkgc3BlY2lmeWluZyB0aGUgY29tcGxldGUgYGNlbGxgIGFuZCB0aGUgbWVzc2FnZSBg" +
+ "bW9kZWAuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcXVldWUgbW9yZSB0aGFuIDI1NSBtZXNzYWdlcyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBhbiBleGl0IGNvZGUgMzM6" +
+ "IGBBY3Rpb24gbGlzdCBpcyB0b28gbG9uZ2AuCi8vLwovLy8gUHJlZmVyIHVzaW5nIGEgbXVjaCBtb3JlIGNvbW1vbiBhbmQgdXNlci1mcmllbmRseSBgc2VuZCgpYCBm" +
+ "dW5jdGlvbiB1bmxlc3MgeW91IGhhdmUgYSBjb21wbGV4IGxvZ2ljIHRoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIG90aGVyd2lzZS4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0" +
+ "dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXNlbmQjbmF0aXZlc2VuZG1lc3NhZ2UKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
+ "cmUtc2VuZCNzZW5kCi8vLwphc20gZnVuIG5hdGl2ZVNlbmRNZXNzYWdlKGNlbGw6IENlbGwsIG1vZGU6IEludCkgeyBTRU5EUkFXTVNHIH0KCi8vLyBHbG9iYWwgZnVu" +
+ "Y3Rpb24uIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNS4wLgovLy8KLy8vIFNpbWlsYXIgdG8gYG5hdGl2ZVNlbmRNZXNzYWdlKClgLCBidXQgYWxzbyBjYWxjdWxhdGVz" +
+ "IGFuZCByZXR1cm5zIHRoZSBmb3J3YXJkIGZlZSBpbiBuYW5vVG9uY29pbnMuCi8vLwovLy8gQXR0ZW1wdHMgdG8gcXVldWUgbW9yZSB0aGFuIDI1NSBtZXNzYWdlcyB0" +
+ "aHJvdyBhbiBleGNlcHRpb24gd2l0aCBhbiBleGl0IGNvZGUgMzM6IGBBY3Rpb24gbGlzdCBpcyB0b28gbG9uZ2AuCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2Rv" +
+ "Y3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1zZW5kI25hdGl2ZXNlbmRtZXNzYWdlcmV0dXJuZm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
+ "Zy9yZWYvY29yZS1zZW5kI25hdGl2ZXNlbmRtZXNzYWdlCi8vLwphc20gZnVuIG5hdGl2ZVNlbmRNZXNzYWdlUmV0dXJuRm9yd2FyZEZlZShtc2c6IENlbGwsIG1vZGU6" +
+ "IEludCk6IEludCB7IFNFTkRNU0cgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4KLy8vCi8vLyBRdWV1ZXMgdGhlIG1lc3NhZ2UgYGJvZHlgIHRvIGJlIHNlbnQgdG8gdGhl" +
+ "IG91dGVyIHdvcmxkIHdpdGggdGhlIHB1cnBvc2Ugb2YgbG9nZ2luZyBhbmQgYW5hbHl6aW5nIGl0IGxhdGVyIG9mZi1jaGFpbi4gVGhlIG1lc3NhZ2UgZG9lcyBub3Qg" +
+ "aGF2ZSBhIHJlY2lwaWVudCBhbmQgaXMgbW9yZSBnYXMtZWZmaWNpZW50IGNvbXBhcmVkIHRvIHVzaW5nIGFueSBvdGhlciBtZXNzYWdlLXNlbmRpbmcgZnVuY3Rpb25z" +
+ "IG9mIFRhY3QuCi8vLwovLy8gVGhlIG1lc3NhZ2UgaXMgc2VudCB3aXRoIHRoZSBkZWZhdWx0IG1vZGU6IGBTZW5kRGVmYXVsdE1vZGVgICgwKS4KLy8vCi8vLyBBdHRl" +
"bXB0cyB0byBxdWV1ZSBtb3JlIHRoYW4gMjU1IG1lc3NhZ2VzIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGFuIGV4aXQgY29kZSAzMzogYEFjdGlvbiBsaXN0IGlzIHRv" +
- "byBsb25nYC4KLy8vCi8vLyBQcmVmZXIgdXNpbmcgYSBtdWNoIG1vcmUgY29tbW9uIGFuZCB1c2VyLWZyaWVuZGx5IGBzZW5kKClgIGZ1bmN0aW9uIHVubGVzcyB5b3Ug" +
- "aGF2ZSBhIGNvbXBsZXggbG9naWMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgb3RoZXJ3aXNlLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFu" +
- "Zy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQjbmF0aXZlc2VuZG1lc3NhZ2UKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY29tbW9uI3NlbmQK" +
- "Ly8vCmFzbSBmdW4gbmF0aXZlU2VuZE1lc3NhZ2UoY2VsbDogQ2VsbCwgbW9kZTogSW50KSB7IFNFTkRSQVdNU0cgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4gQXZhaWxh" +
- "YmxlIHNpbmNlIFRhY3QgMS41LjAuCi8vLwovLy8gU2ltaWxhciB0byBgbmF0aXZlU2VuZE1lc3NhZ2UoKWAsIGJ1dCBhbHNvIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMg" +
- "dGhlIGZvcndhcmQgZmVlIGluIG5hbm9Ub25jb2lucy4KLy8vCi8vLyBBdHRlbXB0cyB0byBxdWV1ZSBtb3JlIHRoYW4gMjU1IG1lc3NhZ2VzIHRocm93IGFuIGV4Y2Vw" +
- "dGlvbiB3aXRoIGFuIGV4aXQgY29kZSAzMzogYEFjdGlvbiBsaXN0IGlzIHRvbyBsb25nYC4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcu" +
- "b3JnL3JlZi9jb3JlLWFkdmFuY2VkI25hdGl2ZXNlbmRtZXNzYWdlcmV0dXJuZm9yd2FyZGZlZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29y" +
- "ZS1hZHZhbmNlZCNuYXRpdmVzZW5kbWVzc2FnZQovLy8KYXNtIGZ1biBuYXRpdmVTZW5kTWVzc2FnZVJldHVybkZvcndhcmRGZWUobXNnOiBDZWxsLCBtb2RlOiBJbnQp" +
- "OiBJbnQgeyBTRU5ETVNHIH0KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gUXVldWVzIHRoZSBtZXNzYWdlIGBib2R5YCB0byBiZSBzZW50IHRvIHRoZSBvdXRl" +
- "ciB3b3JsZCB3aXRoIHRoZSBwdXJwb3NlIG9mIGxvZ2dpbmcgYW5kIGFuYWx5emluZyBpdCBsYXRlciBvZmYtY2hhaW4uIFRoZSBtZXNzYWdlIGRvZXMgbm90IGhhdmUg" +
- "YSByZWNpcGllbnQgYW5kIGlzIG1vcmUgZ2FzLWVmZmljaWVudCBjb21wYXJlZCB0byB1c2luZyBhbnkgb3RoZXIgbWVzc2FnZS1zZW5kaW5nIGZ1bmN0aW9ucyBvZiBU" +
- "YWN0LgovLy8KLy8vIFRoZSBtZXNzYWdlIGlzIHNlbnQgd2l0aCB0aGUgZGVmYXVsdCBtb2RlOiBgU2VuZERlZmF1bHRNb2RlYCAoMCkuCi8vLwovLy8gQXR0ZW1wdHMg" +
- "dG8gcXVldWUgbW9yZSB0aGFuIDI1NSBtZXNzYWdlcyB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBhbiBleGl0IGNvZGUgMzM6IGBBY3Rpb24gbGlzdCBpcyB0b28gbG9u" +
- "Z2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgZW1pdCgiQ2F0Y2ggbWUgaWYgeW91IGNhbiwgTXIuIEhvbG1lcyIuYXNDb21tZW50" +
- "KCkpOyAvLyBhc0NvbW1lbnQoKSBjb252ZXJ0cyBhIFN0cmluZyB0byBhIENlbGwKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFu" +
- "Zy5vcmcvcmVmL2NvcmUtY29tbW9uI2VtaXQKLy8vCmlubGluZSBmdW4gZW1pdChib2R5OiBDZWxsKSB7CiAgICAvLyBleHRfb3V0X21zZ19pbmZvJDExIHNyYzpNc2dB" +
- "ZGRyZXNzSW50IGRlc3Q6TXNnQWRkcmVzc0V4dCBjcmVhdGVkX2x0OnVpbnQ2NCBjcmVhdGVkX2F0OnVpbnQzMgogICAgLy8gICAgICAgICAgICAgICAgICAgICBtYXli" +
- "ZTogc3RhdGVJbml0IChmYWxzZSkgYm9keVJlZjogYm9vbCAodHJ1ZSkKICAgIGxldCBjOiBDZWxsID0gYmVnaW5DZWxsKCkKICAgICAgICAuc3RvcmVVaW50KDE1MjEx" +
- "ODA3MjAyNzM4NzUyODE3OTYwNDM4NDY0NTEzLCAxMDQpCiAgICAgICAgLnN0b3JlUmVmKGJvZHkpCiAgICAgICAgLmVuZENlbGwoKTsKICAgIG5hdGl2ZVNlbmRNZXNz" +
- "YWdlKGMsIDApOwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIEFncmVlcyB0byBidXkgc29tZSBnYXMgdG8gZmluaXNoIHRoZSBjdXJyZW50IHRyYW5zYWN0" +
- "aW9uIGJ5IHNldHRpbmcgdGhlIGBnYXNfbGltaXRgIHRvIGl0cyBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgb2YgMl42MyAtIDEgYW5kIHJlc2V0dGluZyB0aGUgYGdhc19j" +
- "cmVkaXRgIHRvIDAuIFRoaXMgYWN0aW9uIGlzIHJlcXVpcmVkIHRvIHByb2Nlc3MgZXh0ZXJuYWwgbWVzc2FnZXMsIHdoaWNoIGJyaW5nIG5vIHZhbHVlIChoZW5jZSBu" +
- "byBnYXMpIHdpdGggdGhlbXNlbHZlcy4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBjb250cmFjdCBUaW1lb3V0IHsKLy8vICAgICB0aW1lb3V0OiBJbnQ7Ci8vLwovLy8gICAg" +
- "IGluaXQoKSB7Ci8vLyAgICAgICAgIHNlbGYudGltZW91dCA9IG5vdygpICsgNSAqIDYwOyAvLyA1IG1pbnV0ZXMgZnJvbSBub3cKLy8vICAgICB9Ci8vLwovLy8gICAg" +
- "IGV4dGVybmFsKCJ0aW1lb3V0IikgewovLy8gICAgICAgICBpZiAobm93KCkgPiBzZWxmLnRpbWVvdXQpIHsKLy8vICAgICAgICAgICAgIGFjY2VwdE1lc3NhZ2UoKTsg" +
- "Ly8gc3RhcnQgYWNjZXB0aW5nIGV4dGVybmFsIG1lc3NhZ2VzIG9uY2UgdGltZW91dCB3ZW50IG91dAovLy8gICAgICAgICB9Ci8vLyAgICAgfQovLy8gfQovLy8gYGBg" +
- "Ci8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1hZHZhbmNlZCNhY2NlcHRtZXNzYWdlCi8vLwphc20gZnVuIGFjY2VwdE1lc3Nh" +
- "Z2UoKSB7IEFDQ0VQVCB9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENvbW1pdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcmVnaXN0ZXJzIGBjNGAgKHBlcnNp" +
- "c3RlbnQgZGF0YSkgYW5kIGBjNWAgKGFjdGlvbnMpLCBzbyB0aGF0IHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBpcyBjb25zaWRlcmVkICJzdWNjZXNzZnVsIiB3aXRoIHRo" +
- "ZSBzYXZlZCB2YWx1ZXMgZXZlbiBpZiBhbiBleGNlcHRpb24gaW4gY29tcHV0ZSBwaGFzZSBpcyB0aHJvd24gbGF0ZXIuCi8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhh" +
- "bXBsZSgpIHsKLy8vICAgICBjb21taXQoKTsgIC8vIG5vdywgdHJhbnNhY3Rpb24gaXMgY29uc2lkZXJlZCAic3VjY2Vzc2Z1bCIKLy8vICAgICB0aHJvdyg0Mik7IC8v" +
- "IGFuZCB0aGlzIHdvbid0IGZhaWwgaXQKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWR2YW5jZWQj" +
- "Y29tbWl0Ci8vLwphc20gZnVuIGNvbW1pdCgpIHsgQ09NTUlUIH0K";
+ "byBsb25nYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBlbWl0KCJDYXRjaCBtZSBpZiB5b3UgY2FuLCBNci4gSG9sbWVzIi5hc0Nv" +
+ "bW1lbnQoKSk7IC8vIGFzQ29tbWVudCgpIGNvbnZlcnRzIGEgU3RyaW5nIHRvIGEgQ2VsbAovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFj" +
+ "dC1sYW5nLm9yZy9yZWYvY29yZS1zZW5kI2VtaXQKLy8vCmlubGluZSBmdW4gZW1pdChib2R5OiBDZWxsKSB7CiAgICAvLyBleHRfb3V0X21zZ19pbmZvJDExIHNyYzpN" +
+ "c2dBZGRyZXNzSW50IGRlc3Q6TXNnQWRkcmVzc0V4dCBjcmVhdGVkX2x0OnVpbnQ2NCBjcmVhdGVkX2F0OnVpbnQzMgogICAgLy8gICAgICAgICAgICAgICAgICAgICBt" +
+ "YXliZTogc3RhdGVJbml0IChmYWxzZSkgYm9keVJlZjogYm9vbCAodHJ1ZSkKICAgIGxldCBjOiBDZWxsID0gYmVnaW5DZWxsKCkKICAgICAgICAuc3RvcmVVaW50KDE1" +
+ "MjExODA3MjAyNzM4NzUyODE3OTYwNDM4NDY0NTEzLCAxMDQpCiAgICAgICAgLnN0b3JlUmVmKGJvZHkpCiAgICAgICAgLmVuZENlbGwoKTsKICAgIG5hdGl2ZVNlbmRN" +
+ "ZXNzYWdlKGMsIDApOwp9CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIEFncmVlcyB0byBidXkgc29tZSBnYXMgdG8gZmluaXNoIHRoZSBjdXJyZW50IHRyYW5z" +
+ "YWN0aW9uIGJ5IHNldHRpbmcgdGhlIGBnYXNfbGltaXRgIHRvIGl0cyBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgb2YgMl42MyAtIDEgYW5kIHJlc2V0dGluZyB0aGUgYGdh" +
+ "c19jcmVkaXRgIHRvIDAuIFRoaXMgYWN0aW9uIGlzIHJlcXVpcmVkIHRvIHByb2Nlc3MgZXh0ZXJuYWwgbWVzc2FnZXMsIHdoaWNoIGJyaW5nIG5vIHZhbHVlIChoZW5j" +
+ "ZSBubyBnYXMpIHdpdGggdGhlbXNlbHZlcy4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBjb250cmFjdCBUaW1lb3V0IHsKLy8vICAgICB0aW1lb3V0OiBJbnQ7Ci8vLwovLy8g" +
+ "ICAgIGluaXQoKSB7Ci8vLyAgICAgICAgIHNlbGYudGltZW91dCA9IG5vdygpICsgNSAqIDYwOyAvLyA1IG1pbnV0ZXMgZnJvbSBub3cKLy8vICAgICB9Ci8vLwovLy8g" +
+ "ICAgIGV4dGVybmFsKCJ0aW1lb3V0IikgewovLy8gICAgICAgICBpZiAobm93KCkgPiBzZWxmLnRpbWVvdXQpIHsKLy8vICAgICAgICAgICAgIGFjY2VwdE1lc3NhZ2Uo" +
+ "KTsgLy8gc3RhcnQgYWNjZXB0aW5nIGV4dGVybmFsIG1lc3NhZ2VzIG9uY2UgdGltZW91dCB3ZW50IG91dAovLy8gICAgICAgICB9Ci8vLyAgICAgfQovLy8gfQovLy8g" +
+ "YGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1nYXMjYWNjZXB0bWVzc2FnZQovLy8KYXNtIGZ1biBhY2NlcHRNZXNzYWdl" +
+ "KCkgeyBBQ0NFUFQgfQoKLy8vIEdsb2JhbCBmdW5jdGlvbi4KLy8vCi8vLyBDb21taXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHJlZ2lzdGVycyBgYzRgIChwZXJzaXN0" +
+ "ZW50IGRhdGEpIGFuZCBgYzVgIChhY3Rpb25zKSwgc28gdGhhdCB0aGUgY3VycmVudCBleGVjdXRpb24gaXMgY29uc2lkZXJlZCAic3VjY2Vzc2Z1bCIgd2l0aCB0aGUg" +
+ "c2F2ZWQgdmFsdWVzIGV2ZW4gaWYgYW4gZXhjZXB0aW9uIGluIGNvbXB1dGUgcGhhc2UgaXMgdGhyb3duIGxhdGVyLgovLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1w" +
+ "bGUoKSB7Ci8vLyAgICAgY29tbWl0KCk7ICAvLyBub3csIHRyYW5zYWN0aW9uIGlzIGNvbnNpZGVyZWQgInN1Y2Nlc3NmdWwiCi8vLyAgICAgdGhyb3coNDIpOyAvLyBh" +
+ "bmQgdGhpcyB3b24ndCBmYWlsIGl0Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNvbnRleHRzdGF0" +
+ "ZSNjb21taXQKLy8vCmFzbSBmdW4gY29tbWl0KCkgeyBDT01NSVQgfQo=";
files["std/internal/text.tact"] =
"Ly8KLy8gU3RyaW5nIGJ1aWxkZXIKLy8KCi8vLyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBlbXB0eSBgU3RyaW5nQnVpbGRl" +
- "cmAuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCk6IFN0cmluZyB7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygp" +
- "OwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1zdHJpbmdzLwovLy8KQG5hbWUoX190YWN0" +
- "X3N0cmluZ19idWlsZGVyX3N0YXJ0X3N0cmluZykKbmF0aXZlIGJlZ2luU3RyaW5nKCk6IFN0cmluZ0J1aWxkZXI7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8v" +
- "IENyZWF0ZXMgYW5kIHJldHVybnMgYW4gZW1wdHkgYFN0cmluZ0J1aWxkZXJgIGZvciBidWlsZGluZyBhIGNvbW1lbnQgc3RyaW5nLCB3aGljaCBwcmVmaXhlcyAKLy8v" +
- "IHRoZSByZXN1bHRpbmcgYFN0cmluZ2Agd2l0aCBmb3VyIG51bGwgYnl0ZXMuIFRoaXMgZm9ybWF0IGlzIHVzZWQgZm9yIHBhc3NpbmcgdGV4dCBjb21tZW50cyAKLy8v" +
- "IGFzIG1lc3NhZ2UgYm9kaWVzLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCk6IFN0cmluZyB7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZ0J1aWxkZXIg" +
- "PSBiZWdpbkNvbW1lbnQoKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncy8K" +
- "Ly8vCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9zdGFydF9jb21tZW50KQpuYXRpdmUgYmVnaW5Db21tZW50KCk6IFN0cmluZ0J1aWxkZXI7CgovLy8gR2xvYmFs" +
- "IGZ1bmN0aW9uLgovLy8KLy8vIENyZWF0ZXMgYW5kIHJldHVybnMgYW4gZW1wdHkgYFN0cmluZ0J1aWxkZXJgIGZvciBidWlsZGluZyBhIHRhaWwgc3RyaW5nLCB3aGlj" +
- "aCBwcmVmaXhlcyAKLy8vIHRoZSByZXN1bHRpbmcgYFN0cmluZ2Agd2l0aCBhIHNpbmdsZSBudWxsIGJ5dGUuIFRoaXMgZm9ybWF0IGlzIHVzZWQgaW4gdmFyaW91cyBz" +
- "dGFuZGFyZHMgCi8vLyBzdWNoIGFzIE5GVCBvciBKZXR0b24uCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKTogU3RyaW5nIHsKLy8vICAgICBsZXQgZml6" +
- "ejogU3RyaW5nQnVpbGRlciA9IGJlZ2luVGFpbFN0cmluZygpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
- "Zy9yZWYvY29yZS1zdHJpbmdzLwovLy8KQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0YXJ0X3RhaWxfc3RyaW5nKQpuYXRpdmUgYmVnaW5UYWlsU3RyaW5nKCk6" +
- "IFN0cmluZ0J1aWxkZXI7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgYFN0cmluZ0J1aWxkZXJgIGZyb20gYW4g" +
- "ZXhpc3RpbmcgYFN0cmluZ0J1aWxkZXJgIGBiYC4gVXNlZnVsIHdoZW4gCi8vLyB5b3UgbmVlZCB0byBzZXJpYWxpemUgYW4gZXhpc3RpbmcgYFN0cmluZ2AgdG8gYSBg" +
- "Q2VsbGAgYWxvbmcgd2l0aCBvdGhlciBkYXRhLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCk6IFN0cmluZyB7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmlu" +
- "Z0J1aWxkZXIgPSBiZWdpblN0cmluZ0Zyb21CdWlsZGVyKGJlZ2luU3RyaW5nKCkpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3Mu" +
- "dGFjdC1sYW5nLm9yZy9yZWYvY29yZS1zdHJpbmdzLwovLy8KQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0YXJ0KQpuYXRpdmUgYmVnaW5TdHJpbmdGcm9tQnVp" +
- "bGRlcihiOiBCdWlsZGVyKTogU3RyaW5nQnVpbGRlcjsKCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBgU3RyaW5nQnVpbGRlcmAgdHlwZS4K" +
- "Ly8vCi8vLyBBcHBlbmRzIGEgYFN0cmluZ2AgYHNgIHRvIHRoZSBgU3RyaW5nQnVpbGRlcmAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAg" +
- "ICAgbGV0IGZpeno6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygpOwovLy8gICAgIGZpenouYXBwZW5kKCJvaCIpOwovLy8gICAgIGZpenouYXBwZW5kKCJteSIp" +
- "OwovLy8gICAgIGZpenouYXBwZW5kKCJUYWN0ISIpOwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVm" +
- "L2NvcmUtc3RyaW5ncy8KLy8vCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9hcHBlbmQpCmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgYXBwZW5kKHNlbGY6IFN0cmlu" +
- "Z0J1aWxkZXIsIHM6IFN0cmluZyk7CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFN0cmluZ0J1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIG5l" +
- "dyBgU3RyaW5nQnVpbGRlcmAgYWZ0ZXIgY29uY2F0ZW5hdGluZyBpdCB3aXRoIGEgYFN0cmluZ2AgYHNgLiBJdCBjYW4gYmUgY2hhaW5lZCwgCi8vLyB1bmxpa2UgYFN0" +
- "cmluZ0J1aWxkZXIuYXBwZW5kKClgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmaXp6OiBTdHJpbmdCdWlsZGVyID0gYmVn" +
- "aW5TdHJpbmcoKQovLy8gICAgICAgICAuY29uY2F0KCJvaCIpCi8vLyAgICAgICAgIC5jb25jYXQoIm15IikKLy8vICAgICAgICAgLmNvbmNhdCgiVGFjdCEiKTsKLy8v" +
- "IH0KLy8vIGBgYAovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncy8KLy8vCkBuYW1lKF9fdGFjdF9zdHJp" +
- "bmdfYnVpbGRlcl9hcHBlbmRfbm90X211dCkKZXh0ZW5kcyBuYXRpdmUgY29uY2F0KHNlbGY6IFN0cmluZ0J1aWxkZXIsIHM6IFN0cmluZyk6IFN0cmluZ0J1aWxkZXI7" +
- "CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFN0cmluZ0J1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhbiBhc3NlbWJsZWQgYENlbGxgIGZyb20g" +
- "YSBgU3RyaW5nQnVpbGRlcmAuCi8vLyAKLy8vIE5PVEU6ICoqR2FzIGV4cGVuc2l2ZSEqKiBUaGlzIGZ1bmN0aW9uIHVzZXMgNTAwIGdhcyB1bml0cyBvciBtb3JlLgov" +
- "Ly8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmaXp6OiBTdHJpbmdCdWlsZGVyID0gYmVnaW5TdHJpbmcoKTsKLy8vICAgICBsZXQg" +
- "YnV6ejogQ2VsbCA9IGZpenoudG9DZWxsKCk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3Jl" +
- "LXN0cmluZ3MvCi8vLwpAbmFtZShfX3RhY3Rfc3RyaW5nX2J1aWxkZXJfZW5kKQpleHRlbmRzIG5hdGl2ZSB0b0NlbGwoc2VsZjogU3RyaW5nQnVpbGRlcik6IENlbGw7" +
- "CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFN0cmluZ0J1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIGJ1aWx0IGBTdHJpbmdgIGZyb20gYSBg" +
- "U3RyaW5nQnVpbGRlcmAuCi8vLyAKLy8vIE5PVEU6ICoqR2FzIGV4cGVuc2l2ZSEqKiBUaGlzIGZ1bmN0aW9uIHVzZXMgNTAwIGdhcyB1bml0cyBvciBtb3JlLgovLy8K" +
- "Ly8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmaXp6OiBTdHJpbmdCdWlsZGVyID0gYmVnaW5TdHJpbmcoKTsKLy8vICAgICBsZXQgYnV6" +
- "ejogU3RyaW5nID0gZml6ei50b1N0cmluZygpOwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2Nv" +
- "cmUtc3RyaW5ncy8KLy8vCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9lbmRfc2xpY2UpCmV4dGVuZHMgbmF0aXZlIHRvU3RyaW5nKHNlbGY6IFN0cmluZ0J1aWxk" +
- "ZXIpOiBTdHJpbmc7CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFN0cmluZ0J1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhbiBhc3NlbWJsZWQg" +
- "YENlbGxgIGFzIGEgYFNsaWNlYCBmcm9tIGEgYFN0cmluZ0J1aWxkZXJgLgovLy8gQW4gYWxpYXMgdG8gYHNlbGYudG9DZWxsKCkuYXNTbGljZSgpYC4KLy8vIAovLy8g" +
- "Tk9URTogKipHYXMgZXhwZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1w" +
- "bGUoKSB7Ci8vLyAgICAgbGV0IHM6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygpOwovLy8gICAgIGxldCBmaXp6OiBTbGljZSA9IHMudG9TbGljZSgpOwovLy8g" +
- "ICAgIGxldCBidXp6OiBTbGljZSA9IHMudG9DZWxsKCkuYXNTbGljZSgpOwovLy8KLy8vICAgICBmaXp6ID09IGJ1eno7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8K" +
- "Ly8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncy8KLy8vCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9lbmRf" +
- "c2xpY2UpCmV4dGVuZHMgbmF0aXZlIHRvU2xpY2Uoc2VsZjogU3RyaW5nQnVpbGRlcik6IFNsaWNlOwoKLy8KLy8gU3RyaW5nIGNvbnZlcnNpb24KLy8KCi8vLyBFeHRl" +
- "bnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgSW50YCB0eXBlLgovLy8KLy8vIFJldHVybnMgYSBgU3RyaW5nYCBmcm9tIGFuIGBJbnRgIHZhbHVlLgovLy8gCi8vLyBOT1RF" +
- "OiAqKkdhcyBleHBlbnNpdmUhKiogVGhpcyBmdW5jdGlvbiB1c2VzIDUwMCBnYXMgdW5pdHMgb3IgbW9yZS4KLy8vIAovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUo" +
- "KSB7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZyA9ICg4NCAtIDQyKS50b1N0cmluZygpOwovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9k" +
- "b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncy8KLy8vCmFzbSBleHRlbmRzIGZ1biB0b1N0cmluZyhzZWxmOiBJbnQpOiBTdHJpbmcgewogICAgLy8geAog" +
- "ICAgCiAgICA8ewogICAgICAgIC8vIHgKICAgICAgICBORVdDIC8vIHggYgogICAgICAgIE9WRVIgLy8geCBiIHgKICAgICAgICAwIExFU1NJTlQgLy8geCBiIDwwPwog" +
- "ICAgICAgIDx7CiAgICAgICAgICAgIC8vIHggYgogICAgICAgICAgICA0NSBQVVNISU5UIC8vIHggYiA0NQogICAgICAgICAgICBTV0FQIC8vIHggNDUgYgogICAgICAg" +
- "ICAgICA4IFNUVSAvLyB4IGIKICAgICAgICAgICAgU1dBUCAvLyBiIHgKICAgICAgICAgICAgTkVHQVRFIC8vIGIgLXgKICAgICAgICAgICAgU1dBUCAvLyAteCBiCiAg" +
- "ICAgICAgfT5DT05UIElGCiAgICAgICAgLy8geCBiCgogICAgICAgIFNXQVAgLy8gYiB4CgogICAgICAgIDx7CiAgICAgICAgICAgIC8vIGIgeAogICAgICAgICAgICAx" +
- "MCBQVVNISU5UIERJVk1PRCAvLyBiIHgvMTAgeCUxMCAKICAgICAgICAgICAgNDggQUREQ09OU1QgLy8gYiB4LzEwICh4JTEwKzQ4KQogICAgICAgICAgICBzMiBzMiBz" +
- "MCBYQzJQVSBJU1pFUk8gLy8gKHglMTArNDgpIGIgeC8xMCB4LzEwPT0wPwogICAgICAgIH0+Q09OVCBVTlRJTAogICAgICAgIC8vIC4uLiBiIHgKCiAgICAgICAgRFJP" +
- "UCAvLyAuLi4gYgogICAgICAgIERFUFRIIERFQyAvLyAuLi4gYiBuCiAgICAgICAgPHsgOCBTVFUgfT5DT05UIFJFUEVBVCAvLyBiCiAgICB9PkNPTlQgMSAxIENBTExY" +
- "QVJHUwogICAgLy8gYgoKICAgIEVOREMgQ1RPUyAvLyBzCn0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgSW50YCB0eXBlLgovLy8KLy8vIFJldHVybnMg" +
- "YSBgU3RyaW5nYCBmcm9tIGFuIGBJbnRgIHZhbHVlIHVzaW5nIGEgW2ZpeGVkLXBvaW50IHJlcHJlc2VudGF0aW9uXSBvZiBhIGZyYWN0aW9uYWwKLy8vIG51bWJlciwg" +
- "d2hlcmUgYHNlbGZgIGlzIHRoZSBzaWduaWZpY2FudCBwYXJ0IG9mIHRoZSBudW1iZXIgYW5kIGBkaWdpdHNgIGlzIHRoZSBudW1iZXIgCi8vLyBvZiBkaWdpdHMgaW4g" +
- "dGhlIGZyYWN0aW9uYWwgcGFydC4KLy8vIAovLy8gTk9URTogKipHYXMgZXhwZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUu" +
- "Ci8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBmaXp6OiBTdHJpbmcgPSAoNDIpLnRvRmxvYXRTdHJpbmcoOSk7IC8vICIwLjAw" +
- "MDAwMDA0MiIKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXN0cmluZ3MvCi8vLyAKLy8v" +
- "IFtmaXhlZC1wb2ludCByZXByZXNlbnRhdGlvbl06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZpeGVkLXBvaW50X2FyaXRobWV0aWMKYXNtIGV4dGVuZHMg" +
- "ZnVuIHRvRmxvYXRTdHJpbmcoc2VsZjogSW50LCBkaWdpdHM6IEludCk6IFN0cmluZyAgewogICAgLy8geCBkaWdpdHMKCiAgICBEVVAgLy8geCBkaWdpdHMgZGlnaXRz" +
- "CiAgICAxIExFU1NJTlQgLy8geCBkaWdpdHMgZGlnaXRzPD0wCiAgICAxMzQgVEhST1dJRiAvLyB4IGRpZ2l0cwogICAgRFVQIC8vIHggZGlnaXRzIGRpZ2l0cwogICAg" +
- "NzcgR1RJTlQgLy8geCBkaWdpdHMgZGlnaXRzPjc3CiAgICAxMzQgVEhST1dJRiAvLyB4IGRpZ2l0cwoKICAgIE5FV0MgLy8geCBkaWdpdHMgYgogICAgUk9UUkVWIC8v" +
- "IGIgeCBkaWdpdHMKICAgIHMxIFBVU0ggLy8gYiB4IGRpZ2l0cyB4CiAgICAwIExFU1NJTlQgLy8gYiB4IGRpZ2l0cyB4PDA/CgogICAgPHsKICAgICAgICAvLyBiIHgg" +
- "ZGlnaXRzCiAgICAgICAgUk9UIC8vIHggZGlnaXRzIGIKICAgICAgICB4ezJkfSBTVFNMSUNFQ09OU1QgLy8geCBkaWdpdHMgYgogICAgICAgIFJPVCAvLyBkaWdpdHMg" +
- "YiB4CiAgICAgICAgTkVHQVRFIC8vIGRpZ2l0cyBiIC14CiAgICAgICAgUk9UIC8vIGIgLXggZGlnaXRzCiAgICB9PkNPTlQgSUYKCiAgICAvLyBiIHggZGlnaXRzCiAg" +
- "ICBPTkUgLy8gYiB4IGRpZ2l0cyAxCiAgICBPVkVSIC8vIGIgeCBkaWdpdHMgMSBkaWdpdHMKCiAgICA8eyAxMCBNVUxDT05TVCB9PkNPTlQgUkVQRUFUIC8vIGIgeCBk" +
- "aWdpdHMgMTBeZGlnaXRzCgogICAgczEgczIgWENIRyAvLyBiIGRpZ2l0cyB4IDEwXmRpZ2l0cwogICAgRElWTU9EIC8vIGIgZGlnaXRzIGxlZnQgcmlnaHQKICAgIHMz" +
- "IHMzIFhDSEcyIC8vIHJpZ2h0IGRpZ2l0cyBiIGxlZnQKCiAgICA8ewogICAgICAgIC8vIGIgeAoKICAgICAgICA8ewogICAgICAgICAgICAvLyBiIHgKICAgICAgICAg" +
- "ICAgMTAgUFVTSElOVCBESVZNT0QgLy8gYiB4LzEwIHglMTAgCiAgICAgICAgICAgIDQ4IEFERENPTlNUIC8vIGIgeC8xMCAoeCUxMCs0OCkKICAgICAgICAgICAgczIg" +
- "czIgczAgWEMyUFUgSVNaRVJPIC8vICh4JTEwKzQ4KSBiIHgvMTAgeC8xMD09MD8KICAgICAgICB9PkNPTlQgVU5USUwKICAgICAgICAvLyAuLi4gYiB4CgogICAgICAg" +
- "IERST1AgLy8gLi4uIGIKICAgICAgICBERVBUSCBERUMgLy8gLi4uIGIgbgogICAgICAgIDx7IDggU1RVIH0+Q09OVCBSRVBFQVQgLy8gYgogICAgfT5DT05UIDIgMSBD" +
- "QUxMWEFSR1MKCiAgICAvLyByaWdodCBkaWdpdHMgImxlZnQiCgogICAgUk9UIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQKICAgIERVUCAvLyBkaWdpdHMgImxlZnQiIHJp" +
- "Z2h0IHJpZ2h0CiAgICBJU1pFUk8gLy8gZGlnaXRzICJsZWZ0IiByaWdodCByaWdodD09MD8KCiAgICA8ewogICAgICAgIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQKICAg" +
- "ICAgICBEUk9QIC8vIGRpZ2l0cyAibGVmdCIKICAgICAgICBOSVAgLy8gImxlZnQiCiAgICB9PkNPTlQKCiAgICA8ewogICAgICAgIC8vIGRpZ2l0cyAibGVmdCIgcmln" +
- "aHQKICAgICAgICBaRVJPIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQgMAogICAgICAgIFNXQVAgLy8gZGlnaXRzICJsZWZ0IiAwIHJpZ2h0CiAgICAgICAgCiAgICAgICAg" +
- "PHsKICAgICAgICAgICAgLy8gZGlnaXRzICJsZWZ0IiBpIHJpZ2h0CiAgICAgICAgICAgIERVUCAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHQgcmlnaHQKICAgICAgICAg" +
- "ICAgMTAgUFVTSElOVCAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHQgcmlnaHQgMTAKICAgICAgICAgICAgTU9EIC8vIGRpZ2l0cyAibGVmdCIgaSByaWdodCByaWdodCUx" +
- "MAogICAgICAgICAgICBJU1pFUk8gLy8gZGlnaXRzICJsZWZ0IiBpIHJpZ2h0IHJpZ2h0JTEwPT0wPwogICAgICAgIH0+Q09OVAoKICAgICAgICA8ewogICAgICAgICAg" +
- "ICAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHQKICAgICAgICAgICAgMTAgUFVTSElOVCAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHQgMTAKICAgICAgICAgICAgRElWIC8v" +
- "IGRpZ2l0cyAibGVmdCIgaSByaWdodC8xMAogICAgICAgICAgICBTV0FQIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQvMTAgaQogICAgICAgICAgICBJTkMgLy8gZGlnaXRz" +
- "ICJsZWZ0IiByaWdodC8xMCBpKzEKICAgICAgICAgICAgU1dBUCAvLyBkaWdpdHMgImxlZnQiIGkrMSByaWdodC8xMAogICAgICAgIH0+Q09OVAoKICAgICAgICBXSElM" +
- "RSAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHQKCiAgICAgICAgPHsKICAgICAgICAgICAgLy8geAogICAgICAgICAgICBORVdDIC8vIHggYgogICAgICAgICAgICBTV0FQ" +
- "IC8vIGIgeAoKICAgICAgICAgICAgPHsKICAgICAgICAgICAgICAgIC8vIGIgeAogICAgICAgICAgICAgICAgMTAgUFVTSElOVCBESVZNT0QgLy8gYiB4LzEwIHglMTAg" +
- "CiAgICAgICAgICAgICAgICA0OCBBRERDT05TVCAvLyBiIHgvMTAgKHglMTArNDgpCiAgICAgICAgICAgICAgICBzMiBzMiBzMCBYQzJQVSBJU1pFUk8gLy8gKHglMTAr" +
- "NDgpIGIgeC8xMCB4LzEwPT0wPwogICAgICAgICAgICB9PkNPTlQgVU5USUwKICAgICAgICAgICAgLy8gLi4uIGIgeAoKICAgICAgICAgICAgRFJPUCAvLyAuLi4gYgog" +
- "ICAgICAgICAgICBERVBUSCBERUMgRFVQIC8vIC4uLiBiIG4gbgogICAgICAgICAgICBST1RSRVYgLy8gLi4uIG4gYiBuCiAgICAgICAgICAgIDx7CiAgICAgICAgICAg" +
- "ICAgICAvLyAuLi4gYyBuIGIKICAgICAgICAgICAgICAgIHMxIHMyIFhDSEcgLy8gLi4uIG4gYyBiCiAgICAgICAgICAgICAgICA4IFNUVSAvLyAuLi4gbiBiCiAgICAg" +
- "ICAgICAgIH0+Q09OVCBSRVBFQVQgLy8gbiBiCiAgICAgICAgfT5DT05UIDEgMiBDQUxMWEFSR1MKICAgICAgICAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHRfZGlnaXRz" +
- "ICJyaWdodCIKICAgICAgICBST1RSRVYgLy8gZGlnaXRzICJsZWZ0IiAicmlnaHQiIGkgcmlnaHRfZGlnaXRzCiAgICAgICAgQUREIC8vIGRpZ2l0cyAibGVmdCIgInJp" +
- "Z2h0IiByaWdodF9kaWdpdHMKCiAgICAgICAgczMgczEgWENIRyAvLyAicmlnaHQiICJsZWZ0IiBkaWdpdHMgcmlnaHRfZGlnaXRzCiAgICAgICAgU1VCIC8vICJyaWdo" +
- "dCIgImxlZnQiIGRpZ2l0c19kaWZmCiAgICAgICAgU1dBUCAvLyAicmlnaHQiIGRpZ2l0c19kaWZmICJsZWZ0IgogICAgICAgIHh7MmV9IFNUU0xJQ0VDT05TVCAvLyAi" +
- "cmlnaHQiIGRpZ2l0c19kaWZmICJsZWZ0LiIKICAgICAgICBTV0FQIC8vICJyaWdodCIgImxlZnQuIiBkaWdpdHNfZGlmZgoKICAgICAgICA8ewogICAgICAgICAgICAv" +
- "LyAicmlnaHQiICJsZWZ0LiIKICAgICAgICAgICAgeHszMH0gU1RTTElDRUNPTlNUIC8vICJyaWdodCIgImxlZnQuMCIKICAgICAgICB9PkNPTlQgUkVQRUFUIC8vICJy" +
- "aWdodCIgImxlZnQuMDAwIgoKICAgICAgICBTVEIgLy8gImxlZnQuMDAwcmlnaHQiCiAgICB9PkNPTlQKCiAgICBJRkVMU0UgLy8gYgoKICAgIEVOREMgQ1RPUyAvLyBz" +
- "Cn0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgSW50YCB0eXBlLgovLy8gCi8vLyBSZXR1cm5zIGEgYFN0cmluZ2AgZnJvbSBhbiBgSW50YCB2YWx1ZSB1" +
- "c2luZyBhIFtmaXhlZC1wb2ludCByZXByZXNlbnRhdGlvbl0gb2YgYSBmcmFjdGlvbmFsIG51bWJlci4gCi8vLyBBbiBhbGlhcyB0byBgc2VsZi50b0Zsb2F0U3RyaW5n" +
- "KDkpYC4KLy8vIAovLy8gVGhpcyBpcyB1c2VkIHRvIHJlcHJlc2VudCBbbmFub1RvbmNvaW5dIGBJbnRgIHZhbHVlcyB1c2luZyBzdHJpbmdzLgovLy8gCi8vLyBgYGB0" +
- "YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgbmFub3RvbnM6IEludCA9IDQyOwovLy8gICAgIGxldCBmaXp6OiBTdHJpbmcgPSBuYW5vdG9ucy50b0Nv" +
- "aW5zU3RyaW5nKCk7Ci8vLyAgICAgbGV0IGJ1eno6IFN0cmluZyA9IG5hbm90b25zLnRvRmxvYXRTdHJpbmcoOSk7Ci8vLyAgICAgCi8vLyAgICAgZml6eiA9PSBidXp6" +
- "OyAvLyB0cnVlLCBib3RoIHN0b3JlICIwLjAwMDAwMDA0MiIKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3Jn" +
- "L3JlZi9jb3JlLXN0cmluZ3MvCi8vLyAKLy8vIFtmaXhlZC1wb2ludCByZXByZXNlbnRhdGlvbl06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZpeGVkLXBv" +
- "aW50X2FyaXRobWV0aWMKLy8vIFtuYW5vVG9uY29pbl06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svaW50ZWdlcnMjbmFub3RvbmNvaW4KLy8vIAppbmxp" +
- "bmUgZXh0ZW5kcyBmdW4gdG9Db2luc1N0cmluZyhzZWxmOiBJbnQpOiBTdHJpbmcgewogICAgcmV0dXJuIHNlbGYudG9GbG9hdFN0cmluZyg5KTsKfQoKLy8vIEV4dGVu" +
- "c2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTdHJpbmdgIHR5cGUuCi8vLyAKLy8vIFJldHVybnMgYSBgQ2VsbGAgZnJvbSBhIGBTdHJpbmdgIGJ5IHByZWZpeGluZyB0aGUg" +
- "bGF0dGVyIHdpdGggZm91ciBudWxsIGJ5dGVzLgovLy8gVGhpcyBmb3JtYXQgaXMgdXNlZCBmb3IgcGFzc2luZyB0ZXh0IGNvbW1lbnRzIGFzIG1lc3NhZ2UgYm9kaWVz" +
- "LgovLy8gCi8vLyBOT1RFOiAqKkdhcyBleHBlbnNpdmUhKiogVGhpcyBmdW5jdGlvbiB1c2VzIDUwMCBnYXMgdW5pdHMgb3IgbW9yZS4KLy8vIAovLy8gYGBgdGFjdAov" +
- "Ly8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFN0cmluZyA9ICJXaGVuIGxpZmUgZ2l2ZXMgeW91IGxlbW9ucywgY2FsbCB0aGVtICd5ZWxsb3cgb3Jhbmdl" +
- "cycgYW5kIHNlbGwgdGhlbSBmb3IgZG91YmxlIHRoZSBwcmljZS4iOwovLy8gICAgIGxldCBmaXp6OiBDZWxsID0gcy5hc0NvbW1lbnQoKTsKLy8vICAgICAKLy8vICAg" +
- "ICBsZXQgYjogU3RyaW5nQnVpbGRlciA9IGJlZ2luQ29tbWVudCgpOwovLy8gICAgIGIuYXBwZW5kKHMpOwovLy8gICAgIGxldCBidXp6OiBDZWxsID0gYi50b0NlbGwo" +
- "KTsKLy8vICAgICAKLy8vICAgICBmaXp6ID09IGJ1eno7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxh" +
- "bmcub3JnL3JlZi9jb3JlLXN0cmluZ3MvCi8vLwpleHRlbmRzIGZ1biBhc0NvbW1lbnQoc2VsZjogU3RyaW5nKTogQ2VsbCB7CiAgICBsZXQgYjogU3RyaW5nQnVpbGRl" +
- "ciA9IGJlZ2luQ29tbWVudCgpOwogICAgYi5hcHBlbmQoc2VsZik7CiAgICByZXR1cm4gYi50b0NlbGwoKTsKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhl" +
- "IGBTdHJpbmdgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIGBTbGljZWAgZnJvbSBhIGBTdHJpbmdgIGJ5IGF0dGVtcHRpbmcgdG8gcGFjayBhbGwgb2YgaXRzIGJpdHMg" +
- "aW50byBhIGNvbnRpbnVvdXMgCi8vLyBsaXN0IG9mIGNlbGxzLCBlYWNoIHJlZmVyZW5jaW5nIHRoZSBuZXh0IG9uZSBhbmQgb3BlbmluZyB0aGVtIGFsbCBmb3IgZnV0" +
- "dXJlIHBhcnNpbmcuCi8vLwovLy8gTm90ZSB0aGF0IHRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiBvZiBob3cgbWFueSBieXRlcyBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyIGNv" +
- "dWxkIHRha2UgaW4gdGhlIAovLy8gYFNsaWNlYCBvciBob3cgZGVlcCB0aGUgbGlzdCBvZiByZWZlcmVuY2VzIGlzIGdvaW5nIHRvIGJlLCBzbyB1c2UgdGhpcyBmdW5j" +
- "dGlvbiBvbmx5IGlmIAovLy8geW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuCi8vLyAKLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBz" +
- "OiBTdHJpbmcgPSAiSXQncyBhbGl2ZSEgSXQncyBhbGl2ZSEhISI7Ci8vLyAgICAgbGV0IGZpeno6IFNsaWNlID0gcy5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGJ1eno6" +
- "IFNsaWNlID0gcy5hc1NsaWNlKCkuYXNTdHJpbmcoKS5hc1NsaWNlKCk7Ci8vLyAgICAgCi8vLyAgICAgZml6eiA9PSBidXp6OyAvLyB0cnVlLCBidXQgYmUgY2FyZWZ1" +
- "bCBhcyBpdCdzIG5vdCBhbHdheXMgdGhlIGNhc2UKLy8vIH0KLy8vIGBgYAovLy8gCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9j" +
- "b3JlLXN0cmluZ3MvCi8vLwpAbmFtZShfX3RhY3Rfc3RyX3RvX3NsaWNlKQpleHRlbmRzIG5hdGl2ZSBhc1NsaWNlKHNlbGY6IFN0cmluZyk6IFNsaWNlOwoKLy8vIEV4" +
- "dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTbGljZWAgdHlwZS4KLy8vIAovLy8gUmV0dXJucyBhIGBTdHJpbmdgIGZyb20gYSBgU2xpY2VgIGJ5IGF0dGVtcHRpbmcg" +
- "dG8gbG9hZCBhbGwgb2YgaXRzIGJpdHMgd2l0aG91dAovLy8gbG9va2luZyBmb3IgaXRzIHJlZmVyZW5jZXMsIGlmIGFueS4KLy8vIAovLy8gTm90ZSB0aGF0IHRoaXMg" +
- "ZnVuY3Rpb24gZG9lc24ndCBsb29rIGF0IHRoZSByZWZlcmVuY2VzIGF0IGFsbCBhbmQgdHJ1bmNhdGVzIGl0cyAKLy8vIG91dHB1dCB0byAxMDIzIGJpdHMsIHNvIHVz" +
- "ZSBpdCBvbmx5IGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLgovLy8gCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU3Ry" +
- "aW5nID0gIktlZXAgeW91ciBTbGljZXMgY2xvc2UsIGJ1dCB5b3VyIFN0cmluZ3MgY2xvc2VyLiI7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZyA9IHM7Ci8vLyAgICAg" +
- "bGV0IGJ1eno6IFN0cmluZyA9IHMuYXNTbGljZSgpLmFzU3RyaW5nKCk7Ci8vLyAKLy8vICAgICBmaXp6ID09IGJ1eno7IC8vIHRydWUsIGJ1dCBiZSBjYXJlZnVsIGFz" +
- "IGl0J3Mgbm90IGFsd2F5cyB0aGUgY2FzZQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUt" +
- "c3RyaW5ncy8KLy8vIApAbmFtZShfX3RhY3Rfc2xpY2VfdG9fc3RyKQpleHRlbmRzIG5hdGl2ZSBhc1N0cmluZyhzZWxmOiBTbGljZSk6IFN0cmluZzsKCi8vLyBFeHRl" +
- "bnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgIHR5cGUuCi8vLyAKLy8vIFJldHVybnMgYSBuZXcgYFNsaWNlYCBmcm9tIHRoZSBkZWNvZGVkIFtiYXNlNjRdIGBT" +
- "bGljZWAuCi8vLyAKLy8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpbWl0ZWQgYW5kIG9ubHkgdGFrZXMgdGhlIGZpcnN0IDEwMjMgYml0cyBvZiBkYXRhIGZy" +
- "b20gCi8vLyB0aGUgZ2l2ZW4gYFNsaWNlYCwgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24gaWYgdGhlIGBTbGljZWAgaGFzIG1vcmUgZGF0YSAKLy8vIChpLmUu" +
- "LCB3aGVuIGl0IGhhcyBhbnkgcmVmZXJlbmNlcykuCi8vLyAKLy8vIElmIHRoZSBnaXZlbiBgU2xpY2VgIGNvbnRhaW5zIGNoYXJhY3RlcnMgbm90IGZyb20gdGhlIGJh" +
- "c2U2NCBzZXQsIGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSAxMzRdIHdpbGwgYmUgdGhyb3duOiBgSW52YWxpZCBhcmd1bWVudGAuCi8vLyAKLy8vIGBg" +
- "YHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTbGljZSA9ICJTU0JoYlNCSGNtOXZkQzQ9Ii5hc1NsaWNlKCk7Ci8vLyAgICAgbGV0IGZpeno6" +
- "IFNsaWNlID0gcy5mcm9tQmFzZTY0KCk7Ci8vLyB9Ci8vLyBgYGAKLy8vIAovLy8gU2VlOgovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1z" +
- "dHJpbmdzLwovLy8gCi8vLyBbZXhpdCBjb2RlIDEzNF06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyMxMzQKLy8vIFtiYXNlNjRdOiBo" +
- "dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQKaW5saW5lIGV4dGVuZHMgZnVuIGZyb21CYXNlNjQoc2VsZjogU3RyaW5nKTogU2xpY2UgewogICAgcmV0" +
- "dXJuIHNlbGYuYXNTbGljZSgpLmZyb21CYXNlNjQoKTsKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTdHJpbmdgIHR5cGUuCi8vLyAKLy8vIFJldHVy" +
- "bnMgYSBgU2xpY2VgIGZyb20gdGhlIGRlY29kZWQgW2Jhc2U2NF0gYFN0cmluZ2AuCi8vLyBBbiBhbGlhcyB0byBgc2VsZi5hc1NsaWNlKCkuZnJvbUJhc2U2NCgpYC4K" +
- "Ly8vIAovLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGltaXRlZCBhbmQgb25seSB0YWtlcyB0aGUgZmlyc3QgMTAyMyBiaXRzIG9mIGRhdGEgZnJvbSAKLy8v" +
- "IHRoZSBnaXZlbiBgU3RyaW5nYCwgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24gd2hlbiB0aGUgYFN0cmluZ2AgaXMgbGFyZ2VyCi8vLyAoaS5lLiwgY29udGFp" +
- "bnMgbW9yZSB0aGFuIDEwMjMgYml0cyBvZiBkYXRhKS4KLy8vIAovLy8gSWYgdGhlIGdpdmVuIGBTdHJpbmdgIGNvbnRhaW5zIGNoYXJhY3RlcnMgbm90IGZyb20gdGhl" +
- "IGJhc2U2NCBzZXQsIGFuIGV4Y2VwdGlvbiB3aXRoIAovLy8gW2V4aXQgY29kZSAxMzRdIHdpbGwgYmUgdGhyb3duOiBgSW52YWxpZCBhcmd1bWVudGAuCi8vLyAKLy8v" +
- "IGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBzOiBTdHJpbmcgPSAiU0dWeVpTZHpJRXB2YUc1dWVTRT0iOwovLy8gICAgIGxldCBmaXp6OiBT" +
- "bGljZSA9IHMuZnJvbUJhc2U2NCgpOwovLy8gICAgIGxldCBidXp6OiBTbGljZSA9IHMuYXNTbGljZSgpLmZyb21CYXNlNjQoKTsKLy8vIAovLy8gICAgIGZpenogPT0g" +
- "YnV6ejsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLyAKLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncy8KLy8v" +
- "Ci8vLyBbZXhpdCBjb2RlIDEzNF06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyMxMzQKLy8vIFtiYXNlNjRdOiBodHRwczovL2VuLndp" +
- "a2lwZWRpYS5vcmcvd2lraS9CYXNlNjQKLy8vCmV4dGVuZHMgZnVuIGZyb21CYXNlNjQoc2VsZjogU2xpY2UpOiBTbGljZSB7CiAgICBsZXQgc2l6ZTogSW50ID0gc2Vs" +
- "Zi5iaXRzKCkgLyA4OwogICAgbGV0IHJlc3VsdDogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwoKICAgIHJlcGVhdCAoc2l6ZSkgewogICAgICAgIGxldCBjb2RlOiBJbnQg" +
- "PSBzZWxmLmxvYWRVaW50KDgpOwogICAgICAgIGlmIChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIHsgLy8gQS1aCiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5z" +
- "dG9yZVVpbnQoY29kZSAtIDY1LCA2KTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpIHsgLy8gYS16CiAgICAgICAgICAgIHJlc3Vs" +
- "dCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSAtICg5NyAtIDI2KSwgNik7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHsgLy8gMC05" +
- "CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSArICg1MiAtIDQ4KSwgNik7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDQ1IHx8IGNv" +
- "ZGUgPT0gNDMpIHsgLy8gLSBvciArCiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoNjIsIDYpOwogICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSA5" +
- "NSB8fCBjb2RlID09IDQ3KSB7IC8vIF8gb3IgLwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3RvcmVVaW50KDYzLCA2KTsKICAgICAgICB9IGVsc2UgaWYgKGNv" +
- "ZGUgPT0gNjEpIHsgLy8gPQogICAgICAgICAgICAvLyBTa2lwCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3coMTM0KTsKICAgICAgICB9CiAgICB9Cgog" +
- "ICAgLy8gUGFkZGluZwogICAgbGV0IHRvdGFsOiBJbnQgPSByZXN1bHQuYml0cygpOwogICAgbGV0IHBhZGRpbmc6IEludCA9IHRvdGFsICUgODsKICAgIGlmIChwYWRk" +
- "aW5nICE9IDApIHsKICAgICAgICBsZXQgczogU2xpY2UgPSByZXN1bHQuYXNTbGljZSgpOwogICAgICAgIHJldHVybiBzLmxvYWRCaXRzKHRvdGFsIC0gcGFkZGluZyk7" +
- "CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXN1bHQuYXNTbGljZSgpOwogICAgfQp9CgovLwovLyBBZGRyZXNzIGNvbnZlcnNpb24KLy8KCi8vLyBFeHRlbnNp" +
- "b24gZnVuY3Rpb24gZm9yIHRoZSBgQWRkcmVzc2AgdHlwZS4KLy8vCi8vLyBSZXR1cm5zIGEgYFN0cmluZ2AgZnJvbSBhbiBgQWRkcmVzc2AuCi8vLwovLy8gYGBgdGFj" +
- "dAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGNvbW11bml0eTogQWRkcmVzcyA9IGFkZHJlc3MoIlVRRHBYTFpLcmtIc091RV9DMWFTNjlDNjk3d0U1Njh2" +
- "VG5xU2VSZkJYWmZ2bVZPbyIpOwovLy8gICAgIGxldCBmaXp6OiBTdHJpbmcgPSBjb21tdW5pdHkudG9TdHJpbmcoKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZToK" +
- "Ly8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncy8KLy8vCkBuYW1lKF9fdGFjdF9hZGRyZXNzX3RvX3VzZXJfZnJpZW5kbHkpCmV4" +
- "dGVuZHMgbmF0aXZlIHRvU3RyaW5nKHNlbGY6IEFkZHJlc3MpOiBTdHJpbmc7Cg==";
+ "cmAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKTogU3RyaW5nIHsKLy8vICAgICBsZXQgZml6ejogU3RyaW5nQnVpbGRlciA9IGJlZ2luU3RyaW5nKCk7" +
+ "Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXN0cmluZ3MjYmVnaW5zdHJpbmcKLy8vCkBuYW1lKF9f" +
+ "dGFjdF9zdHJpbmdfYnVpbGRlcl9zdGFydF9zdHJpbmcpCm5hdGl2ZSBiZWdpblN0cmluZygpOiBTdHJpbmdCdWlsZGVyOwoKLy8vIEdsb2JhbCBmdW5jdGlvbi4KLy8v" +
+ "Ci8vLyBDcmVhdGVzIGFuZCByZXR1cm5zIGFuIGVtcHR5IGBTdHJpbmdCdWlsZGVyYCBmb3IgYnVpbGRpbmcgYSBjb21tZW50IHN0cmluZywgd2hpY2ggcHJlZml4ZXMK" +
+ "Ly8vIHRoZSByZXN1bHRpbmcgYFN0cmluZ2Agd2l0aCBmb3VyIG51bGwgYnl0ZXMuIFRoaXMgZm9ybWF0IGlzIHVzZWQgZm9yIHBhc3NpbmcgdGV4dCBjb21tZW50cwov" +
+ "Ly8gYXMgbWVzc2FnZSBib2RpZXMuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKTogU3RyaW5nIHsKLy8vICAgICBsZXQgZml6ejogU3RyaW5nQnVpbGRl" +
+ "ciA9IGJlZ2luQ29tbWVudCgpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1zdHJpbmdzI2JlZ2lu" +
+ "Y29tbWVudAovLy8KQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0YXJ0X2NvbW1lbnQpCm5hdGl2ZSBiZWdpbkNvbW1lbnQoKTogU3RyaW5nQnVpbGRlcjsKCi8v" +
+ "LyBHbG9iYWwgZnVuY3Rpb24uCi8vLwovLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBlbXB0eSBgU3RyaW5nQnVpbGRlcmAgZm9yIGJ1aWxkaW5nIGEgdGFpbCBzdHJp" +
+ "bmcsIHdoaWNoIHByZWZpeGVzCi8vLyB0aGUgcmVzdWx0aW5nIGBTdHJpbmdgIHdpdGggYSBzaW5nbGUgbnVsbCBieXRlLiBUaGlzIGZvcm1hdCBpcyB1c2VkIGluIHZh" +
+ "cmlvdXMgc3RhbmRhcmRzCi8vLyBzdWNoIGFzIE5GVCBvciBKZXR0b24uCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKTogU3RyaW5nIHsKLy8vICAgICBs" +
+ "ZXQgZml6ejogU3RyaW5nQnVpbGRlciA9IGJlZ2luVGFpbFN0cmluZygpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9y" +
+ "Zy9yZWYvY29yZS1zdHJpbmdzI2JlZ2ludGFpbHN0cmluZwovLy8KQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0YXJ0X3RhaWxfc3RyaW5nKQpuYXRpdmUgYmVn" +
+ "aW5UYWlsU3RyaW5nKCk6IFN0cmluZ0J1aWxkZXI7CgovLy8gR2xvYmFsIGZ1bmN0aW9uLgovLy8KLy8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgYFN0cmluZ0J1" +
+ "aWxkZXJgIGZyb20gYW4gZXhpc3RpbmcgYFN0cmluZ0J1aWxkZXJgIGBiYC4gVXNlZnVsIHdoZW4KLy8vIHlvdSBuZWVkIHRvIHNlcmlhbGl6ZSBhbiBleGlzdGluZyBg" +
+ "U3RyaW5nYCB0byBhIGBDZWxsYCBhbG9uZyB3aXRoIG90aGVyIGRhdGEuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKTogU3RyaW5nIHsKLy8vICAgICBs" +
+ "ZXQgZml6ejogU3RyaW5nQnVpbGRlciA9IGJlZ2luU3RyaW5nRnJvbUJ1aWxkZXIoYmVnaW5TdHJpbmcoKSk7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBz" +
+ "Oi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXN0cmluZ3MjYmVnaW5zdHJpbmdmcm9tYnVpbGRlcgovLy8KQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0" +
+ "YXJ0KQpuYXRpdmUgYmVnaW5TdHJpbmdGcm9tQnVpbGRlcihiOiBCdWlsZGVyKTogU3RyaW5nQnVpbGRlcjsKCi8vLyBFeHRlbnNpb24gbXV0YXRpb24gZnVuY3Rpb24g" +
+ "Zm9yIHRoZSBgU3RyaW5nQnVpbGRlcmAgdHlwZS4KLy8vCi8vLyBBcHBlbmRzIGEgYFN0cmluZ2AgYHNgIHRvIHRoZSBgU3RyaW5nQnVpbGRlcmAuCi8vLwovLy8gYGBg" +
+ "dGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygpOwovLy8gICAgIGZpenouYXBwZW5kKCJv" +
+ "aCIpOwovLy8gICAgIGZpenouYXBwZW5kKCJteSIpOwovLy8gICAgIGZpenouYXBwZW5kKCJUYWN0ISIpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczov" +
+ "L2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1zdHJpbmdzI3N0cmluZ2J1aWxkZXJhcHBlbmQKLy8vCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9hcHBlbmQp" +
+ "CmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgYXBwZW5kKHNlbGY6IFN0cmluZ0J1aWxkZXIsIHM6IFN0cmluZyk7CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUg" +
+ "YFN0cmluZ0J1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIG5ldyBgU3RyaW5nQnVpbGRlcmAgYWZ0ZXIgY29uY2F0ZW5hdGluZyBpdCB3aXRoIGEgYFN0cmlu" +
+ "Z2AgYHNgLiBJdCBjYW4gYmUgY2hhaW5lZCwKLy8vIHVubGlrZSBgU3RyaW5nQnVpbGRlci5hcHBlbmQoKWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUo" +
+ "KSB7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygpCi8vLyAgICAgICAgIC5jb25jYXQoIm9oIikKLy8vICAgICAgICAgLmNvbmNh" +
+ "dCgibXkiKQovLy8gICAgICAgICAuY29uY2F0KCJUYWN0ISIpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYv" +
+ "Y29yZS1zdHJpbmdzI3N0cmluZ2J1aWxkZXJjb25jYXQKLy8vCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9hcHBlbmRfbm90X211dCkKZXh0ZW5kcyBuYXRpdmUg" +
+ "Y29uY2F0KHNlbGY6IFN0cmluZ0J1aWxkZXIsIHM6IFN0cmluZyk6IFN0cmluZ0J1aWxkZXI7CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFN0cmluZ0J1" +
+ "aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhbiBhc3NlbWJsZWQgYENlbGxgIGZyb20gYSBgU3RyaW5nQnVpbGRlcmAuCi8vLwovLy8gTk9URTogKipHYXMgZXhw" +
+ "ZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAg" +
+ "bGV0IGZpeno6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygpOwovLy8gICAgIGxldCBidXp6OiBDZWxsID0gZml6ei50b0NlbGwoKTsKLy8vIH0KLy8vIGBgYAov" +
+ "Ly8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncyNzdHJpbmdidWlsZGVydG9jZWxsCi8vLwpAbmFtZShfX3RhY3Rfc3Ry" +
+ "aW5nX2J1aWxkZXJfZW5kKQpleHRlbmRzIG5hdGl2ZSB0b0NlbGwoc2VsZjogU3RyaW5nQnVpbGRlcik6IENlbGw7CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0" +
+ "aGUgYFN0cmluZ0J1aWxkZXJgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIGJ1aWx0IGBTdHJpbmdgIGZyb20gYSBgU3RyaW5nQnVpbGRlcmAuCi8vLwovLy8gTk9URTog" +
+ "KipHYXMgZXhwZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7" +
+ "Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygpOwovLy8gICAgIGxldCBidXp6OiBTdHJpbmcgPSBmaXp6LnRvU3RyaW5nKCk7Ci8v" +
+ "LyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLXN0cmluZ3Mjc3RyaW5nYnVpbGRlcnRvc3RyaW5nCi8vLwpA" +
+ "bmFtZShfX3RhY3Rfc3RyaW5nX2J1aWxkZXJfZW5kX3NsaWNlKQpleHRlbmRzIG5hdGl2ZSB0b1N0cmluZyhzZWxmOiBTdHJpbmdCdWlsZGVyKTogU3RyaW5nOwoKLy8v" +
+ "IEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBTdHJpbmdCdWlsZGVyYCB0eXBlLgovLy8KLy8vIFJldHVybnMgYW4gYXNzZW1ibGVkIGBDZWxsYCBhcyBhIGBTbGlj" +
+ "ZWAgZnJvbSBhIGBTdHJpbmdCdWlsZGVyYC4KLy8vIEFuIGFsaWFzIHRvIGBzZWxmLnRvQ2VsbCgpLmFzU2xpY2UoKWAuCi8vLwovLy8gTk9URTogKipHYXMgZXhwZW5z" +
+ "aXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0" +
+ "IHM6IFN0cmluZ0J1aWxkZXIgPSBiZWdpblN0cmluZygpOwovLy8gICAgIGxldCBmaXp6OiBTbGljZSA9IHMudG9TbGljZSgpOwovLy8gICAgIGxldCBidXp6OiBTbGlj" +
+ "ZSA9IHMudG9DZWxsKCkuYXNTbGljZSgpOwovLy8KLy8vICAgICBmaXp6ID09IGJ1eno7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9k" +
+ "b2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncyNzdHJpbmdidWlsZGVydG9zbGljZQovLy8KQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX2VuZF9zbGlj" +
+ "ZSkKZXh0ZW5kcyBuYXRpdmUgdG9TbGljZShzZWxmOiBTdHJpbmdCdWlsZGVyKTogU2xpY2U7CgovLwovLyBTdHJpbmcgY29udmVyc2lvbgovLwoKLy8vIEV4dGVuc2lv" +
+ "biBmdW5jdGlvbiBmb3IgdGhlIGBJbnRgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIGBTdHJpbmdgIGZyb20gYW4gYEludGAgdmFsdWUuCi8vLwovLy8gTk9URTogKipH" +
+ "YXMgZXhwZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8v" +
+ "LyAgICAgbGV0IGZpeno6IFN0cmluZyA9ICg4NCAtIDQyKS50b1N0cmluZygpOwovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5n" +
+ "Lm9yZy9yZWYvY29yZS1zdHJpbmdzI2ludHRvc3RyaW5nCi8vLwphc20gZXh0ZW5kcyBmdW4gdG9TdHJpbmcoc2VsZjogSW50KTogU3RyaW5nIHsKICAgIC8vIHgKCiAg" +
+ "ICA8ewogICAgICAgIC8vIHgKICAgICAgICBORVdDIC8vIHggYgogICAgICAgIE9WRVIgLy8geCBiIHgKICAgICAgICAwIExFU1NJTlQgLy8geCBiIDwwPwogICAgICAg" +
+ "IDx7CiAgICAgICAgICAgIC8vIHggYgogICAgICAgICAgICA0NSBQVVNISU5UIC8vIHggYiA0NQogICAgICAgICAgICBTV0FQIC8vIHggNDUgYgogICAgICAgICAgICA4" +
+ "IFNUVSAvLyB4IGIKICAgICAgICAgICAgU1dBUCAvLyBiIHgKICAgICAgICAgICAgTkVHQVRFIC8vIGIgLXgKICAgICAgICAgICAgU1dBUCAvLyAteCBiCiAgICAgICAg" +
+ "fT5DT05UIElGCiAgICAgICAgLy8geCBiCgogICAgICAgIFNXQVAgLy8gYiB4CgogICAgICAgIDx7CiAgICAgICAgICAgIC8vIGIgeAogICAgICAgICAgICAxMCBQVVNI" +
+ "SU5UIERJVk1PRCAvLyBiIHgvMTAgeCUxMAogICAgICAgICAgICA0OCBBRERDT05TVCAvLyBiIHgvMTAgKHglMTArNDgpCiAgICAgICAgICAgIHMyIHMyIHMwIFhDMlBV" +
+ "IElTWkVSTyAvLyAoeCUxMCs0OCkgYiB4LzEwIHgvMTA9PTA/CiAgICAgICAgfT5DT05UIFVOVElMCiAgICAgICAgLy8gLi4uIGIgeAoKICAgICAgICBEUk9QIC8vIC4u" +
+ "LiBiCiAgICAgICAgREVQVEggREVDIC8vIC4uLiBiIG4KICAgICAgICA8eyA4IFNUVSB9PkNPTlQgUkVQRUFUIC8vIGIKICAgIH0+Q09OVCAxIDEgQ0FMTFhBUkdTCiAg" +
+ "ICAvLyBiCgogICAgRU5EQyBDVE9TIC8vIHMKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBJbnRgIHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIGBTdHJp" +
+ "bmdgIGZyb20gYW4gYEludGAgdmFsdWUgdXNpbmcgYSBbZml4ZWQtcG9pbnQgcmVwcmVzZW50YXRpb25dIG9mIGEgZnJhY3Rpb25hbAovLy8gbnVtYmVyLCB3aGVyZSBg" +
+ "c2VsZmAgaXMgdGhlIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIG51bWJlciBhbmQgYGRpZ2l0c2AgaXMgdGhlIG51bWJlcgovLy8gb2YgZGlnaXRzIGluIHRoZSBmcmFj" +
+ "dGlvbmFsIHBhcnQuCi8vLwovLy8gTk9URTogKipHYXMgZXhwZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24gdXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLwovLy8g" +
+ "YGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZyA9ICg0MikudG9GbG9hdFN0cmluZyg5KTsgLy8gIjAuMDAwMDAwMDQyIgov" +
+ "Ly8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1zdHJpbmdzI2ludHRvZmxvYXRzdHJpbmcKLy8vCi8vLyBb" +
+ "Zml4ZWQtcG9pbnQgcmVwcmVzZW50YXRpb25dOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXhlZC1wb2ludF9hcml0aG1ldGljCmFzbSBleHRlbmRzIGZ1" +
+ "biB0b0Zsb2F0U3RyaW5nKHNlbGY6IEludCwgZGlnaXRzOiBJbnQpOiBTdHJpbmcgIHsKICAgIC8vIHggZGlnaXRzCgogICAgRFVQIC8vIHggZGlnaXRzIGRpZ2l0cwog" +
+ "ICAgMSBMRVNTSU5UIC8vIHggZGlnaXRzIGRpZ2l0czw9MAogICAgMTM0IFRIUk9XSUYgLy8geCBkaWdpdHMKICAgIERVUCAvLyB4IGRpZ2l0cyBkaWdpdHMKICAgIDc3" +
+ "IEdUSU5UIC8vIHggZGlnaXRzIGRpZ2l0cz43NwogICAgMTM0IFRIUk9XSUYgLy8geCBkaWdpdHMKCiAgICBORVdDIC8vIHggZGlnaXRzIGIKICAgIFJPVFJFViAvLyBi" +
+ "IHggZGlnaXRzCiAgICBzMSBQVVNIIC8vIGIgeCBkaWdpdHMgeAogICAgMCBMRVNTSU5UIC8vIGIgeCBkaWdpdHMgeDwwPwoKICAgIDx7CiAgICAgICAgLy8gYiB4IGRp" +
+ "Z2l0cwogICAgICAgIFJPVCAvLyB4IGRpZ2l0cyBiCiAgICAgICAgeHsyZH0gU1RTTElDRUNPTlNUIC8vIHggZGlnaXRzIGIKICAgICAgICBST1QgLy8gZGlnaXRzIGIg" +
+ "eAogICAgICAgIE5FR0FURSAvLyBkaWdpdHMgYiAteAogICAgICAgIFJPVCAvLyBiIC14IGRpZ2l0cwogICAgfT5DT05UIElGCgogICAgLy8gYiB4IGRpZ2l0cwogICAg" +
+ "T05FIC8vIGIgeCBkaWdpdHMgMQogICAgT1ZFUiAvLyBiIHggZGlnaXRzIDEgZGlnaXRzCgogICAgPHsgMTAgTVVMQ09OU1QgfT5DT05UIFJFUEVBVCAvLyBiIHggZGln" +
+ "aXRzIDEwXmRpZ2l0cwoKICAgIHMxIHMyIFhDSEcgLy8gYiBkaWdpdHMgeCAxMF5kaWdpdHMKICAgIERJVk1PRCAvLyBiIGRpZ2l0cyBsZWZ0IHJpZ2h0CiAgICBzMyBz" +
+ "MyBYQ0hHMiAvLyByaWdodCBkaWdpdHMgYiBsZWZ0CgogICAgPHsKICAgICAgICAvLyBiIHgKCiAgICAgICAgPHsKICAgICAgICAgICAgLy8gYiB4CiAgICAgICAgICAg" +
+ "IDEwIFBVU0hJTlQgRElWTU9EIC8vIGIgeC8xMCB4JTEwCiAgICAgICAgICAgIDQ4IEFERENPTlNUIC8vIGIgeC8xMCAoeCUxMCs0OCkKICAgICAgICAgICAgczIgczIg" +
+ "czAgWEMyUFUgSVNaRVJPIC8vICh4JTEwKzQ4KSBiIHgvMTAgeC8xMD09MD8KICAgICAgICB9PkNPTlQgVU5USUwKICAgICAgICAvLyAuLi4gYiB4CgogICAgICAgIERS" +
+ "T1AgLy8gLi4uIGIKICAgICAgICBERVBUSCBERUMgLy8gLi4uIGIgbgogICAgICAgIDx7IDggU1RVIH0+Q09OVCBSRVBFQVQgLy8gYgogICAgfT5DT05UIDIgMSBDQUxM" +
+ "WEFSR1MKCiAgICAvLyByaWdodCBkaWdpdHMgImxlZnQiCgogICAgUk9UIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQKICAgIERVUCAvLyBkaWdpdHMgImxlZnQiIHJpZ2h0" +
+ "IHJpZ2h0CiAgICBJU1pFUk8gLy8gZGlnaXRzICJsZWZ0IiByaWdodCByaWdodD09MD8KCiAgICA8ewogICAgICAgIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQKICAgICAg" +
+ "ICBEUk9QIC8vIGRpZ2l0cyAibGVmdCIKICAgICAgICBOSVAgLy8gImxlZnQiCiAgICB9PkNPTlQKCiAgICA8ewogICAgICAgIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQK" +
+ "ICAgICAgICBaRVJPIC8vIGRpZ2l0cyAibGVmdCIgcmlnaHQgMAogICAgICAgIFNXQVAgLy8gZGlnaXRzICJsZWZ0IiAwIHJpZ2h0CgogICAgICAgIDx7CiAgICAgICAg" +
+ "ICAgIC8vIGRpZ2l0cyAibGVmdCIgaSByaWdodAogICAgICAgICAgICBEVVAgLy8gZGlnaXRzICJsZWZ0IiBpIHJpZ2h0IHJpZ2h0CiAgICAgICAgICAgIDEwIFBVU0hJ" +
+ "TlQgLy8gZGlnaXRzICJsZWZ0IiBpIHJpZ2h0IHJpZ2h0IDEwCiAgICAgICAgICAgIE1PRCAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHQgcmlnaHQlMTAKICAgICAgICAg" +
+ "ICAgSVNaRVJPIC8vIGRpZ2l0cyAibGVmdCIgaSByaWdodCByaWdodCUxMD09MD8KICAgICAgICB9PkNPTlQKCiAgICAgICAgPHsKICAgICAgICAgICAgLy8gZGlnaXRz" +
+ "ICJsZWZ0IiBpIHJpZ2h0CiAgICAgICAgICAgIDEwIFBVU0hJTlQgLy8gZGlnaXRzICJsZWZ0IiBpIHJpZ2h0IDEwCiAgICAgICAgICAgIERJViAvLyBkaWdpdHMgImxl" +
+ "ZnQiIGkgcmlnaHQvMTAKICAgICAgICAgICAgU1dBUCAvLyBkaWdpdHMgImxlZnQiIHJpZ2h0LzEwIGkKICAgICAgICAgICAgSU5DIC8vIGRpZ2l0cyAibGVmdCIgcmln" +
+ "aHQvMTAgaSsxCiAgICAgICAgICAgIFNXQVAgLy8gZGlnaXRzICJsZWZ0IiBpKzEgcmlnaHQvMTAKICAgICAgICB9PkNPTlQKCiAgICAgICAgV0hJTEUgLy8gZGlnaXRz" +
+ "ICJsZWZ0IiBpIHJpZ2h0CgogICAgICAgIDx7CiAgICAgICAgICAgIC8vIHgKICAgICAgICAgICAgTkVXQyAvLyB4IGIKICAgICAgICAgICAgU1dBUCAvLyBiIHgKCiAg" +
+ "ICAgICAgICAgIDx7CiAgICAgICAgICAgICAgICAvLyBiIHgKICAgICAgICAgICAgICAgIDEwIFBVU0hJTlQgRElWTU9EIC8vIGIgeC8xMCB4JTEwCiAgICAgICAgICAg" +
+ "ICAgICA0OCBBRERDT05TVCAvLyBiIHgvMTAgKHglMTArNDgpCiAgICAgICAgICAgICAgICBzMiBzMiBzMCBYQzJQVSBJU1pFUk8gLy8gKHglMTArNDgpIGIgeC8xMCB4" +
+ "LzEwPT0wPwogICAgICAgICAgICB9PkNPTlQgVU5USUwKICAgICAgICAgICAgLy8gLi4uIGIgeAoKICAgICAgICAgICAgRFJPUCAvLyAuLi4gYgogICAgICAgICAgICBE" +
+ "RVBUSCBERUMgRFVQIC8vIC4uLiBiIG4gbgogICAgICAgICAgICBST1RSRVYgLy8gLi4uIG4gYiBuCiAgICAgICAgICAgIDx7CiAgICAgICAgICAgICAgICAvLyAuLi4g" +
+ "YyBuIGIKICAgICAgICAgICAgICAgIHMxIHMyIFhDSEcgLy8gLi4uIG4gYyBiCiAgICAgICAgICAgICAgICA4IFNUVSAvLyAuLi4gbiBiCiAgICAgICAgICAgIH0+Q09O" +
+ "VCBSRVBFQVQgLy8gbiBiCiAgICAgICAgfT5DT05UIDEgMiBDQUxMWEFSR1MKICAgICAgICAvLyBkaWdpdHMgImxlZnQiIGkgcmlnaHRfZGlnaXRzICJyaWdodCIKICAg" +
+ "ICAgICBST1RSRVYgLy8gZGlnaXRzICJsZWZ0IiAicmlnaHQiIGkgcmlnaHRfZGlnaXRzCiAgICAgICAgQUREIC8vIGRpZ2l0cyAibGVmdCIgInJpZ2h0IiByaWdodF9k" +
+ "aWdpdHMKCiAgICAgICAgczMgczEgWENIRyAvLyAicmlnaHQiICJsZWZ0IiBkaWdpdHMgcmlnaHRfZGlnaXRzCiAgICAgICAgU1VCIC8vICJyaWdodCIgImxlZnQiIGRp" +
+ "Z2l0c19kaWZmCiAgICAgICAgU1dBUCAvLyAicmlnaHQiIGRpZ2l0c19kaWZmICJsZWZ0IgogICAgICAgIHh7MmV9IFNUU0xJQ0VDT05TVCAvLyAicmlnaHQiIGRpZ2l0" +
+ "c19kaWZmICJsZWZ0LiIKICAgICAgICBTV0FQIC8vICJyaWdodCIgImxlZnQuIiBkaWdpdHNfZGlmZgoKICAgICAgICA8ewogICAgICAgICAgICAvLyAicmlnaHQiICJs" +
+ "ZWZ0LiIKICAgICAgICAgICAgeHszMH0gU1RTTElDRUNPTlNUIC8vICJyaWdodCIgImxlZnQuMCIKICAgICAgICB9PkNPTlQgUkVQRUFUIC8vICJyaWdodCIgImxlZnQu" +
+ "MDAwIgoKICAgICAgICBTVEIgLy8gImxlZnQuMDAwcmlnaHQiCiAgICB9PkNPTlQKCiAgICBJRkVMU0UgLy8gYgoKICAgIEVOREMgQ1RPUyAvLyBzCn0KCi8vLyBFeHRl" +
+ "bnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgSW50YCB0eXBlLgovLy8KLy8vIFJldHVybnMgYSBgU3RyaW5nYCBmcm9tIGFuIGBJbnRgIHZhbHVlIHVzaW5nIGEgW2ZpeGVk" +
+ "LXBvaW50IHJlcHJlc2VudGF0aW9uXSBvZiBhIGZyYWN0aW9uYWwgbnVtYmVyLgovLy8gQW4gYWxpYXMgdG8gYHNlbGYudG9GbG9hdFN0cmluZyg5KWAuCi8vLwovLy8g" +
+ "VGhpcyBpcyB1c2VkIHRvIHJlcHJlc2VudCBbbmFub1RvbmNvaW5dIGBJbnRgIHZhbHVlcyB1c2luZyBzdHJpbmdzLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFt" +
+ "cGxlKCkgewovLy8gICAgIGxldCBuYW5vdG9uczogSW50ID0gNDI7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZyA9IG5hbm90b25zLnRvQ29pbnNTdHJpbmcoKTsKLy8v" +
+ "ICAgICBsZXQgYnV6ejogU3RyaW5nID0gbmFub3RvbnMudG9GbG9hdFN0cmluZyg5KTsKLy8vCi8vLyAgICAgZml6eiA9PSBidXp6OyAvLyB0cnVlLCBib3RoIHN0b3Jl" +
+ "ICIwLjAwMDAwMDA0MiIKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncyNpbnR0b2NvaW5z" +
+ "c3RyaW5nCi8vLwovLy8gW2ZpeGVkLXBvaW50IHJlcHJlc2VudGF0aW9uXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRml4ZWQtcG9pbnRfYXJpdGhtZXRp" +
+ "YwovLy8gW25hbm9Ub25jb2luXTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvYm9vay9pbnRlZ2VycyNuYW5vdG9uY29pbgovLy8KaW5saW5lIGV4dGVuZHMgZnVu" +
+ "IHRvQ29pbnNTdHJpbmcoc2VsZjogSW50KTogU3RyaW5nIHsKICAgIHJldHVybiBzZWxmLnRvRmxvYXRTdHJpbmcoOSk7Cn0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24g" +
+ "Zm9yIHRoZSBgU3RyaW5nYCB0eXBlLgovLy8KLy8vIFJldHVybnMgYSBgQ2VsbGAgZnJvbSBhIGBTdHJpbmdgIGJ5IHByZWZpeGluZyB0aGUgbGF0dGVyIHdpdGggZm91" +
+ "ciBudWxsIGJ5dGVzLgovLy8gVGhpcyBmb3JtYXQgaXMgdXNlZCBmb3IgcGFzc2luZyB0ZXh0IGNvbW1lbnRzIGFzIG1lc3NhZ2UgYm9kaWVzLgovLy8KLy8vIE5PVEU6" +
+ "ICoqR2FzIGV4cGVuc2l2ZSEqKiBUaGlzIGZ1bmN0aW9uIHVzZXMgNTAwIGdhcyB1bml0cyBvciBtb3JlLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkg" +
+ "ewovLy8gICAgIGxldCBzOiBTdHJpbmcgPSAiV2hlbiBsaWZlIGdpdmVzIHlvdSBsZW1vbnMsIGNhbGwgdGhlbSAneWVsbG93IG9yYW5nZXMnIGFuZCBzZWxsIHRoZW0g" +
+ "Zm9yIGRvdWJsZSB0aGUgcHJpY2UuIjsKLy8vICAgICBsZXQgZml6ejogQ2VsbCA9IHMuYXNDb21tZW50KCk7Ci8vLwovLy8gICAgIGxldCBiOiBTdHJpbmdCdWlsZGVy" +
+ "ID0gYmVnaW5Db21tZW50KCk7Ci8vLyAgICAgYi5hcHBlbmQocyk7Ci8vLyAgICAgbGV0IGJ1eno6IENlbGwgPSBiLnRvQ2VsbCgpOwovLy8KLy8vICAgICBmaXp6ID09" +
+ "IGJ1eno7IC8vIHRydWUKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncyNzdHJpbmdhc2Nv" +
+ "bW1lbnQKLy8vCmV4dGVuZHMgZnVuIGFzQ29tbWVudChzZWxmOiBTdHJpbmcpOiBDZWxsIHsKICAgIGxldCBiOiBTdHJpbmdCdWlsZGVyID0gYmVnaW5Db21tZW50KCk7" +
+ "CiAgICBiLmFwcGVuZChzZWxmKTsKICAgIHJldHVybiBiLnRvQ2VsbCgpOwp9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFN0cmluZ2AgdHlwZS4KLy8v" +
+ "Ci8vLyBDYXN0cyB0aGUgYFN0cmluZ2AgYmFjayB0byB0aGUgdW5kZXJseWluZyBgU2xpY2VgIGFuZCByZXR1cm5zIGl0LiBUaGUgaW52ZXJzZSBvZiBgU2xpY2UuYXNT" +
+ "dHJpbmcoKWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFN0cmluZyA9ICJJdCdzIGFsaXZlISBJdCdzIGFsaXZlISEh" +
+ "IjsKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBzLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgYnV6ejogU2xpY2UgPSBzLmFzU2xpY2UoKS5hc1N0cmluZygpLmFzU2xp" +
+ "Y2UoKTsKLy8vCi8vLyAgICAgZml6eiA9PSBidXp6OyAvLyB0cnVlCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3Jl" +
+ "Zi9jb3JlLXN0cmluZ3Mjc3RyaW5nYXNzbGljZQovLy8KLy8vCkBuYW1lKF9fdGFjdF9zdHJfdG9fc2xpY2UpCmV4dGVuZHMgbmF0aXZlIGFzU2xpY2Uoc2VsZjogU3Ry" +
+ "aW5nKTogU2xpY2U7CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYCB0eXBlLgovLy8KLy8vIENhc3RzIHRoZSBgU2xpY2VgIHRvIGEgYFN0cmlu" +
+ "Z2AgYW5kIHJldHVybnMgaXQuIFRoZSBpbnZlcnNlIG9mIGBTdHJpbmcuYXNTbGljZSgpYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAg" +
+ "ICBsZXQgczogU3RyaW5nID0gIktlZXAgeW91ciBTbGljZXMgY2xvc2UsIGJ1dCB5b3VyIFN0cmluZ3MgY2xvc2VyLiI7Ci8vLyAgICAgbGV0IGZpeno6IFN0cmluZyA9" +
+ "IHM7Ci8vLyAgICAgbGV0IGJ1eno6IFN0cmluZyA9IHMuYXNTbGljZSgpLmFzU3RyaW5nKCk7Ci8vLwovLy8gICAgIGZpenogPT0gYnV6ejsgLy8gdHJ1ZQovLy8gfQov" +
+ "Ly8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWFzc3RyaW5nCi8vLwpAbmFtZShfX3RhY3Rfc2xp" +
+ "Y2VfdG9fc3RyKQpleHRlbmRzIG5hdGl2ZSBhc1N0cmluZyhzZWxmOiBTbGljZSk6IFN0cmluZzsKCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2Vg" +
+ "IHR5cGUuCi8vLwovLy8gUmV0dXJucyBhIG5ldyBgU2xpY2VgIGZyb20gdGhlIGRlY29kZWQgW2Jhc2U2NF0gYFNsaWNlYC4KLy8vCi8vLyBOb3RlIHRoYXQgdGhpcyBm" +
+ "dW5jdGlvbiBpcyBsaW1pdGVkIGFuZCBvbmx5IHRha2VzIHRoZSBmaXJzdCAxMDIzIGJpdHMgb2YgZGF0YSBmcm9tCi8vLyB0aGUgZ2l2ZW4gYFNsaWNlYCwgd2l0aG91" +
+ "dCB0aHJvd2luZyBhbiBleGNlcHRpb24gaWYgdGhlIGBTbGljZWAgaGFzIG1vcmUgZGF0YQovLy8gKGkuZS4sIHdoZW4gaXQgaGFzIGFueSByZWZlcmVuY2VzKS4KLy8v" +
+ "Ci8vLyBJZiB0aGUgZ2l2ZW4gYFNsaWNlYCBjb250YWlucyBjaGFyYWN0ZXJzIG5vdCBmcm9tIHRoZSBiYXNlNjQgc2V0LCBhbiBleGNlcHRpb24gd2l0aAovLy8gW2V4" +
+ "aXQgY29kZSAxMzRdIHdpbGwgYmUgdGhyb3duOiBgSW52YWxpZCBhcmd1bWVudGAuCi8vLwovLy8gTk9URTogKipHYXMgZXhwZW5zaXZlISoqIFRoaXMgZnVuY3Rpb24g" +
+ "dXNlcyA1MDAgZ2FzIHVuaXRzIG9yIG1vcmUuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gIlNTQmhiU0JI" +
+ "Y205dmRDND0iLmFzU2xpY2UoKTsKLy8vICAgICBsZXQgZml6ejogU2xpY2UgPSBzLmZyb21CYXNlNjQoKTsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6" +
+ "Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtc3RyaW5ncyNzdHJpbmdmcm9tYmFzZTY0Ci8vLwovLy8gW2V4aXQgY29kZSAxMzRdOiBodHRwczovL2RvY3MudGFj" +
+ "dC1sYW5nLm9yZy9ib29rL2V4aXQtY29kZXMjMTM0Ci8vLyBbYmFzZTY0XTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0CmlubGluZSBleHRlbmRz" +
+ "IGZ1biBmcm9tQmFzZTY0KHNlbGY6IFN0cmluZyk6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmFzU2xpY2UoKS5mcm9tQmFzZTY0KCk7Cn0KCi8vLyBFeHRlbnNpb24g" +
+ "ZnVuY3Rpb24gZm9yIHRoZSBgU3RyaW5nYCB0eXBlLgovLy8KLy8vIFJldHVybnMgYSBgU2xpY2VgIGZyb20gdGhlIGRlY29kZWQgW2Jhc2U2NF0gYFN0cmluZ2AuCi8v" +
+ "LyBBbiBhbGlhcyB0byBgc2VsZi5hc1NsaWNlKCkuZnJvbUJhc2U2NCgpYC4KLy8vCi8vLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaW1pdGVkIGFuZCBvbmx5" +
+ "IHRha2VzIHRoZSBmaXJzdCAxMDIzIGJpdHMgb2YgZGF0YSBmcm9tCi8vLyB0aGUgZ2l2ZW4gYFN0cmluZ2AsIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIHdo" +
+ "ZW4gdGhlIGBTdHJpbmdgIGlzIGxhcmdlcgovLy8gKGkuZS4sIGNvbnRhaW5zIG1vcmUgdGhhbiAxMDIzIGJpdHMgb2YgZGF0YSkuCi8vLwovLy8gSWYgdGhlIGdpdmVu" +
+ "IGBTdHJpbmdgIGNvbnRhaW5zIGNoYXJhY3RlcnMgbm90IGZyb20gdGhlIGJhc2U2NCBzZXQsIGFuIGV4Y2VwdGlvbiB3aXRoCi8vLyBbZXhpdCBjb2RlIDEzNF0gd2ls" +
+ "bCBiZSB0aHJvd246IGBJbnZhbGlkIGFyZ3VtZW50YC4KLy8vCi8vLyBOT1RFOiAqKkdhcyBleHBlbnNpdmUhKiogVGhpcyBmdW5jdGlvbiB1c2VzIDUwMCBnYXMgdW5p" +
+ "dHMgb3IgbW9yZS4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU3RyaW5nID0gIlNHVnlaU2R6SUVwdmFHNXVlU0U9IjsK" +
+ "Ly8vICAgICBsZXQgZml6ejogU2xpY2UgPSBzLmZyb21CYXNlNjQoKTsKLy8vICAgICBsZXQgYnV6ejogU2xpY2UgPSBzLmFzU2xpY2UoKS5mcm9tQmFzZTY0KCk7Ci8v" +
+ "LwovLy8gICAgIGZpenogPT0gYnV6ejsgLy8gdHJ1ZQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1j" +
+ "ZWxscyNzbGljZWZyb21iYXNlNjQKLy8vCi8vLyBbZXhpdCBjb2RlIDEzNF06IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL2Jvb2svZXhpdC1jb2RlcyMxMzQKLy8v" +
+ "IFtiYXNlNjRdOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQKLy8vCmV4dGVuZHMgZnVuIGZyb21CYXNlNjQoc2VsZjogU2xpY2UpOiBTbGljZSB7" +
+ "CiAgICBsZXQgc2l6ZTogSW50ID0gc2VsZi5iaXRzKCkgLyA4OwogICAgbGV0IHJlc3VsdDogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwoKICAgIHJlcGVhdCAoc2l6ZSkg" +
+ "ewogICAgICAgIGxldCBjb2RlOiBJbnQgPSBzZWxmLmxvYWRVaW50KDgpOwogICAgICAgIGlmIChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIHsgLy8gQS1aCiAgICAg" +
+ "ICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSAtIDY1LCA2KTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpIHsg" +
+ "Ly8gYS16CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSAtICg5NyAtIDI2KSwgNik7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDQ4" +
+ "ICYmIGNvZGUgPD0gNTcpIHsgLy8gMC05CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoY29kZSArICg1MiAtIDQ4KSwgNik7CiAgICAgICAgfSBl" +
+ "bHNlIGlmIChjb2RlID09IDQ1IHx8IGNvZGUgPT0gNDMpIHsgLy8gLSBvciArCiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdG9yZVVpbnQoNjIsIDYpOwogICAg" +
+ "ICAgIH0gZWxzZSBpZiAoY29kZSA9PSA5NSB8fCBjb2RlID09IDQ3KSB7IC8vIF8gb3IgLwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3RvcmVVaW50KDYzLCA2" +
+ "KTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gNjEpIHsgLy8gPQogICAgICAgICAgICAvLyBTa2lwCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3co" +
+ "MTM0KTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUGFkZGluZwogICAgbGV0IHRvdGFsOiBJbnQgPSByZXN1bHQuYml0cygpOwogICAgbGV0IHBhZGRpbmc6IEludCA9" +
+ "IHRvdGFsICUgODsKICAgIGlmIChwYWRkaW5nICE9IDApIHsKICAgICAgICBsZXQgczogU2xpY2UgPSByZXN1bHQuYXNTbGljZSgpOwogICAgICAgIHJldHVybiBzLmxv" +
+ "YWRCaXRzKHRvdGFsIC0gcGFkZGluZyk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXN1bHQuYXNTbGljZSgpOwogICAgfQp9CgovLwovLyBBZGRyZXNzIGNv" +
+ "bnZlcnNpb24KLy8KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQWRkcmVzc2AgdHlwZS4KLy8vCi8vLyBSZXR1cm5zIGEgYFN0cmluZ2AgZnJvbSBhbiBg" +
+ "QWRkcmVzc2AuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGNvbW11bml0eTogQWRkcmVzcyA9IGFkZHJlc3MoIlVRRHBYTFpL" +
+ "cmtIc091RV9DMWFTNjlDNjk3d0U1Njh2VG5xU2VSZkJYWmZ2bVZPbyIpOwovLy8gICAgIGxldCBmaXp6OiBTdHJpbmcgPSBjb21tdW5pdHkudG9TdHJpbmcoKTsKLy8v" +
+ "IH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtYWRkcmVzc2VzI2FkZHJlc3N0b3N0cmluZwovLy8KQG5hbWUo" +
+ "X190YWN0X2FkZHJlc3NfdG9fdXNlcl9mcmllbmRseSkKZXh0ZW5kcyBuYXRpdmUgdG9TdHJpbmcoc2VsZjogQWRkcmVzcyk6IFN0cmluZzsK";
files["std/stdlib_ex.fc"] =
"Zm9yYWxsIFggLT4gdHVwbGUgX190YWN0X3NldCh0dXBsZSB4LCBYIHYsIGludCBpKSBhc20gIlNFVElOREVYVkFSUSI7CigpIF9fdGFjdF9ub3AoKSBhc20gIk5PUCI7" +
"CnNsaWNlIF9fdGFjdF9zdHJfdG9fc2xpY2Uoc2xpY2UgcykgYXNtICJOT1AiOwpzbGljZSBfX3RhY3Rfc2xpY2VfdG9fc3RyKHNsaWNlIHMpIGFzbSAiTk9QIjsKCigp" +
diff --git a/src/stdlib/stdlib/libs/config.tact b/src/stdlib/stdlib/libs/config.tact
index 2db490424..ef77cc07e 100644
--- a/src/stdlib/stdlib/libs/config.tact
+++ b/src/stdlib/stdlib/libs/config.tact
@@ -1,4 +1,7 @@
/// Retrieves config parameter `0` as an `Address`.
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-config#getconfigaddress
+///
fun getConfigAddress(): Address {
let cell: Cell = getConfigParam(0)!!;
let sc: Slice = cell.beginParse();
@@ -6,6 +9,9 @@ fun getConfigAddress(): Address {
}
/// Retrieves config parameter `1` as an `Address`.
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-config#getelectoraddress
+///
fun getElectorAddress(): Address {
let cell: Cell = getConfigParam(1)!!;
let sc: Slice = cell.beginParse();
diff --git a/src/stdlib/stdlib/libs/content.tact b/src/stdlib/stdlib/libs/content.tact
index 01ff69384..c1518547d 100644
--- a/src/stdlib/stdlib/libs/content.tact
+++ b/src/stdlib/stdlib/libs/content.tact
@@ -1,4 +1,7 @@
/// Encodes an off-chain `link` from a `String` to a `Cell`.
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-content#createoffchaincontent
+///
fun createOffchainContent(link: String): Cell {
let builder: StringBuilder = beginStringFromBuilder(beginCell().storeUint(0x01, 8));
builder.append(link);
diff --git a/src/stdlib/stdlib/libs/deploy.tact b/src/stdlib/stdlib/libs/deploy.tact
index d292c70d9..e677b1c45 100644
--- a/src/stdlib/stdlib/libs/deploy.tact
+++ b/src/stdlib/stdlib/libs/deploy.tact
@@ -1,6 +1,6 @@
/// Message struct used in a receiver of the **deprecated** `Deployable` trait.
///
-/// See: https://docs.tact-lang.org/ref/stdlib-deploy/#deploy
+/// See: https://docs.tact-lang.org/ref/stdlib-deploy#deploy
///
message Deploy {
/// Unique identifier for tracking transactions across multiple contracts.
@@ -10,7 +10,7 @@ message Deploy {
/// Forwarded message struct used in **deprecated**
/// `Deployable` and `FactoryDeployable` traits.
///
-/// See: https://docs.tact-lang.org/ref/stdlib-deploy/#deployok
+/// See: https://docs.tact-lang.org/ref/stdlib-deploy#deployok
///
message DeployOk {
/// Unique identifier for tracking transactions across multiple contracts.
@@ -19,7 +19,7 @@ message DeployOk {
/// Message struct used in a receiver of the **deprecated** `FactoryDeployable` trait.
///
-/// See: https://docs.tact-lang.org/ref/stdlib-deploy/#factorydeploy
+/// See: https://docs.tact-lang.org/ref/stdlib-deploy#factorydeploy
///
message FactoryDeploy {
/// Unique identifier for tracking transactions across multiple contracts.
@@ -31,27 +31,27 @@ message FactoryDeploy {
/// **Deprecated** since Tact 1.6.0. Unless you need the `queryId`, use a `null` message body receiver instead of this trait.
///
-/// Provides a convenient unified mechanism for deployments by implementing a
+/// Provides a convenient unified mechanism for deployments by implementing a
/// simple receiver for the `Deploy` message.
-///
-/// All contracts are deployed by sending them a message. While any message
-/// can be used for this purpose, the best practice is to use the special
+///
+/// All contracts are deployed by sending them a message. While any message
+/// can be used for this purpose, the best practice is to use the special
/// `Deploy` message.
-///
-/// This message has a single field, `queryId`, provided by the deployer
-/// (usually set to zero). If the deployment succeeds, the contract will
+///
+/// This message has a single field, `queryId`, provided by the deployer
+/// (usually set to zero). If the deployment succeeds, the contract will
/// reply with a `DeployOk` message and echo the same `queryId` in the response.
///
/// ```tact
/// import "@stdlib/deploy";
-///
+///
/// contract ExampleContract with Deployable {
/// // Now, this contract has a receiver for the Deploy message
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/stdlib-deploy/#deployable
-///
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-deploy#deployable
+///
trait Deployable with BaseTrait {
receive(deploy: Deploy) {
self.notify(DeployOk{queryId: deploy.queryId}.toCell());
@@ -61,7 +61,7 @@ trait Deployable with BaseTrait {
/// **Deprecated** since Tact 1.6.0. Unless you need the `queryId`, use a `null` message body receiver instead of this trait.
///
/// Provides a convenient unified mechanism for chained deployments.
-///
+///
/// ```tact
/// import "@stdlib/deploy";
///
@@ -69,9 +69,9 @@ trait Deployable with BaseTrait {
/// // Now, this contract has a receiver for the FactoryDeploy message
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/stdlib-deploy/#factorydeployable
-///
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-deploy#factorydeployable
+///
trait FactoryDeployable with BaseTrait {
receive(deploy: FactoryDeploy) {
self.forward(deploy.cashback, DeployOk { queryId: deploy.queryId }.toCell(), false, null);
diff --git a/src/stdlib/stdlib/libs/dns.tact b/src/stdlib/stdlib/libs/dns.tact
index a342917cb..fdec16cc0 100644
--- a/src/stdlib/stdlib/libs/dns.tact
+++ b/src/stdlib/stdlib/libs/dns.tact
@@ -77,8 +77,7 @@ fun dnsResolveWallet(address: Address): Cell {
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/stdlib-dns/#dnsresolver
+/// See: https://docs.tact-lang.org/ref/stdlib-dns#dnsresolver
///
trait DNSResolver {
/// Creates a struct `DNSResolveResult` from subdomain `Slice` bits.
diff --git a/src/stdlib/stdlib/libs/ownable.tact b/src/stdlib/stdlib/libs/ownable.tact
index 1b5531f52..8baa43d32 100644
--- a/src/stdlib/stdlib/libs/ownable.tact
+++ b/src/stdlib/stdlib/libs/ownable.tact
@@ -1,4 +1,7 @@
/// Message sent by the owner to transfer ownership of a contract.
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-ownable#changeowner
+///
message ChangeOwner {
/// Query ID of the change owner request.
queryId: Int as uint64;
@@ -7,6 +10,9 @@ message ChangeOwner {
}
/// Message sent by the contract to the owner to confirm the ownership transfer.
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-ownable#changeownerok
+///
message ChangeOwnerOk {
/// Query ID of the change owner request.
queryId: Int as uint64;
@@ -16,25 +22,24 @@ message ChangeOwnerOk {
/// Declares the owner (non-editable) of a contract and provides a helper
/// function `requireOwner()`, which checks that a message was sent by the owner.
-///
-/// This trait requires a field `owner: Address` to be declared and exposes
+///
+/// This trait requires a field `owner: Address` to be declared and exposes
/// a getter function `owner()`, which reads it from the contract.
-///
+///
/// ```tact
/// import "@stdlib/ownable";
-///
+///
/// contract ExampleContract with Ownable {
/// owner: Address;
-///
+///
/// init(owner: Address) {
/// self.owner = owner;
/// }
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/stdlib-ownable/#ownable
-///
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-ownable#ownable
+///
@interface("org.ton.ownable")
trait Ownable with BaseTrait {
/// The owner of the contract.
@@ -51,36 +56,34 @@ trait Ownable with BaseTrait {
}
}
-/// Extension of `Ownable` that allows transferring ownership of a contract
+/// Extension of `Ownable` that allows transferring ownership of a contract
/// to another address. It provides a secure handler for the message `ChangeOwner`
/// that can be called by the owner to transfer ownership.
-///
-/// If the ownership transfer request succeeds, the contract will reply with a
+///
+/// If the ownership transfer request succeeds, the contract will reply with a
/// `ChangeOwnerOk` message.
-///
+///
/// ```tact
/// import "@stdlib/ownable";
-///
+///
/// contract ExampleContract with OwnableTransferable {
/// owner: Address;
-///
+///
/// init(owner: Address) {
/// self.owner = owner;
/// }
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/stdlib-ownable/#ownabletransferable
-///
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-ownable#ownabletransferable
+///
@interface("org.ton.ownable.transferable.v2")
trait OwnableTransferable with Ownable {
/// The owner of the contract.
owner: Address;
- /// Receiver for the `ChangeOwner` that can be called by the owner to transfer ownership.
- ///
- /// Can be called only by the owner.
+ /// Receiver for the `ChangeOwner` message body, which
+ /// can only be processed when sent by the current owner.
receive(msg: ChangeOwner) {
// Check if the sender is the owner
self.requireOwner();
diff --git a/src/stdlib/stdlib/libs/stoppable.tact b/src/stdlib/stdlib/libs/stoppable.tact
index 32af34d99..8576de7b8 100644
--- a/src/stdlib/stdlib/libs/stoppable.tact
+++ b/src/stdlib/stdlib/libs/stoppable.tact
@@ -1,31 +1,30 @@
import "./ownable";
/// Implements a receiver for the message `"Stop"` that can be sent by the owner.
-///
-/// Trait implements the `stopped()` [getter function] that returns `true` if the contract
-/// is stopped (or `false` otherwise) and provides private (non-getter) functions
+///
+/// Trait implements the `stopped()` [getter function] that returns `true` if the contract
+/// is stopped (or `false` otherwise) and provides private (non-getter) functions
/// `requireNotStopped()` and `requireStopped()`.
-///
+///
/// ```tact
/// import "@stdlib/ownable";
/// import "@stdlib/stoppable";
-///
+///
/// contract MyContract with Stoppable {
/// owner: Address;
/// stopped: Bool;
-///
+///
/// init(owner: Address) {
/// self.owner = owner;
/// self.stopped = false;
/// }
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/stdlib-stoppable/#stoppable
-///
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-stoppable#stoppable
+///
/// [getter function]: https://docs.tact-lang.org/book/functions#getter-functions
-///
+///
@interface("org.ton.stoppable")
trait Stoppable with Ownable {
/// Whether the contract is stopped.
@@ -45,7 +44,7 @@ trait Stoppable with Ownable {
}
/// Receiver for the message `"Stop"` that stops the contract.
- ///
+ ///
/// Can only be called by the owner and if the contract is not stopped already.
receive("Stop") {
self.requireOwner();
@@ -61,27 +60,26 @@ trait Stoppable with Ownable {
}
/// Extends the `Stoppable` trait and allows resuming contract execution.
-///
+///
/// Trait implements a receiver for the message `"Resume"` that resumes the contract execution.
-///
+///
/// ```tact
/// import "@stdlib/ownable";
/// import "@stdlib/stoppable";
-///
+///
/// contract MyContract with Resumable {
/// owner: Address;
/// stopped: Bool;
-///
+///
/// init(owner: Address) {
/// self.owner = owner;
/// self.stopped = false;
/// }
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/stdlib-stoppable/#resumable
-///
+///
+/// See: https://docs.tact-lang.org/ref/stdlib-stoppable#resumable
+///
@interface("org.ton.resumable")
trait Resumable with Stoppable {
/// Whether the contract is stopped.
@@ -91,7 +89,7 @@ trait Resumable with Stoppable {
owner: Address;
/// Receiver for the message `"Resume"` that resumes the contract execution.
- ///
+ ///
/// Can only be called by the owner and if the contract is stopped.
receive("Resume") {
self.requireOwner();
diff --git a/src/stdlib/stdlib/std/internal/address.tact b/src/stdlib/stdlib/std/internal/address.tact
index 58b2aa78d..a0ea3a23a 100644
--- a/src/stdlib/stdlib/std/internal/address.tact
+++ b/src/stdlib/stdlib/std/internal/address.tact
@@ -16,7 +16,7 @@
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#sliceasaddress
/// * https://docs.tact-lang.org/ref/core-cells#sliceasaddressunsafe
-/// * https://docs.tact-lang.org/ref/core-cells#addressasslice
+/// * https://docs.tact-lang.org/ref/core-addresses#addressasslice
///
extends fun asAddress(self: Slice, chain: Int): Address {
// 11 bits for the prefix,
@@ -59,7 +59,7 @@ extends fun asAddress(self: Slice, chain: Int): Address {
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#sliceasaddressunsafe
/// * https://docs.tact-lang.org/ref/core-cells#sliceasaddress
-/// * https://docs.tact-lang.org/ref/core-cells#addressasslice
+/// * https://docs.tact-lang.org/ref/core-addresses#addressasslice
///
asm extends fun asAddressUnsafe(self: Slice): Address {}
@@ -78,7 +78,7 @@ asm extends fun asAddressUnsafe(self: Slice): Address {}
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-cells#addressasslice
+/// * https://docs.tact-lang.org/ref/core-addresses#addressasslice
/// * https://docs.tact-lang.org/ref/core-cells#sliceasaddressunsafe
///
asm extends fun asSlice(self: Address): Slice {}
@@ -101,7 +101,7 @@ asm extends fun asSlice(self: Address): Slice {}
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-common#newaddress
+/// See: https://docs.tact-lang.org/ref/core-addresses#newaddress
///
inline fun newAddress(chain: Int, hash: Int): Address {
return beginCell()
@@ -118,7 +118,7 @@ inline fun newAddress(chain: Int, hash: Int): Address {
/// At the moment, only `workchain` IDs used on TON are 0 of the basechain and -1 of the masterchain.
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#parsestdaddress
+/// * https://docs.tact-lang.org/ref/core-addresses#parsestdaddress
/// * https://github.com/ton-blockchain/ton/blob/master/crypto/block/block.tlb#L105-L106
///
struct StdAddress {
@@ -131,7 +131,7 @@ struct StdAddress {
/// Variable-length addresses are intended for future extensions, and while validators must be ready to accept them in inbound messages, the standard (non-variable) addresses are used whenever possible.
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#parsevaraddress
+/// * https://docs.tact-lang.org/ref/core-addresses#parsevaraddress
/// * https://github.com/ton-blockchain/ton/blob/master/crypto/block/block.tlb#L107-L108
///
struct VarAddress {
@@ -153,7 +153,7 @@ struct VarAddress {
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#parsestdaddress
+/// See: https://docs.tact-lang.org/ref/core-addresses#parsestdaddress
///
asm fun parseStdAddress(slice: Slice): StdAddress { REWRITESTDADDR }
@@ -177,7 +177,7 @@ asm fun parseStdAddress(slice: Slice): StdAddress { REWRITESTDADDR }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#parsevaraddress
+/// See: https://docs.tact-lang.org/ref/core-addresses#parsevaraddress
///
asm fun parseVarAddress(slice: Slice): VarAddress { REWRITEVARADDR }
@@ -196,7 +196,7 @@ asm fun parseVarAddress(slice: Slice): VarAddress { REWRITEVARADDR }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-cells/#sliceloadaddress
+/// See: https://docs.tact-lang.org/ref/core-cells#sliceloadaddress
///
asm( -> 1 0) extends mutates fun loadAddress(self: Slice): Address { LDMSGADDR }
@@ -220,7 +220,7 @@ asm( -> 1 0) extends mutates fun loadAddress(self: Slice): Address { LDMSGADDR }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-cells/#sliceloadaddress
+/// See: https://docs.tact-lang.org/ref/core-cells#sliceloadaddress
///
asm extends mutates fun skipAddress(self: Slice) { LDMSGADDR NIP }
@@ -237,7 +237,7 @@ asm extends mutates fun skipAddress(self: Slice) { LDMSGADDR NIP }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-cells/#builderstoreaddress
+/// See: https://docs.tact-lang.org/ref/core-cells#builderstoreaddress
///
asm extends fun storeAddress(self: Builder, address: Address): Builder { STSLICER }
@@ -347,7 +347,7 @@ extends fun storeBasechainAddress(self: Builder, address: BasechainAddress): Bui
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#forcebasechain
+/// See: https://docs.tact-lang.org/ref/core-addresses#forcebasechain
///
asm fun forceBasechain(address: Address) { REWRITESTDADDR DROP 138 THROWIF }
@@ -376,7 +376,7 @@ asm fun forceBasechain(address: Address) { REWRITESTDADDR DROP 138 THROWIF }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#forceworkchain
+/// See: https://docs.tact-lang.org/ref/core-addresses#forceworkchain
///
asm(errorCode workchain address) fun forceWorkchain(address: Address, workchain: Int, errorCode: Int) {
REWRITESTDADDR
diff --git a/src/stdlib/stdlib/std/internal/base.tact b/src/stdlib/stdlib/std/internal/base.tact
index caacb1af0..4feb4eb5b 100644
--- a/src/stdlib/stdlib/std/internal/base.tact
+++ b/src/stdlib/stdlib/std/internal/base.tact
@@ -18,7 +18,8 @@ trait BaseTrait {
/// }
/// ```
///
- /// See: https://docs.tact-lang.org/ref/core-base/#self-forward
+ /// See: https://docs.tact-lang.org/ref/core-base#self-forward
+ ///
virtual const storageReserve: Int = 0;
/// Sends a bounceable message back to the sender of the current message.
@@ -33,6 +34,9 @@ trait BaseTrait {
/// | body: Cell?
/// to: Address
/// ```
+ ///
+ /// See: https://docs.tact-lang.org/ref/core-base#self-forward
+ ///
virtual inline fun reply(body: Cell?) {
self.forward(sender(), body, true, null);
}
@@ -49,6 +53,9 @@ trait BaseTrait {
/// | body: Cell?
/// to: Address
/// ```
+ ///
+ /// See: https://docs.tact-lang.org/ref/core-base#self-forward
+ ///
virtual inline fun notify(body: Cell?) {
self.forward(sender(), body, false, null);
}
@@ -66,7 +73,8 @@ trait BaseTrait {
/// > Note that `self.forward()` never sends additional nanoToncoins on top of what’s available on the balance.
/// > To be able to send more nanoToncoins with a single message, use the the `send` function.
///
- /// See: https://docs.tact-lang.org/ref/core-base/#self-forward for examples.
+ /// See: https://docs.tact-lang.org/ref/core-base#self-forward
+ ///
virtual fun forward(to: Address, body: Cell?, bounce: Bool, init: StateInit?) {
let code: Cell? = null;
let data: Cell? = null;
diff --git a/src/stdlib/stdlib/std/internal/cells.tact b/src/stdlib/stdlib/std/internal/cells.tact
index ec2d73f1d..6cf57ee0e 100644
--- a/src/stdlib/stdlib/std/internal/cells.tact
+++ b/src/stdlib/stdlib/std/internal/cells.tact
@@ -3,16 +3,15 @@
//
/// Creates a new empty `Builder`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-cells/#begincell
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#begincell
+///
asm fun beginCell(): Builder { NEWC }
/// Extension function for the `Builder` type.
@@ -20,19 +19,18 @@ asm fun beginCell(): Builder { NEWC }
/// Stores a signed `bits`-bit `value` into the copy of the `Builder` for 0 ≤ `bits` ≤ 257.
/// Returns that copy of the `Builder`.
///
-/// Attempts to provide an insufficient or out-of-bounds `bits` number throw an exception with
+/// Attempts to provide an insufficient or out-of-bounds `bits` number throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let fizz: Builder = b.storeInt(42, 7);
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-cells#builderstoreint
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#builderstoreint
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
///
@name(store_int) // special treatment in Func compiler, so not replaced with asm "STIX"
@@ -43,30 +41,30 @@ extends native storeInt(self: Builder, value: Int, bits: Int): Builder;
/// Stores an unsigned `bits`-bit `value` into the copy of the `Builder` for 0 ≤ `bits` ≤ 256.
/// Returns that copy of the `Builder`.
///
-/// Attempts to store a negative `value` or provide an insufficient or out-of-bounds `bits`
+/// Attempts to store a negative `value` or provide an insufficient or out-of-bounds `bits`
/// number throw an exception with [exit code 5]: `Integer out of expected range`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let fizz: Builder = b.storeUint(42, 6);
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#builderstoreuint
-///
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
-///
+///
@name(store_uint) // special treatment in Func compiler, so not replaced with asm "STUX"
extends native storeUint(self: Builder, value: Int, bits: Int): Builder;
/// Extension function for the `Builder` type.
-///
-/// Stores a `Bool` `value` into the copy of the `Builder`.
+///
+/// Stores a `Bool` `value` into the copy of the `Builder`.
/// Writes 1 as a single bit if `value` is `true`, and writes 0 otherwise.
/// Returns that copy of the `Builder`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
@@ -184,32 +182,32 @@ asm extends fun storeVarUint32(self: Builder, value: Int): Builder { STVARUINT32
asm extends fun storeVarInt32(self: Builder, value: Int): Builder { STVARINT32 }
/// Extension function for the `Builder` type.
-///
+///
/// Stores a reference `cell` into a copy of the `Builder`.
/// Returns that copy of the `Builder`.
-///
-/// As a single `Cell` can store up to 4 references, attempts to store more throw an exception with
+///
+/// As a single `Cell` can store up to 4 references, attempts to store more throw an exception with
/// [exit code 8]: `Cell overflow`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let fizz: Builder = b.storeRef(emptyCell());
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#builderstoreref
-///
+///
/// [exit code 8]: https://docs.tact-lang.org/book/exit-codes#8
-///
+///
asm(cell self) extends fun storeRef(self: Builder, cell: Cell): Builder { STREF }
/// Extension function for the `Builder` type.
-///
+///
/// Stores a `slice` into a copy of the `Builder`.
/// Returns that copy of the `Builder`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
@@ -217,10 +215,10 @@ asm(cell self) extends fun storeRef(self: Builder, cell: Cell): Builder { STREF
/// let fizz: Builder = b.storeSlice(s);
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#builderstoreslice
-///
+///
asm extends fun storeSlice(self: Builder, slice: Slice): Builder { STSLICER }
/// Extension function for the `Builder` type. Available since Tact 1.5.0.
@@ -261,53 +259,53 @@ asm extends fun storeBuilder(self: Builder, cell: Builder): Builder { STBR }
asm(cell self) extends fun storeMaybeRef(self: Builder, cell: Cell?): Builder { STOPTREF }
/// Extension function for the `Builder` type.
-///
+///
/// Converts a `Builder` into an ordinary `Cell`.
///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let c: Cell = b.endCell();
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#builderendcell
-///
+///
asm extends fun endCell(self: Builder): Cell { ENDC }
/// Extension function for the `Builder` type.
-///
+///
/// Returns the number of cell references already stored in the `Builder` as an `Int`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let refs: Int = b.refs(); // 0
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#builderrefs
-///
+///
asm extends fun refs(self: Builder): Int { BREFS }
/// Extension function for the `Builder` type.
///
/// Returns the number of data bits already stored in the `Builder` as an `Int`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let bits: Int = b.bits(); // 0
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#builderbits
-///
+///
asm extends fun bits(self: Builder): Int { BBITS }
/// Extension function for the `Builder` type. Available since Tact 1.6.0.
@@ -339,27 +337,27 @@ asm extends fun depth(self: Builder): Int { BDEPTH }
/// let s: Slice = c.beginParse();
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#cellbeginparse
-///
+///
asm extends fun beginParse(self: Cell): Slice { CTOS }
/// Extension mutation function for the `Slice` type.
-///
+///
/// Loads the next reference from the `Slice` as a `Cell`.
-///
-/// Attempts to load such reference `Cell` when `Slice` doesn't contain it throw an exception with
+///
+/// Attempts to load such reference `Cell` when `Slice` doesn't contain it throw an exception with
/// [exit code 8]: `Cell overflow`.
-///
-/// Attempts to load more data than `Slice` contains throw an exception with
+///
+/// Attempts to load more data than `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s1: Slice = beginCell().storeRef(emptyCell()).asSlice();
/// let fizz: Cell = s1.loadRef();
-///
+///
/// let s2: Slice = beginCell()
/// .storeRef(emptyCell())
/// .storeRef(s1.asCell())
@@ -369,22 +367,22 @@ asm extends fun beginParse(self: Cell): Slice { CTOS }
/// ref1 == ref2; // false
/// }
/// ```
-///
+///
/// [exit code 8]: https://docs.tact-lang.org/book/exit-codes#8
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
asm(-> 1 0) extends mutates fun loadRef(self: Slice): Cell { LDREF }
/// Extension mutation function for the `Slice` type. Available since Tact 1.6.2.
-///
+///
/// Skips the next reference from the `Slice`. Similar to discarding the return value of `Slice.loadRef()`.
-///
-/// Attempts to skip such reference `Cell` when `Slice` doesn't contain it throw an exception with
+///
+/// Attempts to skip such reference `Cell` when `Slice` doesn't contain it throw an exception with
/// [exit code 8]: `Cell overflow`.
-///
-/// Attempts to skip more data than `Slice` contains throw an exception with
+///
+/// Attempts to skip more data than `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s1: Slice = beginCell()
@@ -396,10 +394,10 @@ asm(-> 1 0) extends mutates fun loadRef(self: Slice): Cell { LDREF }
/// let fizz: Int = s1.loadUint(32); // 42
/// }
/// ```
-///
+///
/// [exit code 8]: https://docs.tact-lang.org/book/exit-codes#8
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
asm extends mutates fun skipRef(self: Slice) { LDREF NIP }
/// Extension function for the `Slice` type. Available since Tact 1.5.0.
@@ -516,212 +514,212 @@ asm extends mutates fun skipMaybeRef(self: Slice) { LDOPTREF NIP }
asm extends fun preloadMaybeRef(self: Slice): Cell? { PLDOPTREF }
/// Extension mutation function for the `Slice` type.
-///
+///
/// Loads 0 ≤ `l` ≤ 1023 bits from the `Slice` and returns them as a separate `Slice`.
-///
-/// Attempts to specify an out-of-bounds `l` value throw an exception with
+///
+/// Attempts to specify an out-of-bounds `l` value throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
-/// Attempts to load more data than the `Slice` contains throw an exception with
+///
+/// Attempts to load more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeInt(42, 7).asSlice();
/// let fizz: Slice = s.loadBits(7);
/// }
/// ```
-///
+///
/// See:
-/// * https://docs.tact-lang.org/ref/core-cells/#sliceloadbits
-///
+/// * https://docs.tact-lang.org/ref/core-cells#sliceloadbits
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
@name(load_bits) // special treatment in Func compiler, so not replaced with asm "LDSLICEX"
extends mutates native loadBits(self: Slice, l: Int): Slice;
/// Extension function for the `Slice` type.
-///
+///
/// Preloads 0 ≤ `l` ≤ 1023 bits from the `Slice` and returns them as a separate `Slice`.
/// Doesn't modify the original `Slice`.
-///
-/// Attempts to specify an out-of-bounds `l` value throw an exception with
+///
+/// Attempts to specify an out-of-bounds `l` value throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
-/// Attempts to preload more data than the `Slice` contains throw an exception with
+///
+/// Attempts to preload more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeInt(42, 7).asSlice();
/// let fizz: Slice = s.preloadBits(7);
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#slicepreloadbits
-///
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
@name(preload_bits) // special treatment in Func compiler, so not replaced with asm "PLDSLICEX"
extends native preloadBits(self: Slice, l: Int): Slice;
/// Extension mutation function for the `Slice` type.
-///
+///
/// Loads and returns a signed `l`-bit `Int` from the `Slice`, for 0 ≤ l ≤ 257.
-///
-/// Attempts to specify an out-of-bounds `l` value throw an exception with
+///
+/// Attempts to specify an out-of-bounds `l` value throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
-/// Attempts to load more data than the `Slice` contains throw an exception with
+///
+/// Attempts to load more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeInt(42, 7).asSlice();
/// let fizz: Int = s.loadInt(7);
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#sliceloadint
-///
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
@name(load_int) // special treatment in Func compiler, so not replaced with asm "LDIX"
extends mutates native loadInt(self: Slice, l: Int): Int;
/// Extension function for the `Slice` type.
-///
+///
/// Preloads and returns a signed `l`-bit `Int` from the `Slice`, for 0 ≤ l ≤ 257.
/// Doesn't modify the `Slice`.
-///
-/// Attempts to specify an out-of-bounds `l` value throw an exception with
+///
+/// Attempts to specify an out-of-bounds `l` value throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
-/// Attempts to preload more data than the `Slice` contains throw an exception with
+///
+/// Attempts to preload more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeInt(42, 7).asSlice();
/// let fizz: Int = s.preloadInt(7);
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#slicepreloadint
-///
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
@name(preload_int) // special treatment in Func compiler, so not replaced with asm "PLDIX"
extends native preloadInt(self: Slice, l: Int): Int;
/// Extension mutation function for the `Slice` type.
-///
+///
/// Loads and returns an unsigned `l`-bit `Int` from the `Slice`, for 0 ≤ l ≤ 256.
-///
-/// Attempts to specify an out-of-bounds `l` value throw an exception with
+///
+/// Attempts to specify an out-of-bounds `l` value throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
-/// Attempts to load more data than the `Slice` contains throw an exception with
+///
+/// Attempts to load more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeUint(42, 7).asSlice();
/// let fizz: Int = s.loadUint(7);
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#sliceloaduint
-///
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
@name(load_uint) // special treatment in Func compiler, so not replaced with asm "LDUX"
extends mutates native loadUint(self: Slice, l: Int): Int;
/// Extension function for the `Slice` type.
-///
+///
/// Preloads and returns an unsigned `l`-bit `Int` from the `Slice`, for 0 ≤ l ≤ 256.
/// Doesn't modify the `Slice`.
-///
-/// Attempts to specify an out-of-bounds `l` value throw an exception with
+///
+/// Attempts to specify an out-of-bounds `l` value throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
-/// Attempts to preload more data than the `Slice` contains throw an exception with
+///
+/// Attempts to preload more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeUint(42, 7).asSlice();
/// let fizz: Int = s.preloadUint(7);
/// }
/// ```
-///
+///
/// See:
/// * https://docs.tact-lang.org/ref/core-cells#slicepreloaduint
-///
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
@name(preload_uint) // special treatment in Func compiler, so not replaced with asm "PLDUX"
extends native preloadUint(self: Slice, l: Int): Int;
/// Extension mutation function for the `Slice` type.
-///
-/// Loads a single bit and returns a `Bool` value from the `Slice`.
+///
+/// Loads a single bit and returns a `Bool` value from the `Slice`.
/// Reads `true` if the loaded bit is equal to 1, and reads `false` otherwise.
-///
-/// Attempts to load such `Bool` when the `Slice` doesn't contain it throw an exception with
+///
+/// Attempts to load such `Bool` when the `Slice` doesn't contain it throw an exception with
/// [exit code 8]: `Cell overflow`.
-///
-/// Attempts to load more data than the `Slice` contains throw an exception with
+///
+/// Attempts to load more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeBool(true).asSlice();
/// let fizz: Bool = s.loadBool(); // true
/// }
/// ```
-///
+///
/// [exit code 8]: https://docs.tact-lang.org/book/exit-codes#8
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
asm(-> 1 0) extends mutates fun loadBool(self: Slice): Bool { 1 LDI }
/// Extension mutation function for the `Slice` type. Available since Tact 1.6.2.
-///
+///
/// Skips a single bit from the `Slice`. Similar to discarding the return value of `Slice.loadBool()`.
-///
-/// Attempts to load such `Bool` when the `Slice` doesn't contain it throw an exception with
+///
+/// Attempts to load such `Bool` when the `Slice` doesn't contain it throw an exception with
/// [exit code 8]: `Cell overflow`.
-///
-/// Attempts to load more data than the `Slice` contains throw an exception with
+///
+/// Attempts to load more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell()
/// .storeBool(true)
/// .storeUint(42, 7)
/// .asSlice();
-///
+///
/// s.skipBool();
/// let fizz: Int = s.loadUint(7); // 42
/// }
/// ```
-///
+///
/// [exit code 8]: https://docs.tact-lang.org/book/exit-codes#8
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
asm extends mutates fun skipBool(self: Slice) { 1 LDI NIP }
/// Extension mutation function for the `Slice` type. Available since Tact 1.5.0.
@@ -759,27 +757,27 @@ asm(-> 1 0) extends mutates fun loadBit(self: Slice): Bool { 1 LDI }
asm( -> 1 0) extends mutates fun loadCoins(self: Slice): Int { LDVARUINT16 }
/// Extension mutation function for the `Slice` type. Available since Tact 1.6.2.
-///
+///
/// Skips a serialized unsigned `Int` value in the range from 0 to 2^120 - 1 inclusive from the `Slice`. Similar to discarding the return value of `Slice.loadCoins()`.
///
/// Attempts to skip such `Int` when `Slice` doesn't contain it throw an exception with exit code 8: `Cell overflow`.
///
/// Attempts to skip more data than `Slice` contains throw an exception with exit code 9: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell()
/// .storeCoins(239)
/// .storeUint(42, 7)
/// .asSlice();
-///
+///
/// s.skipCoins();
/// let fizz: Int = s.loadUint(7); // 42
/// }
/// ```
-///
+///
/// See: https://docs.tact-lang.org/ref/core-cells#sliceloadcoins
-///
+///
asm extends mutates fun skipCoins(self: Slice) { LDVARUINT16 NIP }
/// Extension mutation function for the `Slice` type. Available since Tact 1.6.0.
@@ -809,7 +807,7 @@ asm( -> 1 0) extends mutates fun loadVarUint16(self: Slice): Int { LDVARUINT16 }
/// .storeVarUint16(239)
/// .storeUint(42, 7)
/// .asSlice();
-///
+///
/// s.skipVarUint16();
/// let fizz: Int = s.loadUint(7); // 42
/// }
@@ -854,7 +852,7 @@ asm( -> 1 0) extends mutates fun loadVarInt16(self: Slice): Int { LDVARINT16 }
/// .storeVarInt16(-239)
/// .storeUint(42, 7)
/// .asSlice();
-///
+///
/// s.skipVarInt16();
/// let fizz: Int = s.loadUint(7); // 42
/// }
@@ -897,7 +895,7 @@ asm( -> 1 0) extends mutates fun loadVarUint32(self: Slice): Int { LDVARUINT32 }
/// .storeVarUint32(239)
/// .storeUint(42, 7)
/// .asSlice();
-///
+///
/// s.skipVarUint32();
/// let fizz: Int = s.loadUint(7); // 42
/// }
@@ -940,7 +938,7 @@ asm( -> 1 0) extends mutates fun loadVarInt32(self: Slice): Int { LDVARINT32 }
/// .storeVarInt32(-239)
/// .storeUint(42, 7)
/// .asSlice();
-///
+///
/// s.skipVarInt32();
/// let fizz: Int = s.loadUint(7); // 42
/// }
@@ -951,15 +949,15 @@ asm( -> 1 0) extends mutates fun loadVarInt32(self: Slice): Int { LDVARINT32 }
asm extends mutates fun skipVarInt32(self: Slice) { LDVARINT32 NIP }
/// Extension mutation function for the `Slice` type.
-///
+///
/// Loads all but the first 0 ≤ `l` ≤ 1023 bits from the `Slice`.
-///
-/// Attempts to specify an out-of-bounds `l` value throw an exception with
+///
+/// Attempts to specify an out-of-bounds `l` value throw an exception with
/// [exit code 5]: `Integer out of expected range`.
-///
-/// Attempts to load more data than the `Slice` contains throw an exception with
+///
+/// Attempts to load more data than the `Slice` contains throw an exception with
/// [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeInt(42, 7).asSlice();
@@ -967,33 +965,33 @@ asm extends mutates fun skipVarInt32(self: Slice) { LDVARINT32 NIP }
/// let fizz: Slice = s.loadBits(1); // load only 1 bit
/// }
/// ```
-///
+///
/// See: https://docs.tact-lang.org/ref/core-cells#sliceskipbits
-///
+///
/// [exit code 5]: https://docs.tact-lang.org/book/exit-codes#5
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
asm extends mutates fun skipBits(self: Slice, l: Int) { SDSKIPFIRST }
/// Extension function for the `Slice` type.
-///
+///
/// Checks whether the `Slice` is empty (i.e., contains no bits of data and no cell references).
/// If it is not, it throws an exception with [exit code 9]: `Cell underflow`.
-///
+///
/// ```tact
/// fun example() {
/// let emptyOne: Slice = emptySlice();
/// emptyOne.endParse(); // nothing, as it's empty
-///
+///
/// let paul: Slice = "Fear is the mind-killer".asSlice();
/// try {
/// paul.endParse(); // throws exit code 9
/// }
/// }
/// ```
-///
+///
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
-///
+///
asm extends fun endParse(self: Slice) { ENDS }
/// Extension function for the `Slice` type. Available since Tact 1.6.0.
@@ -1078,40 +1076,40 @@ asm extends fun depth(self: Slice): Int { SDEPTH }
//
/// Extension function for the `Slice` type.
-///
+///
/// Returns the number of references in the `Slice` as an `Int`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeRef(emptyCell()).asSlice();
/// let fizz: Int = s.refs();
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/core-cells#slicerrefs
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#slicerefs
+///
asm extends fun refs(self: Slice): Int { SREFS }
/// Extension function for the `Slice` type.
-///
+///
/// Returns the number of data bits in the `Slice` as an `Int`.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeRef(emptyCell()).asSlice();
/// let fizz: Int = s.bits();
/// }
/// ```
-///
+///
/// See: https://docs.tact-lang.org/ref/core-cells#slicebits
-///
+///
asm extends fun bits(self: Slice): Int { SBITS }
/// Extension function for the `Slice` type.
-///
+///
/// Checks whether the `Slice` is empty (i.e., contains no bits of data and no cell references).
/// Returns `true` if it is empty, `false` otherwise.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeRef(emptyCell()).asSlice();
@@ -1119,35 +1117,35 @@ asm extends fun bits(self: Slice): Int { SBITS }
/// let buzz: Bool = beginCell().asSlice().empty(); // true
/// }
/// ```
-///
+///
/// See: https://docs.tact-lang.org/ref/core-cells#sliceempty
-///
+///
asm extends fun empty(self: Slice): Bool { SEMPTY }
/// Extension function for the `Slice` type.
-///
+///
/// Checks whether the `Slice` has no bits of data.
/// Returns `true` if it has no data, `false` otherwise.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeRef(emptyCell()).asSlice();
/// let fizz: Bool = s.dataEmpty(); // true
-///
+///
/// let s2: Slice = beginCell().storeInt(42, 7).asSlice();
/// let buzz: Bool = s2.dataEmpty(); // false
/// }
/// ```
-///
+///
/// See: https://docs.tact-lang.org/ref/core-cells#slicedataempty
-///
+///
asm extends fun dataEmpty(self: Slice): Bool { SDEMPTY }
/// Extension function for the `Slice` type.
-///
+///
/// Checks whether the `Slice` has no references.
/// Returns `true` if it has no references, `false` otherwise.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().storeRef(emptyCell()).asSlice();
@@ -1155,9 +1153,9 @@ asm extends fun dataEmpty(self: Slice): Bool { SDEMPTY }
/// let buzz: Bool = beginCell().asSlice().refsEmpty(); // true
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/core-cells#slicerfsempty
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#slicerefsempty
+///
asm extends fun refsEmpty(self: Slice): Bool { SREMPTY }
//
@@ -1165,60 +1163,60 @@ asm extends fun refsEmpty(self: Slice): Bool { SREMPTY }
//
/// Extension function for the `Builder` type.
-///
+///
/// Converts the `Builder` into a `Slice` and returns it.
/// An alias to `self.endCell().beginParse()`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let fizz: Slice = b.asSlice();
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/core-cells#builderasSlice
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#builderasslice
+///
inline extends fun asSlice(self: Builder): Slice {
return self.endCell().beginParse();
}
/// Extension function for the `Cell` type.
-///
+///
/// Converts the `Cell` to a `Slice` and returns it.
/// An alias to `self.beginParse()`.
-///
+///
/// ```tact
/// fun example() {
/// let c: Cell = emptyCell();
/// let fizz: Slice = c.asSlice();
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/core-cells#cellasSlice
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#cellasslice
+///
inline extends fun asSlice(self: Cell): Slice {
return self.beginParse();
}
/// Extension function for the `Slice` type.
-///
+///
/// Converts the `Slice` to a `Cell` and returns it.
/// An alias to `beginCell().storeSlice(self).endCell()`.
-///
+///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
-///
+///
/// ```tact
/// fun example() {
/// let s: Slice = beginCell().asSlice();
/// let fizz: Cell = s.asCell();
/// let buzz: Cell = beginCell().storeSlice(s).endCell();
-///
+///
/// fizz == buzz; // true
/// }
/// ```
-///
+///
/// See: https://docs.tact-lang.org/ref/core-cells#sliceascell
-///
+///
inline extends fun asCell(self: Slice): Cell {
return beginCell()
.storeSlice(self)
@@ -1226,55 +1224,55 @@ inline extends fun asCell(self: Slice): Cell {
}
/// Extension function for the `Builder` type.
-///
+///
/// Converts the `Builder` into a `Cell` and returns it.
/// An alias to `self.endCell()`.
-///
+///
/// ```tact
/// fun example() {
/// let b: Builder = beginCell();
/// let fizz: Cell = b.asCell();
/// }
/// ```
-///
+///
/// See: https://docs.tact-lang.org/ref/core-cells#builderascell
-///
+///
inline extends fun asCell(self: Builder): Cell {
return self.endCell();
}
/// Creates and returns an empty `Cell` (without data and references).
/// An alias to `beginCell().endCell()`.
-///
+///
/// ```tact
/// fun example() {
/// let fizz: Cell = emptyCell();
/// let buzz: Cell = beginCell().endCell();
-///
+///
/// fizz == buzz; // true
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/core-cells/#emptycell
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#emptycell
+///
asm fun emptyCell(): Cell {
PUSHREF // Pure Fift: "" turns it into a cell at compile time
}
/// Creates and returns an empty `Slice` (without data and references).
/// An alias to `emptyCell().asSlice()`.
-///
+///
/// ```tact
/// fun example() {
/// let fizz: Slice = emptySlice();
/// let buzz: Slice = emptyCell().asSlice();
-///
+///
/// fizz == buzz; // true
/// }
/// ```
-///
-/// See: https://docs.tact-lang.org/ref/core-cells/#emptyslice
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#emptyslice
+///
asm fun emptySlice(): Slice {
b{} PUSHSLICE
}
diff --git a/src/stdlib/stdlib/std/internal/config.tact b/src/stdlib/stdlib/std/internal/config.tact
index 6145ca647..64b049f17 100644
--- a/src/stdlib/stdlib/std/internal/config.tact
+++ b/src/stdlib/stdlib/std/internal/config.tact
@@ -1,5 +1,7 @@
/// Loads a [configuration parameter] of TON Blockchain by its `id` number.
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#getconfigparam
+///
/// [configuration parameter]: https://docs.ton.org/develop/howto/blockchain-configs
-///
+///
asm fun getConfigParam(id: Int): Cell? { CONFIGOPTPARAM }
diff --git a/src/stdlib/stdlib/std/internal/context.tact b/src/stdlib/stdlib/std/internal/context.tact
index afa8678d7..a74481143 100644
--- a/src/stdlib/stdlib/std/internal/context.tact
+++ b/src/stdlib/stdlib/std/internal/context.tact
@@ -4,7 +4,7 @@ struct Context {
/// [bounce back](https://docs.ton.org/v3/documentation/smart-contracts/message-management/non-bounceable-messages).
bounceable: Bool;
- /// Internal address of the sender on the TON blockchain.
+ /// Internal address of the sender on the TON Blockchain.
sender: Address;
/// Amount of [nanoToncoin](https://docs.tact-lang.org/book/integers#nanotoncoin) in the received message.
@@ -12,39 +12,41 @@ struct Context {
/// The remainder of the received message as a `Slice`. It follows the [internal message layout]
/// of TON, starting from the destination `Address` (`MsgAddressInt` in [TL-B notation]).
- ///
+ ///
/// [internal message layout]: https://docs.ton.org/develop/smart-contracts/messages#message-layout
/// [TL-B notation]: https://docs.ton.org/develop/data-formats/tl-b-language
raw: Slice;
}
/// Returns `Context` struct, which consists of:
-///
+///
/// * `bounceable` — Indicates whether the received message can [bounce back].
/// * `sender` — Internal address of the sender on the TON blockchain.
/// * `value` — Amount of [nanoToncoin] in the received message.
/// * `raw` — The remainder of the received message as a `Slice`. It follows the [internal message layout] of TON, starting from the destination `Address` (`MsgAddressInt` in [TL-B notation]).
-///
+///
/// ```tact
/// fun test() {
/// let ctx: Context = context();
/// require(ctx.value != 68 + 1, "Invalid amount of nanoToncoins, bye!");
/// }
/// ```
-///
-/// Note: If you only need to know who sent the message, use the `sender()` function,
+///
+/// Note: If you only need to know who sent the message, use the `sender()` function,
/// as it is less gas-consuming.
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#context
+///
/// [bounce back]: https://docs.ton.org/v3/documentation/smart-contracts/message-management/non-bounceable-messages
/// [nanoToncoin]: https://docs.tact-lang.org/book/integers#nanotoncoin
/// [internal message layout]: https://docs.ton.org/develop/smart-contracts/messages#message-layout
/// [TL-B notation]: https://docs.ton.org/develop/data-formats/tl-b-language
-///
+///
@name(__tact_context_get)
native context(): Context;
/// Returns the `Address` of the sender of the current message.
-///
+///
/// ```tact
/// contract MeSee {
/// receive() {
@@ -52,15 +54,17 @@ native context(): Context;
/// }
/// }
/// ```
-///
+///
/// Note: Behavior is undefined for [getter functions], because they cannot have a sender
/// nor can they send messages.
-///
-/// Tip: To reduce gas usage, prefer using this function over calling `context().sender`
+///
+/// Tip: To reduce gas usage, prefer using this function over calling `context().sender`
/// when you only need to know the sender of the message.
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#sender
+///
/// [getter functions]: https://docs.tact-lang.org/book/contracts#getter-functions
-///
+///
@name(__tact_context_get_sender)
native sender(): Address;
@@ -75,8 +79,8 @@ native sender(): Address;
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#contextreadforwardfee
-/// * https://docs.tact-lang.org/ref/core-advanced#getoriginalfwdfee
+/// * https://docs.tact-lang.org/ref/core-contextstate#contextreadforwardfee
+/// * https://docs.tact-lang.org/ref/core-gas#getoriginalfwdfee
///
asm extends fun readForwardFee(self: Context): Int {
// Only the self.raw (Context.raw) is important,
diff --git a/src/stdlib/stdlib/std/internal/contract.tact b/src/stdlib/stdlib/std/internal/contract.tact
index af5f33497..175567764 100644
--- a/src/stdlib/stdlib/std/internal/contract.tact
+++ b/src/stdlib/stdlib/std/internal/contract.tact
@@ -16,9 +16,9 @@
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-common#contracthash
-/// * https://docs.tact-lang.org/ref/core-common#newaddress
-/// * https://docs.tact-lang.org/ref/core-common#contractaddressext
+/// * https://docs.tact-lang.org/ref/core-addresses#contracthash
+/// * https://docs.tact-lang.org/ref/core-addresses#newaddress
+/// * https://docs.tact-lang.org/ref/core-addresses#contractaddressext
///
asm fun contractHash(code: Cell, data: Cell): Int {
// According to the https://docs.tact-lang.org/book/cells#cells-representation,
@@ -77,7 +77,7 @@ asm fun contractHash(code: Cell, data: Cell): Int {
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-common#contractaddressext
+/// * https://docs.tact-lang.org/ref/core-addresses#contractaddressext
/// * https://docs.tact-lang.org/book/expressions#initof
///
inline fun contractAddressExt(chain: Int, code: Cell, data: Cell): Address {
@@ -98,31 +98,31 @@ struct StateInit {
}
/// Global function. Available since Tact 1.6.1.
-///
+///
/// Efficiently compares if the given address matches the basechain address of the contract.
/// Returns true if addresses are the same, false otherwise.
-///
+///
/// ```tact
/// fun example() {
/// let init = initOf SomeContract();
/// init.hasSameBasechainAddress(sender()); // returns true if sender matches contract's basechain address
/// }
/// ```
-///
+///
/// This function provides a gas-optimized implementation compared to direct address comparison:
-///
+///
/// ```tact
/// fun example() {
/// let init = initOf SomeContract();
/// sender() == contractAddress(sender()); // less efficient approach
/// }
/// ```
-///
+///
/// Note that this function works only for basechain addresses!
-///
+///
/// See:
-/// * https://docs.tact-lang.org/ref/core-common#contractaddress
-///
+/// * https://docs.tact-lang.org/ref/core-addresses#contractaddress
+///
inline extends fun hasSameBasechainAddress(self: StateInit, sender: Address): Bool {
let senderAddress = parseStdAddress(sender.asSlice()).address;
let baseAddress = contractBasechainAddress(self);
@@ -144,8 +144,8 @@ inline extends fun hasSameBasechainAddress(self: StateInit, sender: Address): Bo
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-common#contractaddress
-/// * https://docs.tact-lang.org/ref/core-common#contractaddressext
+/// * https://docs.tact-lang.org/ref/core-addresses#contractaddress
+/// * https://docs.tact-lang.org/ref/core-addresses#contractaddressext
/// * https://docs.tact-lang.org/book/expressions#initof
///
inline fun contractAddress(s: StateInit): Address {
@@ -162,7 +162,7 @@ inline fun contractAddress(s: StateInit): Address {
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-common#myaddress
+/// See: https://docs.tact-lang.org/ref/core-contextstate#myaddress
///
asm fun myAddress(): Address { MYADDR }
@@ -176,7 +176,7 @@ asm fun myAddress(): Address { MYADDR }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-common#mybalance
+/// See: https://docs.tact-lang.org/ref/core-contextstate#mybalance
///
asm fun myBalance(): Int { BALANCE FIRST }
@@ -190,7 +190,7 @@ asm fun myBalance(): Int { BALANCE FIRST }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#gasconsumed
+/// See: https://docs.tact-lang.org/ref/core-contextstate#gasconsumed
///
asm fun gasConsumed(): Int { GASCONSUMED }
@@ -204,7 +204,7 @@ asm fun gasConsumed(): Int { GASCONSUMED }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#mystoragedue
+/// See: https://docs.tact-lang.org/ref/core-contextstate#mystoragedue
///
asm fun myStorageDue(): Int { DUEPAYMENT }
@@ -222,9 +222,7 @@ asm fun myStorageDue(): Int { DUEPAYMENT }
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#getstoragefee
-/// * https://docs.tact-lang.org/ref/core-advanced#getsimplestoragefee
+/// See: https://docs.tact-lang.org/ref/core-gas#getstoragefee
///
asm fun getStorageFee(cells: Int, bits: Int, seconds: Int, isMasterchain: Bool): Int { GETSTORAGEFEE }
@@ -242,7 +240,7 @@ asm fun getStorageFee(cells: Int, bits: Int, seconds: Int, isMasterchain: Bool):
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#getcomputefee
+/// See: https://docs.tact-lang.org/ref/core-gas#getcomputefee
///
asm fun getComputeFee(gasUsed: Int, isMasterchain: Bool): Int { GETGASFEE }
@@ -261,8 +259,8 @@ asm fun getComputeFee(gasUsed: Int, isMasterchain: Bool): Int { GETGASFEE }
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#getsimplestoragefee
-/// * https://docs.tact-lang.org/ref/core-advanced#getstoragefee
+/// * https://docs.tact-lang.org/ref/core-gas#getsimplecomputefee
+/// * https://docs.tact-lang.org/ref/core-gas#getcomputefee
///
asm fun getSimpleComputeFee(gasUsed: Int, isMasterchain: Bool): Int { GETGASFEESIMPLE }
@@ -285,9 +283,9 @@ asm fun getSimpleComputeFee(gasUsed: Int, isMasterchain: Bool): Int { GETGASFEES
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#getforwardfee
-/// * https://docs.tact-lang.org/ref/core-advanced#getsimpleforwardfee
-/// * https://docs.tact-lang.org/ref/core-advanced#getoriginalfwdfee
+/// * https://docs.tact-lang.org/ref/core-gas#getforwardfee
+/// * https://docs.tact-lang.org/ref/core-gas#getsimpleforwardfee
+/// * https://docs.tact-lang.org/ref/core-gas#getoriginalfwdfee
///
asm fun getForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int { GETFORWARDFEE }
@@ -306,8 +304,8 @@ asm fun getForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int { GETFORW
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#getsimpleforwardfee
-/// * https://docs.tact-lang.org/ref/core-advanced#getforwardfee
+/// * https://docs.tact-lang.org/ref/core-gas#getsimpleforwardfee
+/// * https://docs.tact-lang.org/ref/core-gas#getforwardfee
///
asm fun getSimpleForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int { GETFORWARDFEESIMPLE }
@@ -327,9 +325,9 @@ asm fun getSimpleForwardFee(cells: Int, bits: Int, isMasterchain: Bool): Int { G
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#getoriginalfwdfee
-/// * https://docs.tact-lang.org/ref/core-advanced#getforwardfee
-/// * https://docs.tact-lang.org/ref/core-advanced#contextreadforwardfee
+/// * https://docs.tact-lang.org/ref/core-gas#getoriginalfwdfee
+/// * https://docs.tact-lang.org/ref/core-gas#getforwardfee
+/// * https://docs.tact-lang.org/ref/core-contextstate#contextreadforwardfee
///
asm fun getOriginalFwdFee(fwdFee: Int, isMasterchain: Bool): Int { GETORIGINALFWDFEE }
@@ -345,9 +343,9 @@ asm fun getOriginalFwdFee(fwdFee: Int, isMasterchain: Bool): Int { GETORIGINALFW
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#curlt
-/// * https://docs.tact-lang.org/ref/core-advanced#nativerandomize
-/// * https://docs.tact-lang.org/ref/core-advanced#nativerandomizelt
+/// * https://docs.tact-lang.org/ref/core-contextstate#curlt
+/// * https://docs.tact-lang.org/ref/core-random#nativerandomize
+/// * https://docs.tact-lang.org/ref/core-random#nativerandomizelt
///
asm fun curLt(): Int { LTIME }
@@ -361,7 +359,7 @@ asm fun curLt(): Int { LTIME }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#blocklt
+/// See: https://docs.tact-lang.org/ref/core-contextstate#blocklt
///
asm fun blockLt(): Int { BLOCKLT }
@@ -377,7 +375,7 @@ asm fun blockLt(): Int { BLOCKLT }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#setgaslimit
+/// See: https://docs.tact-lang.org/ref/core-gas#setgaslimit
///
asm fun setGasLimit(limit: Int) { SETGASLIMIT }
@@ -395,9 +393,9 @@ asm fun setGasLimit(limit: Int) { SETGASLIMIT }
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#getseed
-/// * https://docs.tact-lang.org/ref/core-advanced#setseed
-/// * https://docs.tact-lang.org/ref/core-advanced#nativerandomize
+/// * https://docs.tact-lang.org/ref/core-random#getseed
+/// * https://docs.tact-lang.org/ref/core-random#setseed
+/// * https://docs.tact-lang.org/ref/core-random#nativerandomize
///
asm fun getSeed(): Int { RANDSEED }
@@ -417,8 +415,8 @@ asm fun getSeed(): Int { RANDSEED }
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#setseed
-/// * https://docs.tact-lang.org/ref/core-advanced#getseed
+/// * https://docs.tact-lang.org/ref/core-random#setseed
+/// * https://docs.tact-lang.org/ref/core-random#getseed
///
asm fun setSeed(seed: Int) { SETRAND }
@@ -432,6 +430,6 @@ asm fun setSeed(seed: Int) { SETRAND }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#mycode
+/// See: https://docs.tact-lang.org/ref/core-contextstate#mycode
///
asm fun myCode(): Cell { MYCODE }
diff --git a/src/stdlib/stdlib/std/internal/crypto.tact b/src/stdlib/stdlib/std/internal/crypto.tact
index 1e8f583d8..8a2e016b1 100644
--- a/src/stdlib/stdlib/std/internal/crypto.tact
+++ b/src/stdlib/stdlib/std/internal/crypto.tact
@@ -8,6 +8,8 @@
/// }
/// ```
///
+/// See: https://docs.tact-lang.org/ref/core-cells#cellhash
+///
/// [SHA-256]: https://en.wikipedia.org/wiki/SHA-2#Hash_standard
/// [std-representation]: https://docs.tact-lang.org/book/cells#cells-representation
///
@@ -25,6 +27,8 @@ asm extends fun hash(self: Cell): Int { HASHCU }
/// }
/// ```
///
+/// See: https://docs.tact-lang.org/ref/core-cells#slicehash
+///
/// [SHA-256]: https://en.wikipedia.org/wiki/SHA-2#Hash_standard
/// [std-representation]: https://docs.tact-lang.org/book/cells#cells-representation
///
@@ -59,7 +63,7 @@ asm extends fun hash(self: Slice): Int { HASHSU }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-cells/#slicehashdata
+/// See: https://docs.tact-lang.org/ref/core-cells#slicehashdata
///
asm extends fun hashData(self: Slice): Int { ONE HASHEXT_SHA256 }
@@ -77,7 +81,7 @@ asm extends fun hashData(self: Slice): Int { ONE HASHEXT_SHA256 }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-cells/#stringhashdata
+/// See: https://docs.tact-lang.org/ref/core-strings#stringhashdata
///
asm extends fun hashData(self: String): Int { ONE HASHEXT_SHA256 }
@@ -119,7 +123,7 @@ asm extends fun hashData(self: String): Int { ONE HASHEXT_SHA256 }
/// NOTE: The first 10 calls of this function are very cheap regarding gas usage. However,
/// the 11th call and onward consume more than 4 thousand gas units.
///
-/// See: https://docs.tact-lang.org/ref/core-math/#checksignature
+/// See: https://docs.tact-lang.org/ref/core-crypto#checksignature
///
/// [Ed25519]: https://en.wikipedia.org/wiki/EdDSA#Ed25519
///
@@ -145,7 +149,7 @@ asm fun checkSignature(hash: Int, signature: Slice, publicKey: Int): Bool { CHKS
/// NOTE: The first 10 calls of this function are very cheap regarding gas usage. However,
/// the 11th call and onward consume more than 4 thousand gas units.
///
-/// See: https://docs.tact-lang.org/ref/core-math/#checkdatasignature
+/// See: https://docs.tact-lang.org/ref/core-crypto#checkdatasignature
///
/// [exit code 9]: https://docs.tact-lang.org/book/exit-codes#9
/// [Ed25519]: https://en.wikipedia.org/wiki/EdDSA#Ed25519
diff --git a/src/stdlib/stdlib/std/internal/debug.tact b/src/stdlib/stdlib/std/internal/debug.tact
index 87484dba7..c4bff537d 100644
--- a/src/stdlib/stdlib/std/internal/debug.tact
+++ b/src/stdlib/stdlib/std/internal/debug.tact
@@ -24,8 +24,8 @@
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-debug/#throw
-/// * https://docs.tact-lang.org/book/statements/#try-catch
+/// * https://docs.tact-lang.org/ref/core-debug#throw
+/// * https://docs.tact-lang.org/book/statements#try-catch
///
@name(throw)
native throw(code: Int);
@@ -53,8 +53,8 @@ native throw(code: Int);
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-debug/#throwif
-/// * https://docs.tact-lang.org/book/statements/#try-catch
+/// * https://docs.tact-lang.org/ref/core-debug#throwif
+/// * https://docs.tact-lang.org/book/statements#try-catch
///
@name(throw_if)
native throwIf(code: Int, condition: Bool);
@@ -84,9 +84,9 @@ native throwIf(code: Int, condition: Bool);
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-debug/#throwunless
-/// * https://docs.tact-lang.org/ref/core-debug/#require
-/// * https://docs.tact-lang.org/book/statements/#try-catch
+/// * https://docs.tact-lang.org/ref/core-debug#throwunless
+/// * https://docs.tact-lang.org/ref/core-debug#require
+/// * https://docs.tact-lang.org/book/statements#try-catch
///
@name(throw_unless)
native throwUnless(code: Int, condition: Bool);
@@ -96,8 +96,8 @@ native throwUnless(code: Int, condition: Bool);
/// Use `throw()` instead.
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-debug/#throw
-/// * https://docs.tact-lang.org/ref/core-debug/#nativethrow
+/// * https://docs.tact-lang.org/ref/core-debug#throw
+/// * https://docs.tact-lang.org/ref/core-debug#nativethrow
///
@name(throw)
native nativeThrow(code: Int);
@@ -107,8 +107,8 @@ native nativeThrow(code: Int);
/// Use `throwIf()` instead.
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-debug/#throwif
-/// * https://docs.tact-lang.org/ref/core-debug/#nativethrowif
+/// * https://docs.tact-lang.org/ref/core-debug#throwif
+/// * https://docs.tact-lang.org/ref/core-debug#nativethrowif
///
@name(throw_if)
native nativeThrowIf(code: Int, condition: Bool);
@@ -118,8 +118,8 @@ native nativeThrowIf(code: Int, condition: Bool);
/// Use `throwUnless()` instead.
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-debug/#throwunless
-/// * https://docs.tact-lang.org/ref/core-debug/#nativethrowunless
+/// * https://docs.tact-lang.org/ref/core-debug#throwunless
+/// * https://docs.tact-lang.org/ref/core-debug#nativethrowunless
///
@name(throw_unless)
native nativeThrowUnless(code: Int, condition: Bool);
diff --git a/src/stdlib/stdlib/std/internal/math.tact b/src/stdlib/stdlib/std/internal/math.tact
index 42bf68d27..48d282bc0 100644
--- a/src/stdlib/stdlib/std/internal/math.tact
+++ b/src/stdlib/stdlib/std/internal/math.tact
@@ -15,7 +15,7 @@
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#nativerandomize
+/// * https://docs.tact-lang.org/ref/core-random#nativerandomize
/// * https://docs.tact-lang.org/ref/core-random#randomint
///
asm fun nativeRandomize(x: Int) { ADDRAND }
@@ -34,9 +34,9 @@ asm fun nativeRandomize(x: Int) { ADDRAND }
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#nativerandomizelt
-/// * https://docs.tact-lang.org/ref/core-advanced#nativerandomize
-/// * https://docs.tact-lang.org/ref/core-advanced#curlt
+/// * https://docs.tact-lang.org/ref/core-random#nativerandomizelt
+/// * https://docs.tact-lang.org/ref/core-random#nativerandomize
+/// * https://docs.tact-lang.org/ref/core-contextstate#curlt
/// * https://docs.tact-lang.org/ref/core-random#randomint
///
asm fun nativeRandomizeLt() { LTIME ADDRAND }
@@ -53,8 +53,8 @@ asm fun nativeRandomizeLt() { LTIME ADDRAND }
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#nativepreparerandom
-/// * https://docs.tact-lang.org/ref/core-advanced#nativerandomizelt
+/// * https://docs.tact-lang.org/ref/core-random#nativepreparerandom
+/// * https://docs.tact-lang.org/ref/core-random#nativerandomizelt
/// * https://docs.tact-lang.org/ref/core-random#randomint
/// * https://docs.tact-lang.org/ref/core-random#random
///
@@ -182,7 +182,7 @@ asm fun abs(x: Int): Int { ABS }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-common#now
+/// See: https://docs.tact-lang.org/ref/core-contextstate#now
///
asm fun now(): Int { NOW }
diff --git a/src/stdlib/stdlib/std/internal/primitives.tact b/src/stdlib/stdlib/std/internal/primitives.tact
index b50ae7262..921e55daf 100644
--- a/src/stdlib/stdlib/std/internal/primitives.tact
+++ b/src/stdlib/stdlib/std/internal/primitives.tact
@@ -1,104 +1,107 @@
/// `Int` is the primitive 257-bit signed integer type.
-///
-/// See:
-/// * https://docs.tact-lang.org/book/types/#primitive-types
-/// * https://docs.tact-lang.org/book/integers#serialization
-///
+///
+/// See: https://docs.tact-lang.org/book/integers
+///
primitive Int;
-/// `Bool` is the classical boolean type, which can hold only two values: `true` and `false`.
+/// `Bool` is the classical boolean type, which can hold only two values: `true` and `false`.
/// It is convenient for boolean and logical operations, as well as for storing flags.
-///
-/// There are no implicit type conversions in Tact, so addition `+` of two boolean values is
+///
+/// There are no implicit type conversions in Tact, so addition `+` of two boolean values is
/// not possible. However, many comparison operators are available.
-///
-/// Persisting bools to state is very space-efficient, as they only occupy 1 bit.
-/// Storing 1000 bools in state [costs](https://ton.org/docs/develop/smart-contracts/fees#how-to-calculate-fees)
+///
+/// Persisting bools to state is very space-efficient, as they only occupy 1 bit.
+/// Storing 1000 bools in state [costs](https://ton.org/docs/develop/smart-contracts/fees#how-to-calculate-fees)
/// about 0.00072 TON per year.
-///
-/// See:
-/// * https://docs.tact-lang.org/book/types/#booleans
-///
+///
+/// See: https://docs.tact-lang.org/book/types#booleans
+///
primitive Bool;
-/// `Builder` is a cell manipulation primitive used for cell creation instructions.
-/// They are immutable just like cells and allow constructing new cells from previously
-/// stored values and cells.
-///
+/// `Builder` is a cell manipulation primitive used for cell creation instructions.
+/// They are immutable just like cells and allow constructing new cells from previously
+/// stored values and cells.
+///
/// Unlike cells, values of type `Builder` appear only on the [TVM] stack and cannot
/// be stored in persistent storage. This means, for example, that persistent storage
/// fields with type `Builder` are actually stored as cells under the hood.
-///
-/// The `Builder` type represents partially composed cells, for which fast operations
-/// to append integers, other cells, references to other cells, and many other operations
+///
+/// The `Builder` type represents partially composed cells, for which fast operations
+/// to append integers, other cells, references to other cells, and many other operations
/// are defined.
-///
+///
/// See:
-/// * https://docs.tact-lang.org/ref/core-cells/#builder
-///
+/// * https://docs.tact-lang.org/book/cells#builders
+/// * https://docs.tact-lang.org/ref/core-cells
+///
/// [TVM]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
primitive Builder;
/// `Slice` is a cell manipulation primitive used for cell parsing instructions.
-/// Unlike cells, slices are mutable and allow extraction or loading of data previously
-/// stored in cells via serialization instructions. Also unlike cells, values of type `Slice`
-/// appear only on the [TVM] stack and cannot be stored in persistent storage.
-/// This means, for example, that persistent storage fields with type `Slice` would actually
+/// Unlike cells, slices are mutable and allow extraction or loading of data previously
+/// stored in cells via serialization instructions. Also unlike cells, values of type `Slice`
+/// appear only on the [TVM] stack and cannot be stored in persistent storage.
+/// This means, for example, that persistent storage fields with type `Slice` would actually
/// be stored as cells under the hood.
///
-/// The `Slice` type represents either the remainder of a partially parsed cell or a value (subcell)
+/// The `Slice` type represents either the remainder of a partially parsed cell or a value (subcell)
/// residing inside such a cell, extracted from it by a parsing instruction.
-///
+///
/// See:
-/// * https://docs.tact-lang.org/ref/core-cells/#slice
-///
+/// * https://docs.tact-lang.org/book/cells#slices
+/// * https://docs.tact-lang.org/ref/core-cells
+///
/// [TVM]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
primitive Slice;
-/// `Cell` is a primitive and a data structure, which ordinarily consists of up to 1023 continuously
-/// laid out bits and up to 4 references (refs) to other cells. Circular references are forbidden and
+/// `Cell` is a primitive and a data structure, which ordinarily consists of up to 1023 continuously
+/// laid out bits and up to 4 references (refs) to other cells. Circular references are forbidden and
/// cannot be created by means of [TVM], which means cells can be viewed as [quadtrees]
-/// or [directed acyclic graphs (DAGs)][dag] of themselves.
-///
+/// or [directed acyclic graphs (DAGs)][dag] of themselves.
+///
/// Contract code itself is represented by a tree of cells.
///
-/// Cells and cell primitives are bit-oriented, not byte-oriented: [TVM] regards data kept in cells
-/// as sequences (strings or streams) of up to 1023 bits, not bytes. If necessary, contracts are
-/// free to use, for example, 21-bit integer fields serialized into [TVM] cells, thus using fewer
+/// Cells and cell primitives are bit-oriented, not byte-oriented: [TVM] regards data kept in cells
+/// as sequences (strings or streams) of up to 1023 bits, not bytes. If necessary, contracts are
+/// free to use, for example, 21-bit integer fields serialized into [TVM] cells, thus using fewer
/// persistent storage bytes to represent the same data.
-///
+///
/// See:
-/// * https://docs.tact-lang.org/ref/core-cells/#cell
-/// * https://docs.tact-lang.org/ref/core-cells/#cell-primitives
-///
+/// * https://docs.tact-lang.org/book/cells#cells
+/// * https://docs.tact-lang.org/ref/core-cells
+///
/// [TVM]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
/// [quadtrees]: https://en.wikipedia.org/wiki/Quadtree
/// [dag]: https://en.wikipedia.org/wiki/Directed_acyclic_graph
primitive Cell;
/// `Address` is a primitive type that represents a [smart contract address] in TON Blockchain.
-///
+///
+/// See: https://docs.tact-lang.org/book/types#primitive-types
+///
/// [smart contract address]: https://docs.ton.org/learn/overviews/addresses#address-of-smart-contract
primitive Address;
/// `String` is an immutable sequence of characters, which means that once a `String` is created,
/// it cannot be changed. Strings are useful for storing text, so they can be converted to a `Cell`
/// type to be used as message bodies.
-///
-/// To concatenate strings in a gas-efficient way, use a `StringBuilder`.
-///
+///
+/// To concatenate strings, use a `StringBuilder`.
+///
/// To use `String` literals directly, see: [String literals].
-///
+///
/// See:
+/// * https://docs.tact-lang.org/book/types#primitive-types
/// * https://docs.tact-lang.org/ref/core-strings
-///
+///
/// [String literals]: https://docs.tact-lang.org/book/expressions#string-literals
-///
+///
primitive String;
/// `StringBuilder` is a primitive used for efficient string concatenation.
-///
+///
/// See:
+/// * https://docs.tact-lang.org/book/types#primitive-types
/// * https://docs.tact-lang.org/ref/core-strings
-///
+///
primitive StringBuilder;
diff --git a/src/stdlib/stdlib/std/internal/reserve.tact b/src/stdlib/stdlib/std/internal/reserve.tact
index e08d0e83d..3c2680fc7 100644
--- a/src/stdlib/stdlib/std/internal/reserve.tact
+++ b/src/stdlib/stdlib/std/internal/reserve.tact
@@ -1,50 +1,70 @@
/// Executes the native `RAWRESERVE` instruction with the specified amount and mode.
-/// The `RAWRESERVE` instruction creates an output action to reserve a specific amount of
+/// The `RAWRESERVE` instruction creates an output action to reserve a specific amount of
/// [nanoToncoin] from the remaining balance of the account.
-///
+///
/// The `RAWRESERVE` instruction takes two arguments:
/// * `amount`: The number of [nanoToncoin] to reserve.
/// * `mode`: Determines the reservation behavior.
-///
-/// The `RAWRESERVE` instruction is roughly equivalent to creating an outbound message
-/// carrying the specified `amount` of [nanoToncoin] (or `b - amount` [nanoToncoin],
+///
+/// The `RAWRESERVE` instruction is roughly equivalent to creating an outbound message
+/// carrying the specified `amount` of [nanoToncoin] (or `b - amount` [nanoToncoin],
/// where `b` is the remaining balance) to oneself.
/// This ensures that subsequent output actions cannot spend more money than the remainder.
-///
-/// It is possible to use raw `Int` values and manually provide them for the `mode`,
-/// but for your convenience, there's a set of constants you may use to construct the
+///
+/// It is possible to use raw `Int` values and manually provide them for the `mode`,
+/// but for your convenience, there's a set of constants you may use to construct the
/// compound `mode` with ease.
-///
+///
/// NOTE: Currently, `amount` must be a non-negative integer, and `mode` must be in the
/// range `0..31`, inclusive.
-///
+///
/// Additionally, attempts to queue more than 255 reservations in one transaction throw an
/// exception with [exit code 33]: `Action list is too long`.
-///
+///
/// NOTE: This function is gas-expensive and uses 500 gas units or more.
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#nativereserve
+///
/// [exit code 33]: https://docs.tact-lang.org/book/exit-codes#33
/// [nanoToncoin]: https://docs.tact-lang.org/book/integers#nanotoncoin
asm fun nativeReserve(amount: Int, mode: Int) { RAWRESERVE }
-/// Reserves exactly the specified `amount` of
+/// Reserves exactly the specified `amount` of
/// [nanoToncoin](https://docs.tact-lang.org/book/integers#nanotoncoin).
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#nativereserve-base-modes
+///
const ReserveExact: Int = 0;
-/// Reserves all but the specified `amount` of
+/// Reserves all but the specified `amount` of
/// [nanoToncoin](https://docs.tact-lang.org/book/integers#nanotoncoin).
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#nativereserve-base-modes
+///
const ReserveAllExcept: Int = 1;
-/// Reserves at most the specified `amount` of
+/// Reserves at most the specified `amount` of
/// [nanoToncoin](https://docs.tact-lang.org/book/integers#nanotoncoin).
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#nativereserve-base-modes
+///
const ReserveAtMost: Int = 2;
-/// Increases the `amount` by the original balance of the current account
+/// Increases the `amount` by the original balance of the current account
/// (before the compute phase), including all extra currencies.
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#nativereserve-optional-flags
+///
const ReserveAddOriginalBalance: Int = 4;
/// Negates the `amount` value before performing the reservation.
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#nativereserve-optional-flags
+///
const ReserveInvertSign: Int = 8;
/// Bounces the transaction if the reservation fails.
+///
+/// See: https://docs.tact-lang.org/ref/core-contextstate#nativereserve-optional-flags
+///
const ReserveBounceIfActionFail: Int = 16;
diff --git a/src/stdlib/stdlib/std/internal/send.tact b/src/stdlib/stdlib/std/internal/send.tact
index fd1b900cd..bda72f529 100644
--- a/src/stdlib/stdlib/std/internal/send.tact
+++ b/src/stdlib/stdlib/std/internal/send.tact
@@ -59,7 +59,7 @@ const SendDestroyIfZero: Int = 32;
/// Struct for specifying the message parameters of the `send()` function.
///
-/// See: https://docs.tact-lang.org/ref/core-common#send
+/// See: https://docs.tact-lang.org/ref/core-send#send
///
struct SendParameters {
/// An 8-bit value that configures how to send a message, defaults to 0.
@@ -90,7 +90,7 @@ struct SendParameters {
/// Struct for specifying the message parameters of the `message()` function. Available since Tact 1.6.0.
///
-/// See: https://docs.tact-lang.org/ref/core-common#message
+/// See: https://docs.tact-lang.org/ref/core-send#message
///
struct MessageParameters {
/// An 8-bit value that configures how to send a message, defaults to 0.
@@ -117,7 +117,7 @@ struct MessageParameters {
///
/// Queues the message to be sent using the `MessageParameters` struct. Allows for cheaper non-deployment, regular messages compared to the `send()` function.
///
-/// The `MessageParameters` struct is similar to `SendParameters` struct, but without the `body` and `code` fields.
+/// The `MessageParameters` struct is similar to `SendParameters` struct, but without the `code` and `data` fields.
///
/// Attempts to queue more than 255 messages throw an exception with an exit code 33: `Action list is too long`.
///
@@ -132,7 +132,7 @@ struct MessageParameters {
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-common#message
+/// * https://docs.tact-lang.org/ref/core-send#message
/// * https://docs.tact-lang.org/book/message-mode
///
asm fun message(params: MessageParameters) {
@@ -171,7 +171,7 @@ asm fun message(params: MessageParameters) {
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-common#send
+/// See: https://docs.tact-lang.org/ref/core-send#send
///
asm fun send(params: SendParameters) {
// Instructions are grouped, and the stack states they produce as a group are shown right after.
@@ -269,7 +269,7 @@ asm fun send(params: SendParameters) {
/// Struct for specifying the deployment message parameters of the `deploy()` function. Available since Tact 1.6.0.
///
-/// See: https://docs.tact-lang.org/ref/core-common#deploy
+/// See: https://docs.tact-lang.org/ref/core-send#deploy
///
struct DeployParameters {
/// An 8-bit value that configures how to send a message, defaults to 0.
@@ -320,7 +320,7 @@ struct DeployParameters {
/// ```
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-common#deploy
+/// * https://docs.tact-lang.org/ref/core-send#deploy
/// * https://docs.tact-lang.org/book/message-mode
///
asm fun deploy(params: DeployParameters) {
@@ -414,6 +414,8 @@ asm fun deploy(params: DeployParameters) {
/// Queues an empty message to be sent with the `SendRemainingValue` mode and the `SendIgnoreErrors` flag to the destination address `to`.
/// This is the most gas-efficient way to send the remaining value from the incoming message to the given address.
///
+/// This function won't forward excess values if any other message-sending functions were called in the same receiver before.
+///
/// Attempts to queue more than 255 messages throw an exception with exit code 33: `Action list is too long`.
///
/// ```tact
@@ -433,7 +435,7 @@ asm fun deploy(params: DeployParameters) {
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-common/#cashback
+/// See: https://docs.tact-lang.org/ref/core-send#cashback
///
asm fun cashback(to: Address) {
16 PUSHINT // 0x10, i.e. 0x18 but with bounce = false
@@ -457,8 +459,8 @@ asm fun cashback(to: Address) {
/// Prefer using a much more common and user-friendly `send()` function unless you have a complex logic that can't be expressed otherwise.
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#nativesendmessage
-/// * https://docs.tact-lang.org/ref/core-common#send
+/// * https://docs.tact-lang.org/ref/core-send#nativesendmessage
+/// * https://docs.tact-lang.org/ref/core-send#send
///
asm fun nativeSendMessage(cell: Cell, mode: Int) { SENDRAWMSG }
@@ -469,8 +471,8 @@ asm fun nativeSendMessage(cell: Cell, mode: Int) { SENDRAWMSG }
/// Attempts to queue more than 255 messages throw an exception with an exit code 33: `Action list is too long`.
///
/// See:
-/// * https://docs.tact-lang.org/ref/core-advanced#nativesendmessagereturnforwardfee
-/// * https://docs.tact-lang.org/ref/core-advanced#nativesendmessage
+/// * https://docs.tact-lang.org/ref/core-send#nativesendmessagereturnforwardfee
+/// * https://docs.tact-lang.org/ref/core-send#nativesendmessage
///
asm fun nativeSendMessageReturnForwardFee(msg: Cell, mode: Int): Int { SENDMSG }
@@ -488,7 +490,7 @@ asm fun nativeSendMessageReturnForwardFee(msg: Cell, mode: Int): Int { SENDMSG }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-common#emit
+/// See: https://docs.tact-lang.org/ref/core-send#emit
///
inline fun emit(body: Cell) {
// ext_out_msg_info$11 src:MsgAddressInt dest:MsgAddressExt created_lt:uint64 created_at:uint32
@@ -520,7 +522,7 @@ inline fun emit(body: Cell) {
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#acceptmessage
+/// See: https://docs.tact-lang.org/ref/core-gas#acceptmessage
///
asm fun acceptMessage() { ACCEPT }
@@ -535,6 +537,6 @@ asm fun acceptMessage() { ACCEPT }
/// }
/// ```
///
-/// See: https://docs.tact-lang.org/ref/core-advanced#commit
+/// See: https://docs.tact-lang.org/ref/core-contextstate#commit
///
asm fun commit() { COMMIT }
diff --git a/src/stdlib/stdlib/std/internal/text.tact b/src/stdlib/stdlib/std/internal/text.tact
index b2ff82e96..3fc045502 100644
--- a/src/stdlib/stdlib/std/internal/text.tact
+++ b/src/stdlib/stdlib/std/internal/text.tact
@@ -5,23 +5,22 @@
/// Global function.
///
/// Creates and returns an empty `StringBuilder`.
-///
+///
/// ```tact
/// fun example(): String {
/// let fizz: StringBuilder = beginString();
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-strings#beginstring
///
@name(__tact_string_builder_start_string)
native beginString(): StringBuilder;
/// Global function.
///
-/// Creates and returns an empty `StringBuilder` for building a comment string, which prefixes
-/// the resulting `String` with four null bytes. This format is used for passing text comments
+/// Creates and returns an empty `StringBuilder` for building a comment string, which prefixes
+/// the resulting `String` with four null bytes. This format is used for passing text comments
/// as message bodies.
///
/// ```tact
@@ -30,16 +29,15 @@ native beginString(): StringBuilder;
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-strings#begincomment
///
@name(__tact_string_builder_start_comment)
native beginComment(): StringBuilder;
/// Global function.
///
-/// Creates and returns an empty `StringBuilder` for building a tail string, which prefixes
-/// the resulting `String` with a single null byte. This format is used in various standards
+/// Creates and returns an empty `StringBuilder` for building a tail string, which prefixes
+/// the resulting `String` with a single null byte. This format is used in various standards
/// such as NFT or Jetton.
///
/// ```tact
@@ -48,15 +46,14 @@ native beginComment(): StringBuilder;
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-strings#begintailstring
///
@name(__tact_string_builder_start_tail_string)
native beginTailString(): StringBuilder;
/// Global function.
///
-/// Creates and returns a new `StringBuilder` from an existing `StringBuilder` `b`. Useful when
+/// Creates and returns a new `StringBuilder` from an existing `StringBuilder` `b`. Useful when
/// you need to serialize an existing `String` to a `Cell` along with other data.
///
/// ```tact
@@ -65,8 +62,7 @@ native beginTailString(): StringBuilder;
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-strings#beginstringfrombuilder
///
@name(__tact_string_builder_start)
native beginStringFromBuilder(b: Builder): StringBuilder;
@@ -83,16 +79,15 @@ native beginStringFromBuilder(b: Builder): StringBuilder;
/// fizz.append("Tact!");
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#stringbuilderappend
///
@name(__tact_string_builder_append)
extends mutates native append(self: StringBuilder, s: String);
/// Extension function for the `StringBuilder` type.
///
-/// Returns a new `StringBuilder` after concatenating it with a `String` `s`. It can be chained,
+/// Returns a new `StringBuilder` after concatenating it with a `String` `s`. It can be chained,
/// unlike `StringBuilder.append()`.
///
/// ```tact
@@ -104,8 +99,7 @@ extends mutates native append(self: StringBuilder, s: String);
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-strings#stringbuilderconcat
///
@name(__tact_string_builder_append_not_mut)
extends native concat(self: StringBuilder, s: String): StringBuilder;
@@ -113,7 +107,7 @@ extends native concat(self: StringBuilder, s: String): StringBuilder;
/// Extension function for the `StringBuilder` type.
///
/// Returns an assembled `Cell` from a `StringBuilder`.
-///
+///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
///
/// ```tact
@@ -123,8 +117,7 @@ extends native concat(self: StringBuilder, s: String): StringBuilder;
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-strings#stringbuildertocell
///
@name(__tact_string_builder_end)
extends native toCell(self: StringBuilder): Cell;
@@ -132,7 +125,7 @@ extends native toCell(self: StringBuilder): Cell;
/// Extension function for the `StringBuilder` type.
///
/// Returns a built `String` from a `StringBuilder`.
-///
+///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
///
/// ```tact
@@ -141,9 +134,8 @@ extends native toCell(self: StringBuilder): Cell;
/// let buzz: String = fizz.toString();
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#stringbuildertostring
///
@name(__tact_string_builder_end_slice)
extends native toString(self: StringBuilder): String;
@@ -152,7 +144,7 @@ extends native toString(self: StringBuilder): String;
///
/// Returns an assembled `Cell` as a `Slice` from a `StringBuilder`.
/// An alias to `self.toCell().asSlice()`.
-///
+///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
///
/// ```tact
@@ -165,8 +157,7 @@ extends native toString(self: StringBuilder): String;
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-strings#stringbuildertoslice
///
@name(__tact_string_builder_end_slice)
extends native toSlice(self: StringBuilder): Slice;
@@ -178,21 +169,20 @@ extends native toSlice(self: StringBuilder): Slice;
/// Extension function for the `Int` type.
///
/// Returns a `String` from an `Int` value.
-///
+///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
-///
+///
/// ```tact
/// fun example() {
/// let fizz: String = (84 - 42).toString();
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#inttostring
///
asm extends fun toString(self: Int): String {
// x
-
+
<{
// x
NEWC // x b
@@ -213,7 +203,7 @@ asm extends fun toString(self: Int): String {
<{
// b x
- 10 PUSHINT DIVMOD // b x/10 x%10
+ 10 PUSHINT DIVMOD // b x/10 x%10
48 ADDCONST // b x/10 (x%10+48)
s2 s2 s0 XC2PU ISZERO // (x%10+48) b x/10 x/10==0?
}>CONT UNTIL
@@ -231,20 +221,19 @@ asm extends fun toString(self: Int): String {
/// Extension function for the `Int` type.
///
/// Returns a `String` from an `Int` value using a [fixed-point representation] of a fractional
-/// number, where `self` is the significant part of the number and `digits` is the number
+/// number, where `self` is the significant part of the number and `digits` is the number
/// of digits in the fractional part.
-///
+///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
-///
+///
/// ```tact
/// fun example() {
/// let fizz: String = (42).toFloatString(9); // "0.000000042"
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#inttofloatstring
+///
/// [fixed-point representation]: https://en.wikipedia.org/wiki/Fixed-point_arithmetic
asm extends fun toFloatString(self: Int, digits: Int): String {
// x digits
@@ -285,7 +274,7 @@ asm extends fun toFloatString(self: Int, digits: Int): String {
<{
// b x
- 10 PUSHINT DIVMOD // b x/10 x%10
+ 10 PUSHINT DIVMOD // b x/10 x%10
48 ADDCONST // b x/10 (x%10+48)
s2 s2 s0 XC2PU ISZERO // (x%10+48) b x/10 x/10==0?
}>CONT UNTIL
@@ -312,7 +301,7 @@ asm extends fun toFloatString(self: Int, digits: Int): String {
// digits "left" right
ZERO // digits "left" right 0
SWAP // digits "left" 0 right
-
+
<{
// digits "left" i right
DUP // digits "left" i right right
@@ -339,7 +328,7 @@ asm extends fun toFloatString(self: Int, digits: Int): String {
<{
// b x
- 10 PUSHINT DIVMOD // b x/10 x%10
+ 10 PUSHINT DIVMOD // b x/10 x%10
48 ADDCONST // b x/10 (x%10+48)
s2 s2 s0 XC2PU ISZERO // (x%10+48) b x/10 x/10==0?
}>CONT UNTIL
@@ -378,54 +367,52 @@ asm extends fun toFloatString(self: Int, digits: Int): String {
}
/// Extension function for the `Int` type.
-///
-/// Returns a `String` from an `Int` value using a [fixed-point representation] of a fractional number.
+///
+/// Returns a `String` from an `Int` value using a [fixed-point representation] of a fractional number.
/// An alias to `self.toFloatString(9)`.
-///
+///
/// This is used to represent [nanoToncoin] `Int` values using strings.
-///
+///
/// ```tact
/// fun example() {
/// let nanotons: Int = 42;
/// let fizz: String = nanotons.toCoinsString();
/// let buzz: String = nanotons.toFloatString(9);
-///
+///
/// fizz == buzz; // true, both store "0.000000042"
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#inttocoinsstring
+///
/// [fixed-point representation]: https://en.wikipedia.org/wiki/Fixed-point_arithmetic
/// [nanoToncoin]: https://docs.tact-lang.org/book/integers#nanotoncoin
-///
+///
inline extends fun toCoinsString(self: Int): String {
return self.toFloatString(9);
}
/// Extension function for the `String` type.
-///
+///
/// Returns a `Cell` from a `String` by prefixing the latter with four null bytes.
/// This format is used for passing text comments as message bodies.
-///
+///
/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
-///
+///
/// ```tact
/// fun example() {
/// let s: String = "When life gives you lemons, call them 'yellow oranges' and sell them for double the price.";
/// let fizz: Cell = s.asComment();
-///
+///
/// let b: StringBuilder = beginComment();
/// b.append(s);
/// let buzz: Cell = b.toCell();
-///
+///
/// fizz == buzz; // true
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#stringascomment
///
extends fun asComment(self: String): Cell {
let b: StringBuilder = beginComment();
@@ -435,74 +422,65 @@ extends fun asComment(self: String): Cell {
/// Extension function for the `String` type.
///
-/// Returns a `Slice` from a `String` by attempting to pack all of its bits into a continuous
-/// list of cells, each referencing the next one and opening them all for future parsing.
+/// Casts the `String` back to the underlying `Slice` and returns it. The inverse of `Slice.asString()`.
///
-/// Note that there's no indication of how many bytes a particular character could take in the
-/// `Slice` or how deep the list of references is going to be, so use this function only if
-/// you know what you're doing.
-///
/// ```tact
/// fun example() {
/// let s: String = "It's alive! It's alive!!!";
/// let fizz: Slice = s.asSlice();
/// let buzz: Slice = s.asSlice().asString().asSlice();
-///
-/// fizz == buzz; // true, but be careful as it's not always the case
+///
+/// fizz == buzz; // true
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#stringasslice
+///
///
@name(__tact_str_to_slice)
extends native asSlice(self: String): Slice;
/// Extension function for the `Slice` type.
-///
-/// Returns a `String` from a `Slice` by attempting to load all of its bits without
-/// looking for its references, if any.
-///
-/// Note that this function doesn't look at the references at all and truncates its
-/// output to 1023 bits, so use it only if you know what you're doing.
-///
+///
+/// Casts the `Slice` to a `String` and returns it. The inverse of `String.asSlice()`.
+///
/// ```tact
/// fun example() {
/// let s: String = "Keep your Slices close, but your Strings closer.";
/// let fizz: String = s;
/// let buzz: String = s.asSlice().asString();
-///
-/// fizz == buzz; // true, but be careful as it's not always the case
+///
+/// fizz == buzz; // true
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#sliceasstring
+///
@name(__tact_slice_to_str)
extends native asString(self: Slice): String;
/// Extension function for the `Slice` type.
-///
+///
/// Returns a new `Slice` from the decoded [base64] `Slice`.
-///
-/// Note that this function is limited and only takes the first 1023 bits of data from
-/// the given `Slice`, without throwing an exception if the `Slice` has more data
+///
+/// Note that this function is limited and only takes the first 1023 bits of data from
+/// the given `Slice`, without throwing an exception if the `Slice` has more data
/// (i.e., when it has any references).
-///
-/// If the given `Slice` contains characters not from the base64 set, an exception with
+///
+/// If the given `Slice` contains characters not from the base64 set, an exception with
/// [exit code 134] will be thrown: `Invalid argument`.
-///
+///
+/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
+///
/// ```tact
/// fun example() {
/// let s: Slice = "SSBhbSBHcm9vdC4=".asSlice();
/// let fizz: Slice = s.fromBase64();
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
-///
+///
+/// See: https://docs.tact-lang.org/ref/core-strings#stringfrombase64
+///
/// [exit code 134]: https://docs.tact-lang.org/book/exit-codes#134
/// [base64]: https://en.wikipedia.org/wiki/Base64
inline extends fun fromBase64(self: String): Slice {
@@ -510,29 +488,30 @@ inline extends fun fromBase64(self: String): Slice {
}
/// Extension function for the `String` type.
-///
+///
/// Returns a `Slice` from the decoded [base64] `String`.
/// An alias to `self.asSlice().fromBase64()`.
-///
-/// Note that this function is limited and only takes the first 1023 bits of data from
+///
+/// Note that this function is limited and only takes the first 1023 bits of data from
/// the given `String`, without throwing an exception when the `String` is larger
/// (i.e., contains more than 1023 bits of data).
-///
-/// If the given `String` contains characters not from the base64 set, an exception with
+///
+/// If the given `String` contains characters not from the base64 set, an exception with
/// [exit code 134] will be thrown: `Invalid argument`.
-///
+///
+/// NOTE: **Gas expensive!** This function uses 500 gas units or more.
+///
/// ```tact
/// fun example() {
/// let s: String = "SGVyZSdzIEpvaG5ueSE=";
/// let fizz: Slice = s.fromBase64();
/// let buzz: Slice = s.asSlice().fromBase64();
-///
+///
/// fizz == buzz; // true
/// }
/// ```
-///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+///
+/// See: https://docs.tact-lang.org/ref/core-cells#slicefrombase64
///
/// [exit code 134]: https://docs.tact-lang.org/book/exit-codes#134
/// [base64]: https://en.wikipedia.org/wiki/Base64
@@ -586,8 +565,7 @@ extends fun fromBase64(self: Slice): Slice {
/// }
/// ```
///
-/// See:
-/// * https://docs.tact-lang.org/ref/core-strings/
+/// See: https://docs.tact-lang.org/ref/core-addresses#addresstostring
///
@name(__tact_address_to_user_friendly)
extends native toString(self: Address): String;