Socket
Socket
Sign inDemoInstall

deso-protocol

Package Overview
Dependencies
Maintainers
3
Versions
225
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

deso-protocol - npm Package Compare versions

Comparing version 1.1.15 to 2.0.0-beta.0

18

package.json
{
"name": "deso-protocol",
"version": "1.1.15",
"version": "2.0.0-beta.0",
"license": "MIT",

@@ -8,8 +8,2 @@ "description": "Client side typescript/javascript SDK for building web3 applications for the DeSo blockchain.",

"types": "./src/index.d.ts",
"scripts": {
"build": "tsc",
"test": "jest",
"prepare": "husky install",
"precommit": "lint-staged && npm run test"
},
"keywords": [

@@ -32,3 +26,3 @@ "blockchain",

"lint-staged": {
"{libs,apps}/**/*.{js,jsx,ts,tsx}": [
"src/**/*.{js,jsx,ts,tsx}": [
"eslint --fix",

@@ -44,3 +38,2 @@ "prettier --write"

"@noble/secp256k1": "^1.7.1",
"@types/elliptic": "^6.4.14",
"bs58": "^5.0.0",

@@ -51,8 +44,15 @@ "ethers": "^5.6.6",

"devDependencies": {
"@types/elliptic": "^6.4.14",
"@types/jest": "^29.5.1",
"@types/jsonwebtoken": "^9.0.1",
"@types/node": "^18.16.1",
"@typescript-eslint/eslint-plugin": "^5.59.1",
"@typescript-eslint/parser": "^5.59.2",
"bs58check": "^3.0.1",
"elliptic": "^6.5.4",
"eslint": "^8.39.0",
"eslint-config-standard-with-typescript": "^34.0.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^15.7.0",
"eslint-plugin-promise": "^6.1.1",
"husky": "^8.0.0",

@@ -59,0 +59,0 @@ "jest": "^29.5.0",

@@ -63,3 +63,3 @@ # deso-protocol

```ts
import { identity } from "deso-protocol";
import { identity } from 'deso-protocol';

@@ -107,3 +107,3 @@ // Subscribe to identity state changes (user login/logout, permissions updated,

// if you have a more complex use case.
const tx = await axios.post("https://node.deso.org/api/v0/submit-post");
const tx = await axios.post('https://node.deso.org/api/v0/submit-post');
const submittedTx = await identity.signAndSubmit(tx);

@@ -115,3 +115,3 @@

const postTransaction = await axios.post(
"https://node.deso.org/api/v0/submit-post"
'https://node.deso.org/api/v0/submit-post'
);

@@ -169,3 +169,3 @@ const signedTx = await identity.signTx(postTransaction.TransactionHex);

```ts
import { getUsersStateless, getPostsStateless } from "deso-protocol";
import { getUsersStateless, getPostsStateless } from 'deso-protocol';

@@ -189,3 +189,3 @@ const users = await getUsersStateless({

```ts
import { submitPost } from "deso-protocol";
import { submitPost } from 'deso-protocol';

@@ -195,3 +195,3 @@ const txInfo = submitPost({

BodyObj: {
Body: "My first post on DeSo!",
Body: 'My first post on DeSo!',
ImageURLs: [],

@@ -205,1 +205,35 @@ VideoURLs: [],

See an exhaustive list of the available transaction construction functions [here](https://github.com/deso-protocol/deso-js/tree/main/src/transactions)
## Contributing
Pull requests are welcome!
### Setup
- Clone this repo
```sh
git clone ...
cd deso-js
```
### Useful workflows
- Run the test suite
```sh
npm run test
```
- Link local changes into another project
```sh
# in the deso-js root directory run
npm run link
# navigate to your project's root
cd $your_project_root_dir
# create symlink in node_modules that points to your local copy of deso-protocol
npm link deso-protocol
```

@@ -276,31 +276,2 @@ import { ec } from 'elliptic';

}
export declare enum TxnString {
TxnStringUnset = "UNSET",
TxnStringBlockReward = "BLOCK_REWARD",
TxnStringBasicTransfer = "BASIC_TRANSFER",
TxnStringBitcoinExchange = "BITCOIN_EXCHANGE",
TxnStringPrivateMessage = "PRIVATE_MESSAGE",
TxnStringSubmitPost = "SUBMIT_POST",
TxnStringUpdateProfile = "UPDATE_PROFILE",
TxnStringUpdateBitcoinUSDExchangeRate = "UPDATE_BITCOIN_USD_EXCHANGE_RATE",
TxnStringFollow = "FOLLOW",
TxnStringLike = "LIKE",
TxnStringCreatorCoin = "CREATOR_COIN",
TxnStringSwapIdentity = "SWAP_IDENTITY",
TxnStringUpdateGlobalParams = "UPDATE_GLOBAL_PARAMS",
TxnStringCreatorCoinTransfer = "CREATOR_COIN_TRANSFER",
TxnStringCreateNFT = "CREATE_NFT",
TxnStringUpdateNFT = "UPDATE_NFT",
TxnStringAcceptNFTBid = "ACCEPT_NFT_BID",
TxnStringNFTBid = "NFT_BID",
TxnStringNFTTransfer = "NFT_TRANSFER",
TxnStringAcceptNFTTransfer = "ACCEPT_NFT_TRANSFER",
TxnStringBurnNFT = "BURN_NFT",
TxnStringAuthorizeDerivedKey = "AUTHORIZE_DERIVED_KEY",
TxnStringMessagingGroup = "MESSAGING_GROUP",
TxnStringDAOCoin = "DAO_COIN",
TxnStringDAOCoinTransfer = "DAO_COIN_TRANSFER",
TxnStringDAOCoinLimitOrder = "DAO_COIN_LIMIT_ORDER",
TxnStringUndefined = "TXN_UNDEFINED"
}
export interface MetaMaskInitResponse {

@@ -307,0 +278,0 @@ derivedKeyPair: ec.KeyPair;

@@ -72,32 +72,2 @@ export var DeSoNetwork;

})(DAOCoinLimitOrderOperationTypeString || (DAOCoinLimitOrderOperationTypeString = {}));
export var TxnString;
(function (TxnString) {
TxnString["TxnStringUnset"] = "UNSET";
TxnString["TxnStringBlockReward"] = "BLOCK_REWARD";
TxnString["TxnStringBasicTransfer"] = "BASIC_TRANSFER";
TxnString["TxnStringBitcoinExchange"] = "BITCOIN_EXCHANGE";
TxnString["TxnStringPrivateMessage"] = "PRIVATE_MESSAGE";
TxnString["TxnStringSubmitPost"] = "SUBMIT_POST";
TxnString["TxnStringUpdateProfile"] = "UPDATE_PROFILE";
TxnString["TxnStringUpdateBitcoinUSDExchangeRate"] = "UPDATE_BITCOIN_USD_EXCHANGE_RATE";
TxnString["TxnStringFollow"] = "FOLLOW";
TxnString["TxnStringLike"] = "LIKE";
TxnString["TxnStringCreatorCoin"] = "CREATOR_COIN";
TxnString["TxnStringSwapIdentity"] = "SWAP_IDENTITY";
TxnString["TxnStringUpdateGlobalParams"] = "UPDATE_GLOBAL_PARAMS";
TxnString["TxnStringCreatorCoinTransfer"] = "CREATOR_COIN_TRANSFER";
TxnString["TxnStringCreateNFT"] = "CREATE_NFT";
TxnString["TxnStringUpdateNFT"] = "UPDATE_NFT";
TxnString["TxnStringAcceptNFTBid"] = "ACCEPT_NFT_BID";
TxnString["TxnStringNFTBid"] = "NFT_BID";
TxnString["TxnStringNFTTransfer"] = "NFT_TRANSFER";
TxnString["TxnStringAcceptNFTTransfer"] = "ACCEPT_NFT_TRANSFER";
TxnString["TxnStringBurnNFT"] = "BURN_NFT";
TxnString["TxnStringAuthorizeDerivedKey"] = "AUTHORIZE_DERIVED_KEY";
TxnString["TxnStringMessagingGroup"] = "MESSAGING_GROUP";
TxnString["TxnStringDAOCoin"] = "DAO_COIN";
TxnString["TxnStringDAOCoinTransfer"] = "DAO_COIN_TRANSFER";
TxnString["TxnStringDAOCoinLimitOrder"] = "DAO_COIN_LIMIT_ORDER";
TxnString["TxnStringUndefined"] = "TXN_UNDEFINED";
})(TxnString || (TxnString = {}));
export var MessagingGroupOperation;

@@ -109,2 +79,2 @@ (function (MessagingGroupOperation) {

})(MessagingGroupOperation || (MessagingGroupOperation = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzby10eXBlcy1jdXN0b20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC10eXBlcy9kZXNvLXR5cGVzLWN1c3RvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5SUEsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQixrQ0FBbUIsQ0FBQTtJQUNuQixrQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEI7QUFvQkQsTUFBTSxDQUFOLElBQVksK0JBS1g7QUFMRCxXQUFZLCtCQUErQjtJQUN6Qyw4Q0FBVyxDQUFBO0lBQ1gsOENBQVcsQ0FBQTtJQUNYLGdEQUFhLENBQUE7SUFDYix3REFBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsK0JBQStCLEtBQS9CLCtCQUErQixRQUsxQztBQUVELE1BQU0sQ0FBTixJQUFZLDJCQU9YO0FBUEQsV0FBWSwyQkFBMkI7SUFDckMsMENBQVcsQ0FBQTtJQUNYLDRDQUFhLENBQUE7SUFDYiw0Q0FBYSxDQUFBO0lBQ2Isa0VBQW1DLENBQUE7SUFDbkMsd0dBQXlFLENBQUE7SUFDekUsb0RBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVBXLDJCQUEyQixLQUEzQiwyQkFBMkIsUUFPdEM7QUEwQkQsTUFBTSxDQUFOLElBQVksdUJBUVg7QUFSRCxXQUFZLHVCQUF1QjtJQUNqQyxzQ0FBVyxDQUFBO0lBQ1gsNENBQWlCLENBQUE7SUFDakIsMENBQWUsQ0FBQTtJQUNmLHdEQUE2QixDQUFBO0lBQzdCLGdEQUFxQixDQUFBO0lBQ3JCLHdDQUFhLENBQUE7SUFDYixrRUFBdUMsQ0FBQTtBQUN6QyxDQUFDLEVBUlcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQVFsQztBQU9ELE1BQU0sQ0FBTixJQUFZLGVBZ0NYO0FBaENELFdBQVksZUFBZTtJQUN6QixtREFBZ0MsQ0FBQTtJQUNoQyx1REFBb0MsQ0FBQTtJQUNwQyxxREFBa0MsQ0FBQTtJQUNsQyw2Q0FBMEIsQ0FBQTtJQUMxQixtREFBZ0MsQ0FBQTtJQUNoQyxvRkFBaUUsQ0FBQTtJQUNqRSxvQ0FBaUIsQ0FBQTtJQUNqQixnQ0FBYSxDQUFBO0lBQ2IsK0NBQTRCLENBQUE7SUFDNUIsaURBQThCLENBQUE7SUFDOUIsOERBQTJDLENBQUE7SUFDM0MsZ0VBQTZDLENBQUE7SUFDN0MsMkNBQXdCLENBQUE7SUFDeEIsMkNBQXdCLENBQUE7SUFDeEIsa0RBQStCLENBQUE7SUFDL0IscUNBQWtCLENBQUE7SUFDbEIsK0NBQTRCLENBQUE7SUFDNUIsNERBQXlDLENBQUE7SUFDekMsdUNBQW9CLENBQUE7SUFDcEIsZ0VBQTZDLENBQUE7SUFDN0MscURBQWtDLENBQUE7SUFDbEMsdUNBQW9CLENBQUE7SUFDcEIsd0RBQXFDLENBQUE7SUFDckMsNkRBQTBDLENBQUE7SUFDMUMsb0VBQWlELENBQUE7SUFDakQsb0VBQWlELENBQUE7SUFDakQsb0VBQWlELENBQUE7SUFDakQsb0VBQWlELENBQUE7SUFDakQsK0NBQTRCLENBQUE7SUFDNUIsOERBQTJDLENBQUE7SUFDM0MsNkNBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQWhDVyxlQUFlLEtBQWYsZUFBZSxRQWdDMUI7QUFxQ0QsaUVBQWlFO0FBRWpFLE1BQU0sQ0FBTixJQUFZLG9DQUdYO0FBSEQsV0FBWSxvQ0FBb0M7SUFDOUMsdUZBQStDLENBQUE7SUFDL0MsdUZBQStDLENBQUE7QUFDakQsQ0FBQyxFQUhXLG9DQUFvQyxLQUFwQyxvQ0FBb0MsUUFHL0M7QUE0QkQsTUFBTSxDQUFOLElBQVksU0E0Qlg7QUE1QkQsV0FBWSxTQUFTO0lBQ25CLHFDQUF3QixDQUFBO0lBQ3hCLGtEQUFxQyxDQUFBO0lBQ3JDLHNEQUF5QyxDQUFBO0lBQ3pDLDBEQUE2QyxDQUFBO0lBQzdDLHdEQUEyQyxDQUFBO0lBQzNDLGdEQUFtQyxDQUFBO0lBQ25DLHNEQUF5QyxDQUFBO0lBQ3pDLHVGQUEwRSxDQUFBO0lBQzFFLHVDQUEwQixDQUFBO0lBQzFCLG1DQUFzQixDQUFBO0lBQ3RCLGtEQUFxQyxDQUFBO0lBQ3JDLG9EQUF1QyxDQUFBO0lBQ3ZDLGlFQUFvRCxDQUFBO0lBQ3BELG1FQUFzRCxDQUFBO0lBQ3RELDhDQUFpQyxDQUFBO0lBQ2pDLDhDQUFpQyxDQUFBO0lBQ2pDLHFEQUF3QyxDQUFBO0lBQ3hDLHdDQUEyQixDQUFBO0lBQzNCLGtEQUFxQyxDQUFBO0lBQ3JDLCtEQUFrRCxDQUFBO0lBQ2xELDBDQUE2QixDQUFBO0lBQzdCLG1FQUFzRCxDQUFBO0lBQ3RELHdEQUEyQyxDQUFBO0lBQzNDLDBDQUE2QixDQUFBO0lBQzdCLDJEQUE4QyxDQUFBO0lBQzlDLGdFQUFtRCxDQUFBO0lBQ25ELGlEQUFvQyxDQUFBO0FBQ3RDLENBQUMsRUE1QlcsU0FBUyxLQUFULFNBQVMsUUE0QnBCO0FBNkZELE1BQU0sQ0FBTixJQUFZLHVCQUlYO0FBSkQsV0FBWSx1QkFBdUI7SUFDakMscURBQTBCLENBQUE7SUFDMUIsdURBQTRCLENBQUE7SUFDNUIscURBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQUpXLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFJbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlYyB9IGZyb20gJ2VsbGlwdGljJztcbmltcG9ydCB7XG4gIERBT0NvaW5MaW1pdE9yZGVyU2ltdWxhdGVkRXhlY3V0aW9uUmVzdWx0LFxuICBNc2dEZVNvVHhuLFxuICBTdWJtaXRUcmFuc2FjdGlvblJlc3BvbnNlLFxuICBUcmFuc2FjdGlvbkZlZSxcbiAgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UsXG59IGZyb20gJy4vZGVzby10eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXBwcm92ZVJlc3BvbnNlIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHNlcnZpY2U6ICdpZGVudGl0eSc7XG4gIG1ldGhvZDogJ2FwcHJvdmUnO1xuICBwYXlsb2FkOiB7XG4gICAgdXNlcnM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgYWNjZXNzTGV2ZWw6IG51bWJlcjtcbiAgICAgICAgYWNjZXNzTGV2ZWxIbWFjOiBzdHJpbmc7XG4gICAgICAgIGJ0Y0RlcG9zaXRBZGRyZXNzOiBzdHJpbmc7XG4gICAgICAgIGVuY3J5cHRlZFNlZWRIZXg6IHN0cmluZztcbiAgICAgICAgaGFzRXh0cmFUZXh0OiBib29sZWFuO1xuICAgICAgICBuZXR3b3JrOiBzdHJpbmc7XG4gICAgICB9O1xuICAgIH07XG4gICAgc2lnbmVkVHJhbnNhY3Rpb25IZXg6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eUxvZ2luUmVzcG9uc2Uge1xuICBpZD86IHN0cmluZztcbiAgc2VydmljZTogJ2lkZW50aXR5JztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHBheWxvYWQ6IHtcbiAgICB1c2VyczogTG9naW5Vc2VycztcbiAgICBwdWJsaWNLZXlBZGRlZDogc3RyaW5nO1xuICAgIHNpZ25lZFVwOiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZEltYWdlUmVxdWVzdCB7XG4gIFVzZXJQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBKV1Q6IHN0cmluZztcbiAgZmlsZTogRmlsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRWaWRlb1JlcXVlc3Qge1xuICBVc2VyUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgSldUOiBzdHJpbmc7XG4gIGZpbGU6IEZpbGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VmlkZW9TdGF0dXNSZXF1ZXN0IHtcbiAgdmlkZW9JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZFZpZGVvUmVzcG9uc2Uge1xuICBzdHJlYW1NZWRpYUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5Vc2VyIHtcbiAgYWNjZXNzTGV2ZWw6IG51bWJlcjtcbiAgYWNjZXNzTGV2ZWxIbWFjOiBzdHJpbmc7XG4gIGJ0Y0RlcG9zaXRBZGRyZXNzOiBzdHJpbmc7XG4gIGVuY3J5cHRlZFNlZWRIZXg6IHN0cmluZztcbiAgaGFzRXh0cmFUZXh0OiBib29sZWFuO1xuICBldGhEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBuZXR3b3JrOiBzdHJpbmc7XG4gIGVuY3J5cHRlZE1lc3NhZ2luZ0tleVJhbmRvbW5lc3M/OiBzdHJpbmc7XG4gIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblVzZXJzIHtcbiAgW3VzZXI6IHN0cmluZ106IExvZ2luVXNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eUFwcHJvdmVSZXNwb25zZSB7XG4gIGlkPzogc3RyaW5nO1xuICBzZXJ2aWNlOiAnaWRlbnRpdHknO1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGF5bG9hZDoge1xuICAgIHVzZXJzOiBMb2dpblVzZXI7XG4gICAgc2lnbmVkVHJhbnNhY3Rpb25IZXg6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eUp3dFJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgc2VydmljZTogJ2lkZW50aXR5JztcbiAgcGF5bG9hZDoge1xuICAgIGp3dDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5U2lnblJlcXVlc3Qge1xuICBpZDogc3RyaW5nO1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXlsb2FkOiB7XG4gICAgYWNjZXNzTGV2ZWw6IG51bWJlcjtcbiAgICBhY2Nlc3NMZXZlbEhtYWM6IHN0cmluZztcbiAgICBlbmNyeXB0ZWRTZWVkSGV4OiBzdHJpbmc7XG4gICAgdHJhbnNhY3Rpb25IZXg/OiBzdHJpbmc7XG4gICAgc2lnbmVkVHJhbnNhY3Rpb25IZXg/OiBzdHJpbmc7XG4gICAgZW5jcnlwdGVkTWVzc2FnZT86IHtcbiAgICAgIEVuY3J5cHRlZEhleDogc3RyaW5nO1xuICAgICAgUHVibGljS2V5OiBzdHJpbmc7XG4gICAgICBJc1NlbmRlcjogYm9vbGVhbjtcbiAgICAgIExlZ2FjeTogYm9vbGVhbjtcbiAgICB9W107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RGVjcnlwdE1lc3NhZ2VzUmVxdWVzdCB7XG4gIEVuY3J5cHRlZEhleDogc3RyaW5nO1xuICBQdWJsaWNLZXk6IHN0cmluZztcbiAgSXNTZW5kZXI6IGJvb2xlYW47XG4gIExlZ2FjeTogYm9vbGVhbjtcbiAgVmVyc2lvbjogbnVtYmVyO1xuICBTZW5kZXJNZXNzYWdpbmdQdWJsaWNLZXk6IHN0cmluZztcbiAgU2VuZGVyTWVzc2FnaW5nR3JvdXBLZXlOYW1lOiBzdHJpbmc7XG4gIFJlY2lwaWVudE1lc3NhZ2luZ1B1YmxpY0tleTogc3RyaW5nO1xuICBSZWNpcGllbnRNZXNzYWdpbmdHcm91cEtleU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXREZWNyeXB0TWVzc2FnZXNSZXNwb25zZSB7XG4gIEVuY3J5cHRlZEhleDogc3RyaW5nO1xuICBQdWJsaWNLZXk6IHN0cmluZztcbiAgSXNTZW5kZXI6IGJvb2xlYW47XG4gIExlZ2FjeTogYm9vbGVhbjtcbiAgVmVyc2lvbjogbnVtYmVyO1xuICBTZW5kZXJNZXNzYWdpbmdQdWJsaWNLZXk6IHN0cmluZztcbiAgU2VuZGVyTWVzc2FnaW5nR3JvdXBLZXlOYW1lOiBzdHJpbmc7XG4gIFJlY2lwaWVudE1lc3NhZ2luZ1B1YmxpY0tleTogc3RyaW5nO1xuICBSZWNpcGllbnRNZXNzYWdpbmdHcm91cEtleU5hbWU6IHN0cmluZztcbiAgZGVjcnlwdGVkTWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBEZVNvTmV0d29yayB7XG4gIG1haW5uZXQgPSAnbWFpbm5ldCcsXG4gIHRlc3RuZXQgPSAndGVzdG5ldCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZFByaXZhdGVVc2VySW5mbyB7XG4gIGRlcml2ZWRTZWVkSGV4OiBzdHJpbmc7XG4gIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBwdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBidGNEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBldGhEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBleHBpcmF0aW9uQmxvY2s6IG51bWJlcjtcbiAgbmV0d29yazogRGVTb05ldHdvcms7XG4gIGFjY2Vzc1NpZ25hdHVyZTogc3RyaW5nO1xuICBqd3Q6IHN0cmluZztcbiAgZGVyaXZlZEp3dDogc3RyaW5nO1xuICBtZXNzYWdpbmdQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBtZXNzYWdpbmdQcml2YXRlS2V5OiBzdHJpbmc7XG4gIG1lc3NhZ2luZ0tleU5hbWU6IHN0cmluZztcbiAgbWVzc2FnaW5nS2V5U2lnbmF0dXJlOiBzdHJpbmc7XG4gIHRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdEhleDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBDcmVhdG9yQ29pbkxpbWl0T3BlcmF0aW9uU3RyaW5nIHtcbiAgQU5ZID0gJ2FueScsXG4gIEJVWSA9ICdidXknLFxuICBTRUxMID0gJ3NlbGwnLFxuICBUUkFOU0ZFUiA9ICd0cmFuc2ZlcicsXG59XG5cbmV4cG9ydCBlbnVtIERBT0NvaW5MaW1pdE9wZXJhdGlvblN0cmluZyB7XG4gIEFOWSA9ICdhbnknLFxuICBNSU5UID0gJ21pbnQnLFxuICBCVVJOID0gJ2J1cm4nLFxuICBESVNBQkxFX01JTlRJTkcgPSAnZGlzYWJsZV9taW50aW5nJyxcbiAgVVBEQVRFX1RSQU5TRkVSX1JFU1RSSUNUSU9OX1NUQVRVUyA9ICd1cGRhdGVfdHJhbnNmZXJfcmVzdHJpY3Rpb25fc3RhdHVzJyxcbiAgVFJBTlNGRVIgPSAndHJhbnNmZXInLFxufVxuXG5leHBvcnQgdHlwZSBDb2luTGltaXRPcGVyYXRpb25TdHJpbmcgPVxuICB8IERBT0NvaW5MaW1pdE9wZXJhdGlvblN0cmluZ1xuICB8IENyZWF0b3JDb2luTGltaXRPcGVyYXRpb25TdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29pbk9wZXJhdGlvbkxpbWl0TWFwPFQgZXh0ZW5kcyBDb2luTGltaXRPcGVyYXRpb25TdHJpbmc+IHtcbiAgW3B1YmxpY19rZXk6IHN0cmluZ106IE9wZXJhdGlvblRvQ291bnRNYXA8VD47XG59XG5cbmV4cG9ydCB0eXBlIE9wZXJhdGlvblRvQ291bnRNYXA8VCBleHRlbmRzIExpbWl0T3BlcmF0aW9uU3RyaW5nPiA9IHtcbiAgW29wZXJhdGlvbiBpbiBUXT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIExpbWl0T3BlcmF0aW9uU3RyaW5nID1cbiAgfCBEQU9Db2luTGltaXRPcGVyYXRpb25TdHJpbmdcbiAgfCBDcmVhdG9yQ29pbkxpbWl0T3BlcmF0aW9uU3RyaW5nXG4gIHwgTkZUTGltaXRPcGVyYXRpb25TdHJpbmc7XG5leHBvcnQgdHlwZSBDcmVhdG9yQ29pbk9wZXJhdGlvbkxpbWl0TWFwID1cbiAgQ29pbk9wZXJhdGlvbkxpbWl0TWFwPENyZWF0b3JDb2luTGltaXRPcGVyYXRpb25TdHJpbmc+O1xuZXhwb3J0IHR5cGUgREFPQ29pbk9wZXJhdGlvbkxpbWl0TWFwID1cbiAgQ29pbk9wZXJhdGlvbkxpbWl0TWFwPERBT0NvaW5MaW1pdE9wZXJhdGlvblN0cmluZz47XG5leHBvcnQgdHlwZSBEQU9Db2luTGltaXRPcmRlckxpbWl0TWFwID0ge1xuICBbYnV5aW5nX3B1YmxpY19rZXk6IHN0cmluZ106IHsgW3NlbGxpbmdfcHVibGljX2tleTogc3RyaW5nXTogbnVtYmVyIH07XG59O1xuXG5leHBvcnQgZW51bSBORlRMaW1pdE9wZXJhdGlvblN0cmluZyB7XG4gIEFOWSA9ICdhbnknLFxuICBVUERBVEUgPSAndXBkYXRlJyxcbiAgQklEID0gJ25mdF9iaWQnLFxuICBBQ0NFUFRfQklEID0gJ2FjY2VwdF9uZnRfYmlkJyxcbiAgVFJBTlNGRVIgPSAndHJhbnNmZXInLFxuICBCVVJOID0gJ2J1cm4nLFxuICBBQ0NFUFRfVFJBTlNGRVIgPSAnYWNjZXB0X25mdF90cmFuc2ZlcicsXG59XG5leHBvcnQgaW50ZXJmYWNlIE5GVE9wZXJhdGlvbkxpbWl0TWFwIHtcbiAgW3Bvc3RfaGFzaF9oZXg6IHN0cmluZ106IHtcbiAgICBbc2VyaWFsX251bWJlcjogbnVtYmVyXTogT3BlcmF0aW9uVG9Db3VudE1hcDxORlRMaW1pdE9wZXJhdGlvblN0cmluZz47XG4gIH07XG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gIEJhc2ljVHJhbnNmZXIgPSAnQkFTSUNfVFJBTlNGRVInLFxuICBCaXRjb2luRXhjaGFuZ2UgPSAnQklUQ09JTl9FWENIQU5HRScsXG4gIFByaXZhdGVNZXNzYWdlID0gJ1BSSVZBVEVfTUVTU0FHRScsXG4gIFN1Ym1pdFBvc3QgPSAnU1VCTUlUX1BPU1QnLFxuICBVcGRhdGVQcm9maWxlID0gJ1VQREFURV9QUk9GSUxFJyxcbiAgVXBkYXRlQml0Y29pblVTREV4Y2hhbmdlUmF0ZSA9ICdVUERBVEVfQklUQ09JTl9VU0RfRVhDSEFOR0VfUkFURScsXG4gIEZvbGxvdyA9ICdGT0xMT1cnLFxuICBMaWtlID0gJ0xJS0UnLFxuICBDcmVhdG9yQ29pbiA9ICdDUkVBVE9SX0NPSU4nLFxuICBTd2FwSWRlbnRpdHkgPSAnU1dBUF9JREVOVElUWScsXG4gIFVwZGF0ZUdsb2JhbFBhcmFtcyA9ICdVUERBVEVfR0xPQkFMX1BBUkFNUycsXG4gIENyZWF0b3JDb2luVHJhbnNmZXIgPSAnQ1JFQVRPUl9DT0lOX1RSQU5TRkVSJyxcbiAgQ3JlYXRlTkZUID0gJ0NSRUFURV9ORlQnLFxuICBVcGRhdGVORlQgPSAnVVBEQVRFX05GVCcsXG4gIEFjY2VwdE5GVEJpZCA9ICdBQ0NFUFRfTkZUX0JJRCcsXG4gIE5GVEJpZCA9ICdORlRfQklEJyxcbiAgTkZUVHJhbnNmZXIgPSAnTkZUX1RSQU5TRkVSJyxcbiAgQWNjZXB0TkZUVHJhbnNmZXIgPSAnQUNDRVBUX05GVF9UUkFOU0ZFUicsXG4gIEJ1cm5ORlQgPSAnQlVSTl9ORlQnLFxuICBBdXRob3JpemVEZXJpdmVkS2V5ID0gJ0FVVEhPUklaRV9ERVJJVkVEX0tFWScsXG4gIE1lc3NhZ2luZ0dyb3VwID0gJ01FU1NBR0lOR19HUk9VUCcsXG4gIERBT0NvaW4gPSAnREFPX0NPSU4nLFxuICBEQU9Db2luVHJhbnNmZXIgPSAnREFPX0NPSU5fVFJBTlNGRVInLFxuICBEQU9Db2luTGltaXRPcmRlciA9ICdEQU9fQ09JTl9MSU1JVF9PUkRFUicsXG4gIENyZWF0ZVVzZXJBc3NvY2lhdGlvbiA9ICdDUkVBVEVfVVNFUl9BU1NPQ0lBVElPTicsXG4gIERlbGV0ZVVzZXJBc3NvY2lhdGlvbiA9ICdERUxFVEVfVVNFUl9BU1NPQ0lBVElPTicsXG4gIENyZWF0ZVBvc3RBc3NvY2lhdGlvbiA9ICdDUkVBVEVfUE9TVF9BU1NPQ0lBVElPTicsXG4gIERlbGV0ZVBvc3RBc3NvY2lhdGlvbiA9ICdERUxFVEVfUE9TVF9BU1NPQ0lBVElPTicsXG4gIEFjY2Vzc0dyb3VwID0gJ0FDQ0VTU19HUk9VUCcsXG4gIEFjY2Vzc0dyb3VwTWVtYmVycyA9ICdBQ0NFU1NfR1JPVVBfTUVNQkVSUycsXG4gIE5ld01lc3NhZ2UgPSAnTkVXX01FU1NBR0UnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5RGVyaXZlUGFyYW1zIHtcbiAgY2FsbGJhY2s/OiBzdHJpbmc7XG4gIHdlYnZpZXc/OiBib29sZWFuO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlPzogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2U7XG4gIGRlcml2ZWRQdWJsaWNLZXk/OiBzdHJpbmc7XG4gIGRlbGV0ZUtleT86IGJvb2xlYW47XG4gIGV4cGlyYXRpb25EYXlzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5RGVyaXZlUXVlcnlQYXJhbXMge1xuICBjYWxsYmFjaz86IHN0cmluZztcbiAgd2Vidmlldz86IGJvb2xlYW47XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgdHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2U/OiBzdHJpbmc7XG4gIGRlcml2ZWRQdWJsaWNLZXk/OiBzdHJpbmc7XG4gIGRlbGV0ZUtleT86IGJvb2xlYW47XG4gIGV4cGlyYXRpb25EYXlzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6ZURlcml2ZWRLZXlQYXJhbXMge1xuICBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xuICBEZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG4gIEV4cGlyYXRpb25CbG9jaz86IG51bWJlcjtcbiAgRGVsZXRlS2V5OiBib29sZWFuO1xuICBEZXJpdmVkS2V5U2lnbmF0dXJlPzogYm9vbGVhbjtcbiAgVHJhbnNhY3Rpb25GZWVzOiBUcmFuc2FjdGlvbkZlZVtdIHwgbnVsbDtcbiAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IG51bWJlcjtcbiAgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2U/OiBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZTtcbiAgTWVtbz86IHN0cmluZztcbiAgQXBwTmFtZT86IHN0cmluZztcbiAgRXh0cmFEYXRhPzogeyBbazogc3RyaW5nXTogc3RyaW5nIH07XG4gIEV4cGlyYXRpb25EYXlzPzogbnVtYmVyO1xufVxuXG4vLyBUZW1wb3JhcnkgbWFudWFsIGNyZWF0aW9uIG9mIGNsYXNzZXMgZm9yIERBTyBjb2luIGxpbWl0IG9yZGVyc1xuXG5leHBvcnQgZW51bSBEQU9Db2luTGltaXRPcmRlck9wZXJhdGlvblR5cGVTdHJpbmcge1xuICBEQU9Db2luTGltaXRPcmRlck9wZXJhdGlvblR5cGVTdHJpbmdBU0sgPSAnQVNLJyxcbiAgREFPQ29pbkxpbWl0T3JkZXJPcGVyYXRpb25UeXBlU3RyaW5nQklEID0gJ0JJRCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25Db25zdHJ1Y3Rpb25SZXNwb25zZSB7XG4gIFRyYW5zYWN0aW9uSGV4OiBzdHJpbmc7XG59XG5cbi8vIGlzc3VlcyB3aXRoIHRoZSBjb252ZXJ0ZXIgbGF0ZWx5IHNvIGp1c3QgZ29pbmcgdG8gYWRkIHRoZXNlIHRvIHRoZSBjdXN0b20gdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgREFPQ29pbk1hcmtldE9yZGVyV2l0aFF1YW50aXR5UmVxdWVzdCB7XG4gIFRyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBCdXlpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIFNlbGxpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIFF1YW50aXR5VG9GaWxsOiBudW1iZXI7XG4gIE9wZXJhdGlvblR5cGU6IHN0cmluZztcbiAgRmlsbFR5cGU6IHN0cmluZztcbiAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IG51bWJlcjtcbiAgVHJhbnNhY3Rpb25GZWVzOiBUcmFuc2FjdGlvbkZlZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERBT0NvaW5MaW1pdE9yZGVyV2l0aEV4Y2hhbmdlUmF0ZUFuZFF1YW50aXR5UmVxdWVzdCB7XG4gIFRyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBCdXlpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIFNlbGxpbmdEQU9Db2luQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIEV4Y2hhbmdlUmF0ZUNvaW5zVG9TZWxsUGVyQ29pblRvQnV5OiBudW1iZXI7XG4gIFF1YW50aXR5VG9GaWxsOiBudW1iZXI7XG4gIE9wZXJhdGlvblR5cGU6IHN0cmluZztcbiAgTWluRmVlUmF0ZU5hbm9zUGVyS0I/OiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uRmVlczogVHJhbnNhY3Rpb25GZWVbXSB8IG51bGw7XG59XG5leHBvcnQgZW51bSBUeG5TdHJpbmcge1xuICBUeG5TdHJpbmdVbnNldCA9ICdVTlNFVCcsXG4gIFR4blN0cmluZ0Jsb2NrUmV3YXJkID0gJ0JMT0NLX1JFV0FSRCcsXG4gIFR4blN0cmluZ0Jhc2ljVHJhbnNmZXIgPSAnQkFTSUNfVFJBTlNGRVInLFxuICBUeG5TdHJpbmdCaXRjb2luRXhjaGFuZ2UgPSAnQklUQ09JTl9FWENIQU5HRScsXG4gIFR4blN0cmluZ1ByaXZhdGVNZXNzYWdlID0gJ1BSSVZBVEVfTUVTU0FHRScsXG4gIFR4blN0cmluZ1N1Ym1pdFBvc3QgPSAnU1VCTUlUX1BPU1QnLFxuICBUeG5TdHJpbmdVcGRhdGVQcm9maWxlID0gJ1VQREFURV9QUk9GSUxFJyxcbiAgVHhuU3RyaW5nVXBkYXRlQml0Y29pblVTREV4Y2hhbmdlUmF0ZSA9ICdVUERBVEVfQklUQ09JTl9VU0RfRVhDSEFOR0VfUkFURScsXG4gIFR4blN0cmluZ0ZvbGxvdyA9ICdGT0xMT1cnLFxuICBUeG5TdHJpbmdMaWtlID0gJ0xJS0UnLFxuICBUeG5TdHJpbmdDcmVhdG9yQ29pbiA9ICdDUkVBVE9SX0NPSU4nLFxuICBUeG5TdHJpbmdTd2FwSWRlbnRpdHkgPSAnU1dBUF9JREVOVElUWScsXG4gIFR4blN0cmluZ1VwZGF0ZUdsb2JhbFBhcmFtcyA9ICdVUERBVEVfR0xPQkFMX1BBUkFNUycsXG4gIFR4blN0cmluZ0NyZWF0b3JDb2luVHJhbnNmZXIgPSAnQ1JFQVRPUl9DT0lOX1RSQU5TRkVSJyxcbiAgVHhuU3RyaW5nQ3JlYXRlTkZUID0gJ0NSRUFURV9ORlQnLFxuICBUeG5TdHJpbmdVcGRhdGVORlQgPSAnVVBEQVRFX05GVCcsXG4gIFR4blN0cmluZ0FjY2VwdE5GVEJpZCA9ICdBQ0NFUFRfTkZUX0JJRCcsXG4gIFR4blN0cmluZ05GVEJpZCA9ICdORlRfQklEJyxcbiAgVHhuU3RyaW5nTkZUVHJhbnNmZXIgPSAnTkZUX1RSQU5TRkVSJyxcbiAgVHhuU3RyaW5nQWNjZXB0TkZUVHJhbnNmZXIgPSAnQUNDRVBUX05GVF9UUkFOU0ZFUicsXG4gIFR4blN0cmluZ0J1cm5ORlQgPSAnQlVSTl9ORlQnLFxuICBUeG5TdHJpbmdBdXRob3JpemVEZXJpdmVkS2V5ID0gJ0FVVEhPUklaRV9ERVJJVkVEX0tFWScsXG4gIFR4blN0cmluZ01lc3NhZ2luZ0dyb3VwID0gJ01FU1NBR0lOR19HUk9VUCcsXG4gIFR4blN0cmluZ0RBT0NvaW4gPSAnREFPX0NPSU4nLFxuICBUeG5TdHJpbmdEQU9Db2luVHJhbnNmZXIgPSAnREFPX0NPSU5fVFJBTlNGRVInLFxuICBUeG5TdHJpbmdEQU9Db2luTGltaXRPcmRlciA9ICdEQU9fQ09JTl9MSU1JVF9PUkRFUicsXG4gIFR4blN0cmluZ1VuZGVmaW5lZCA9ICdUWE5fVU5ERUZJTkVEJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhTWFza0luaXRSZXNwb25zZSB7XG4gIGRlcml2ZWRLZXlQYWlyOiBlYy5LZXlQYWlyO1xuICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgc3VibWlzc2lvblJlc3BvbnNlOiBTdWJtaXRUcmFuc2FjdGlvblJlc3BvbnNlO1xuICBldGhlcmV1bUFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEge1xuICBNaW5GZWVSYXRlTmFub3NQZXJLQj86IG51bWJlcjtcbiAgVHJhbnNhY3Rpb25GZWVzPzogVHJhbnNhY3Rpb25GZWVbXSB8IG51bGw7XG4gIEV4dHJhRGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCB0eXBlIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8VD4gPSBPbWl0PFxuICBULFxuICAnTWluRmVlUmF0ZU5hbm9zUGVyS0InIHwgJ1RyYW5zYWN0aW9uRmVlcycgfCAnRXh0cmFEYXRhJyB8ICdJblR1dG9yaWFsJ1xuPiAmXG4gIE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTtcblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGEgc2lnbmVkXG4gICAqIHRyYW5zYWN0aW9uIChzdWJtaXQtcG9zdCwgdXBkYXRlLXByb2ZpbGUsIGV0YykuIEl0IGRldGVybWluZXMgd2hldGhlciB0b1xuICAgKiBicm9hZGNhc3QgdGhlIHRyYW5zYWN0aW9uIHRvIHRoZSBuZXR3b3JrLiBEZWZhdWx0cyB0byB0cnVlLiBJZiBzZXQgdG9cbiAgICogZmFsc2UsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ1dCBub3Qgc2lnbmVkIG9yIHN1Ym1pdHRlZFxuICAgKiB3aGljaCBpcyB1c2VmdWwgZm9yIGNvbnN0cnVjdGluZyB0cmFuc2FjdGlvbnMgdG8gcHJldmlldyB0aGVtIHdpdGhvdXRcbiAgICogYnJvYWRjYXN0aW5nIGFzIGEgc29ydCBvZiBcImRyeS1ydW5cIi5cbiAgICovXG4gIGJyb2FkY2FzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub2RlIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8uIElmIG5vdCBwcm92aWRlZCwgZWl0aGVyIHRoZSBkZWZhdWx0IG5vZGVcbiAgICogb3IgdGhlIGNvbmZpZ3VyZWQgbm9kZSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBub2RlVVJJPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHBlcmltZW50YWwgcGFyYW0uIFdoZW4gbG9jYWxDb25zdHJ1Y3Rpb24gaXMgdHJ1ZSwgdHJhbnNhY3Rpb25zIHdpbGxcbiAgICogYmUgY29uc3RydWN0ZWQgbG9jYWxseS4gVGhpcyBvbmx5IGFwcGxpZXMgYWZ0ZXIgdGhlIGJhbGFuY2UgbW9kZWwgZm9yay5cbiAgICovXG4gIGxvY2FsQ29uc3RydWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29uc3RydWN0IHRoZSB0cmFuc2FjdGlvbiBsb2NhbGx5LlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2Ugd2l0aCB0aGUgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlXG4gICAqL1xuICBjb25zdHJ1Y3Rpb25GdW5jdGlvbj86IChcbiAgICBwYXJhbXM6IGFueSAvLyBUT0RPOiBJIGFjdHVhbGx5IHRoaW5rIHdlIHdhbnQgYW55IHRvIGJlIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGFcbiAgKSA9PiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT47XG59XG5cbmV4cG9ydCB0eXBlIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSA9IHtcbiAgVHJhbnNhY3Rpb246IE1zZ0RlU29UeG47XG4gIEZlZU5hbm9zOiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uSGV4OiBzdHJpbmc7XG4gIFR4bkhhc2hIZXg6IHN0cmluZztcbiAgVG90YWxJbnB1dE5hbm9zOiBudW1iZXI7XG4gIENoYW5nZUFtb3VudE5hbm9zOiBudW1iZXI7XG4gIFNwZW5kQW1vdW50TmFub3M6IG51bWJlcjtcbiAgVHJhbnNhY3Rpb25JREJhc2U1OENoZWNrPzogc3RyaW5nO1xuICAvLyBCdXkgb3Igc2VsbCBjcmVhdG9yIGNvaW5zIChzZXJ2ZXIgc2lkZSBvbmx5KVxuICBFeHBlY3RlZERlU29SZXR1cm5lZE5hbm9zPzogbnVtYmVyO1xuICBFeHBlY3RlZENyZWF0b3JDb2luUmV0dXJuZWROYW5vcz86IG51bWJlcjtcbiAgRm91bmRlclJld2FyZEdlbmVyYXRlZE5hbm9zPzogbnVtYmVyO1xuICAvLyBTdWJtaXRQb3N0IChzZXJ2ZXIgc2lkZSBvbmx5KVxuICBUc3RhbXBOYW5vcz86IG51bWJlcjtcbiAgUG9zdEhhc2hIZXg/OiBzdHJpbmc7XG4gIC8vIFVwZGF0ZVByb2ZpbGUgKHNlcnZlciBzaWRlIG9ubHkpXG4gIENvbXBQcm9maWxlQ3JlYXRpb25UeG5IYXNoSGV4Pzogc3RyaW5nO1xuICAvLyBEQU8gQ29pbiBMaW1pdCBPcmRlciAoc2VydmVyIHNpZGUgb25seSlcbiAgU2ltdWxhdGVkRXhlY3V0aW9uUmVzdWx0PzogREFPQ29pbkxpbWl0T3JkZXJTaW11bGF0ZWRFeGVjdXRpb25SZXN1bHQ7XG4gIC8vIENyZWF0ZS9VcGRhdGUgTkZULCBORlQgQmlkLCBBY2NlcHQgTkZUIEJpZCAoc2VydmVyIHNpZGUgb25seSlcbiAgTkZUUG9zdEhhc2hIZXg/OiBzdHJpbmc7XG4gIC8vIFVwZGF0ZSBORlQsIE5GVCBCaWQsIEFjY2VwdCBORlQgQmlkIChzZXJ2ZXIgc2lkZSBvbmx5KVxuICBTZXJpYWxOdW1iZXI/OiBudW1iZXI7XG4gIC8vIE5GVCBCaWQgKHNlcnZlciBzaWRlIG9ubHkpXG4gIFVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaz86IHN0cmluZztcbiAgLy8gTkZUIEJpZCwgQWNjZXB0IE5GVCBCaWQgKHNlcnZlciBzaWRlIG9ubHkpXG4gIEJpZEFtb3VudE5hbm9zPzogbnVtYmVyO1xuICAvLyBBY2NlcHQgTkZUIEJpZCAoc2VydmVyIHNpZGUgb25seSlcbiAgQmlkZGVyUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdpbmdHcm91cFBheWxvYWQgPSB7XG4gIG1lc3NhZ2luZ0tleVNpZ25hdHVyZTogc3RyaW5nO1xuICBlbmNyeXB0ZWRUb0FwcGxpY2F0aW9uR3JvdXBNZXNzYWdpbmdQcml2YXRlS2V5OiBzdHJpbmc7XG4gIGVuY3J5cHRlZFRvTWVtYmVyc0dyb3VwTWVzc2FnaW5nUHJpdmF0ZUtleTogc3RyaW5nW107XG4gIG1lc3NhZ2luZ1B1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIGVuY3J5cHRlZE1lc3NhZ2luZ0tleVJhbmRvbW5lc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBlbnVtIE1lc3NhZ2luZ0dyb3VwT3BlcmF0aW9uIHtcbiAgREVGQVVMVF9LRVkgPSAnRGVmYXVsdEtleScsXG4gIENSRUFURV9HUk9VUCA9ICdDcmVhdGVHcm91cCcsXG4gIEFERF9NRU1CRVJTID0gJ0FkZE1lbWJlcnMnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERBT0NvaW5FbnRyeSB7XG4gIE51bWJlck9mSG9sZGVyczogbnVtYmVyO1xuICBDb2luc0luQ2lyY3VsYXRpb25OYW5vczogc3RyaW5nO1xuICBNaW50aW5nRGlzYWJsZWQ6IGJvb2xlYW47XG4gIFRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXM6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRWaWRlb1YyUmVzcG9uc2Uge1xuICBhc3NldDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcGxheWJhY2tJZDogc3RyaW5nO1xuICB9O1xuICB0dXNFbmRwb2ludDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzby10eXBlcy1jdXN0b20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC10eXBlcy9kZXNvLXR5cGVzLWN1c3RvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5SUEsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQixrQ0FBbUIsQ0FBQTtJQUNuQixrQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEI7QUFvQkQsTUFBTSxDQUFOLElBQVksK0JBS1g7QUFMRCxXQUFZLCtCQUErQjtJQUN6Qyw4Q0FBVyxDQUFBO0lBQ1gsOENBQVcsQ0FBQTtJQUNYLGdEQUFhLENBQUE7SUFDYix3REFBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsK0JBQStCLEtBQS9CLCtCQUErQixRQUsxQztBQUVELE1BQU0sQ0FBTixJQUFZLDJCQU9YO0FBUEQsV0FBWSwyQkFBMkI7SUFDckMsMENBQVcsQ0FBQTtJQUNYLDRDQUFhLENBQUE7SUFDYiw0Q0FBYSxDQUFBO0lBQ2Isa0VBQW1DLENBQUE7SUFDbkMsd0dBQXlFLENBQUE7SUFDekUsb0RBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVBXLDJCQUEyQixLQUEzQiwyQkFBMkIsUUFPdEM7QUEwQkQsTUFBTSxDQUFOLElBQVksdUJBUVg7QUFSRCxXQUFZLHVCQUF1QjtJQUNqQyxzQ0FBVyxDQUFBO0lBQ1gsNENBQWlCLENBQUE7SUFDakIsMENBQWUsQ0FBQTtJQUNmLHdEQUE2QixDQUFBO0lBQzdCLGdEQUFxQixDQUFBO0lBQ3JCLHdDQUFhLENBQUE7SUFDYixrRUFBdUMsQ0FBQTtBQUN6QyxDQUFDLEVBUlcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQVFsQztBQU9ELE1BQU0sQ0FBTixJQUFZLGVBZ0NYO0FBaENELFdBQVksZUFBZTtJQUN6QixtREFBZ0MsQ0FBQTtJQUNoQyx1REFBb0MsQ0FBQTtJQUNwQyxxREFBa0MsQ0FBQTtJQUNsQyw2Q0FBMEIsQ0FBQTtJQUMxQixtREFBZ0MsQ0FBQTtJQUNoQyxvRkFBaUUsQ0FBQTtJQUNqRSxvQ0FBaUIsQ0FBQTtJQUNqQixnQ0FBYSxDQUFBO0lBQ2IsK0NBQTRCLENBQUE7SUFDNUIsaURBQThCLENBQUE7SUFDOUIsOERBQTJDLENBQUE7SUFDM0MsZ0VBQTZDLENBQUE7SUFDN0MsMkNBQXdCLENBQUE7SUFDeEIsMkNBQXdCLENBQUE7SUFDeEIsa0RBQStCLENBQUE7SUFDL0IscUNBQWtCLENBQUE7SUFDbEIsK0NBQTRCLENBQUE7SUFDNUIsNERBQXlDLENBQUE7SUFDekMsdUNBQW9CLENBQUE7SUFDcEIsZ0VBQTZDLENBQUE7SUFDN0MscURBQWtDLENBQUE7SUFDbEMsdUNBQW9CLENBQUE7SUFDcEIsd0RBQXFDLENBQUE7SUFDckMsNkRBQTBDLENBQUE7SUFDMUMsb0VBQWlELENBQUE7SUFDakQsb0VBQWlELENBQUE7SUFDakQsb0VBQWlELENBQUE7SUFDakQsb0VBQWlELENBQUE7SUFDakQsK0NBQTRCLENBQUE7SUFDNUIsOERBQTJDLENBQUE7SUFDM0MsNkNBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQWhDVyxlQUFlLEtBQWYsZUFBZSxRQWdDMUI7QUFxQ0QsaUVBQWlFO0FBRWpFLE1BQU0sQ0FBTixJQUFZLG9DQUdYO0FBSEQsV0FBWSxvQ0FBb0M7SUFDOUMsdUZBQStDLENBQUE7SUFDL0MsdUZBQStDLENBQUE7QUFDakQsQ0FBQyxFQUhXLG9DQUFvQyxLQUFwQyxvQ0FBb0MsUUFHL0M7QUF3SEQsTUFBTSxDQUFOLElBQVksdUJBSVg7QUFKRCxXQUFZLHVCQUF1QjtJQUNqQyxxREFBMEIsQ0FBQTtJQUMxQix1REFBNEIsQ0FBQTtJQUM1QixxREFBMEIsQ0FBQTtBQUM1QixDQUFDLEVBSlcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQUlsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVjIH0gZnJvbSAnZWxsaXB0aWMnO1xuaW1wb3J0IHtcbiAgREFPQ29pbkxpbWl0T3JkZXJTaW11bGF0ZWRFeGVjdXRpb25SZXN1bHQsXG4gIE1zZ0RlU29UeG4sXG4gIFN1Ym1pdFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIFRyYW5zYWN0aW9uRmVlLFxuICBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZSxcbn0gZnJvbSAnLi9kZXNvLXR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBHZXRBcHByb3ZlUmVzcG9uc2Uge1xuICBpZD86IHN0cmluZztcbiAgc2VydmljZTogJ2lkZW50aXR5JztcbiAgbWV0aG9kOiAnYXBwcm92ZSc7XG4gIHBheWxvYWQ6IHtcbiAgICB1c2Vyczoge1xuICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICBhY2Nlc3NMZXZlbDogbnVtYmVyO1xuICAgICAgICBhY2Nlc3NMZXZlbEhtYWM6IHN0cmluZztcbiAgICAgICAgYnRjRGVwb3NpdEFkZHJlc3M6IHN0cmluZztcbiAgICAgICAgZW5jcnlwdGVkU2VlZEhleDogc3RyaW5nO1xuICAgICAgICBoYXNFeHRyYVRleHQ6IGJvb2xlYW47XG4gICAgICAgIG5ldHdvcms6IHN0cmluZztcbiAgICAgIH07XG4gICAgfTtcbiAgICBzaWduZWRUcmFuc2FjdGlvbkhleDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5TG9naW5SZXNwb25zZSB7XG4gIGlkPzogc3RyaW5nO1xuICBzZXJ2aWNlOiAnaWRlbnRpdHknO1xuICBtZXRob2Q6IHN0cmluZztcbiAgcGF5bG9hZDoge1xuICAgIHVzZXJzOiBMb2dpblVzZXJzO1xuICAgIHB1YmxpY0tleUFkZGVkOiBzdHJpbmc7XG4gICAgc2lnbmVkVXA6IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkSW1hZ2VSZXF1ZXN0IHtcbiAgVXNlclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIEpXVDogc3RyaW5nO1xuICBmaWxlOiBGaWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZFZpZGVvUmVxdWVzdCB7XG4gIFVzZXJQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBKV1Q6IHN0cmluZztcbiAgZmlsZTogRmlsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRWaWRlb1N0YXR1c1JlcXVlc3Qge1xuICB2aWRlb0lkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkVmlkZW9SZXNwb25zZSB7XG4gIHN0cmVhbU1lZGlhSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblVzZXIge1xuICBhY2Nlc3NMZXZlbDogbnVtYmVyO1xuICBhY2Nlc3NMZXZlbEhtYWM6IHN0cmluZztcbiAgYnRjRGVwb3NpdEFkZHJlc3M6IHN0cmluZztcbiAgZW5jcnlwdGVkU2VlZEhleDogc3RyaW5nO1xuICBoYXNFeHRyYVRleHQ6IGJvb2xlYW47XG4gIGV0aERlcG9zaXRBZGRyZXNzOiBzdHJpbmc7XG4gIG5ldHdvcms6IHN0cmluZztcbiAgZW5jcnlwdGVkTWVzc2FnaW5nS2V5UmFuZG9tbmVzcz86IHN0cmluZztcbiAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luVXNlcnMge1xuICBbdXNlcjogc3RyaW5nXTogTG9naW5Vc2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5QXBwcm92ZVJlc3BvbnNlIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHNlcnZpY2U6ICdpZGVudGl0eSc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBwYXlsb2FkOiB7XG4gICAgdXNlcnM6IExvZ2luVXNlcjtcbiAgICBzaWduZWRUcmFuc2FjdGlvbkhleDogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5Snd0UmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBzZXJ2aWNlOiAnaWRlbnRpdHknO1xuICBwYXlsb2FkOiB7XG4gICAgand0OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlTaWduUmVxdWVzdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHNlcnZpY2U6IHN0cmluZztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHBheWxvYWQ6IHtcbiAgICBhY2Nlc3NMZXZlbDogbnVtYmVyO1xuICAgIGFjY2Vzc0xldmVsSG1hYzogc3RyaW5nO1xuICAgIGVuY3J5cHRlZFNlZWRIZXg6IHN0cmluZztcbiAgICB0cmFuc2FjdGlvbkhleD86IHN0cmluZztcbiAgICBzaWduZWRUcmFuc2FjdGlvbkhleD86IHN0cmluZztcbiAgICBlbmNyeXB0ZWRNZXNzYWdlPzoge1xuICAgICAgRW5jcnlwdGVkSGV4OiBzdHJpbmc7XG4gICAgICBQdWJsaWNLZXk6IHN0cmluZztcbiAgICAgIElzU2VuZGVyOiBib29sZWFuO1xuICAgICAgTGVnYWN5OiBib29sZWFuO1xuICAgIH1bXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXREZWNyeXB0TWVzc2FnZXNSZXF1ZXN0IHtcbiAgRW5jcnlwdGVkSGV4OiBzdHJpbmc7XG4gIFB1YmxpY0tleTogc3RyaW5nO1xuICBJc1NlbmRlcjogYm9vbGVhbjtcbiAgTGVnYWN5OiBib29sZWFuO1xuICBWZXJzaW9uOiBudW1iZXI7XG4gIFNlbmRlck1lc3NhZ2luZ1B1YmxpY0tleTogc3RyaW5nO1xuICBTZW5kZXJNZXNzYWdpbmdHcm91cEtleU5hbWU6IHN0cmluZztcbiAgUmVjaXBpZW50TWVzc2FnaW5nUHVibGljS2V5OiBzdHJpbmc7XG4gIFJlY2lwaWVudE1lc3NhZ2luZ0dyb3VwS2V5TmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldERlY3J5cHRNZXNzYWdlc1Jlc3BvbnNlIHtcbiAgRW5jcnlwdGVkSGV4OiBzdHJpbmc7XG4gIFB1YmxpY0tleTogc3RyaW5nO1xuICBJc1NlbmRlcjogYm9vbGVhbjtcbiAgTGVnYWN5OiBib29sZWFuO1xuICBWZXJzaW9uOiBudW1iZXI7XG4gIFNlbmRlck1lc3NhZ2luZ1B1YmxpY0tleTogc3RyaW5nO1xuICBTZW5kZXJNZXNzYWdpbmdHcm91cEtleU5hbWU6IHN0cmluZztcbiAgUmVjaXBpZW50TWVzc2FnaW5nUHVibGljS2V5OiBzdHJpbmc7XG4gIFJlY2lwaWVudE1lc3NhZ2luZ0dyb3VwS2V5TmFtZTogc3RyaW5nO1xuICBkZWNyeXB0ZWRNZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIERlU29OZXR3b3JrIHtcbiAgbWFpbm5ldCA9ICdtYWlubmV0JyxcbiAgdGVzdG5ldCA9ICd0ZXN0bmV0Jyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXJpdmVkUHJpdmF0ZVVzZXJJbmZvIHtcbiAgZGVyaXZlZFNlZWRIZXg6IHN0cmluZztcbiAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIHB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIGJ0Y0RlcG9zaXRBZGRyZXNzOiBzdHJpbmc7XG4gIGV0aERlcG9zaXRBZGRyZXNzOiBzdHJpbmc7XG4gIGV4cGlyYXRpb25CbG9jazogbnVtYmVyO1xuICBuZXR3b3JrOiBEZVNvTmV0d29yaztcbiAgYWNjZXNzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIGp3dDogc3RyaW5nO1xuICBkZXJpdmVkSnd0OiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1B1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1ByaXZhdGVLZXk6IHN0cmluZztcbiAgbWVzc2FnaW5nS2V5TmFtZTogc3RyaW5nO1xuICBtZXNzYWdpbmdLZXlTaWduYXR1cmU6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0SGV4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIENyZWF0b3JDb2luTGltaXRPcGVyYXRpb25TdHJpbmcge1xuICBBTlkgPSAnYW55JyxcbiAgQlVZID0gJ2J1eScsXG4gIFNFTEwgPSAnc2VsbCcsXG4gIFRSQU5TRkVSID0gJ3RyYW5zZmVyJyxcbn1cblxuZXhwb3J0IGVudW0gREFPQ29pbkxpbWl0T3BlcmF0aW9uU3RyaW5nIHtcbiAgQU5ZID0gJ2FueScsXG4gIE1JTlQgPSAnbWludCcsXG4gIEJVUk4gPSAnYnVybicsXG4gIERJU0FCTEVfTUlOVElORyA9ICdkaXNhYmxlX21pbnRpbmcnLFxuICBVUERBVEVfVFJBTlNGRVJfUkVTVFJJQ1RJT05fU1RBVFVTID0gJ3VwZGF0ZV90cmFuc2Zlcl9yZXN0cmljdGlvbl9zdGF0dXMnLFxuICBUUkFOU0ZFUiA9ICd0cmFuc2ZlcicsXG59XG5cbmV4cG9ydCB0eXBlIENvaW5MaW1pdE9wZXJhdGlvblN0cmluZyA9XG4gIHwgREFPQ29pbkxpbWl0T3BlcmF0aW9uU3RyaW5nXG4gIHwgQ3JlYXRvckNvaW5MaW1pdE9wZXJhdGlvblN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBDb2luT3BlcmF0aW9uTGltaXRNYXA8VCBleHRlbmRzIENvaW5MaW1pdE9wZXJhdGlvblN0cmluZz4ge1xuICBbcHVibGljX2tleTogc3RyaW5nXTogT3BlcmF0aW9uVG9Db3VudE1hcDxUPjtcbn1cblxuZXhwb3J0IHR5cGUgT3BlcmF0aW9uVG9Db3VudE1hcDxUIGV4dGVuZHMgTGltaXRPcGVyYXRpb25TdHJpbmc+ID0ge1xuICBbb3BlcmF0aW9uIGluIFRdPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTGltaXRPcGVyYXRpb25TdHJpbmcgPVxuICB8IERBT0NvaW5MaW1pdE9wZXJhdGlvblN0cmluZ1xuICB8IENyZWF0b3JDb2luTGltaXRPcGVyYXRpb25TdHJpbmdcbiAgfCBORlRMaW1pdE9wZXJhdGlvblN0cmluZztcbmV4cG9ydCB0eXBlIENyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXAgPVxuICBDb2luT3BlcmF0aW9uTGltaXRNYXA8Q3JlYXRvckNvaW5MaW1pdE9wZXJhdGlvblN0cmluZz47XG5leHBvcnQgdHlwZSBEQU9Db2luT3BlcmF0aW9uTGltaXRNYXAgPVxuICBDb2luT3BlcmF0aW9uTGltaXRNYXA8REFPQ29pbkxpbWl0T3BlcmF0aW9uU3RyaW5nPjtcbmV4cG9ydCB0eXBlIERBT0NvaW5MaW1pdE9yZGVyTGltaXRNYXAgPSB7XG4gIFtidXlpbmdfcHVibGljX2tleTogc3RyaW5nXTogeyBbc2VsbGluZ19wdWJsaWNfa2V5OiBzdHJpbmddOiBudW1iZXIgfTtcbn07XG5cbmV4cG9ydCBlbnVtIE5GVExpbWl0T3BlcmF0aW9uU3RyaW5nIHtcbiAgQU5ZID0gJ2FueScsXG4gIFVQREFURSA9ICd1cGRhdGUnLFxuICBCSUQgPSAnbmZ0X2JpZCcsXG4gIEFDQ0VQVF9CSUQgPSAnYWNjZXB0X25mdF9iaWQnLFxuICBUUkFOU0ZFUiA9ICd0cmFuc2ZlcicsXG4gIEJVUk4gPSAnYnVybicsXG4gIEFDQ0VQVF9UUkFOU0ZFUiA9ICdhY2NlcHRfbmZ0X3RyYW5zZmVyJyxcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTkZUT3BlcmF0aW9uTGltaXRNYXAge1xuICBbcG9zdF9oYXNoX2hleDogc3RyaW5nXToge1xuICAgIFtzZXJpYWxfbnVtYmVyOiBudW1iZXJdOiBPcGVyYXRpb25Ub0NvdW50TWFwPE5GVExpbWl0T3BlcmF0aW9uU3RyaW5nPjtcbiAgfTtcbn1cblxuZXhwb3J0IGVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgQmFzaWNUcmFuc2ZlciA9ICdCQVNJQ19UUkFOU0ZFUicsXG4gIEJpdGNvaW5FeGNoYW5nZSA9ICdCSVRDT0lOX0VYQ0hBTkdFJyxcbiAgUHJpdmF0ZU1lc3NhZ2UgPSAnUFJJVkFURV9NRVNTQUdFJyxcbiAgU3VibWl0UG9zdCA9ICdTVUJNSVRfUE9TVCcsXG4gIFVwZGF0ZVByb2ZpbGUgPSAnVVBEQVRFX1BST0ZJTEUnLFxuICBVcGRhdGVCaXRjb2luVVNERXhjaGFuZ2VSYXRlID0gJ1VQREFURV9CSVRDT0lOX1VTRF9FWENIQU5HRV9SQVRFJyxcbiAgRm9sbG93ID0gJ0ZPTExPVycsXG4gIExpa2UgPSAnTElLRScsXG4gIENyZWF0b3JDb2luID0gJ0NSRUFUT1JfQ09JTicsXG4gIFN3YXBJZGVudGl0eSA9ICdTV0FQX0lERU5USVRZJyxcbiAgVXBkYXRlR2xvYmFsUGFyYW1zID0gJ1VQREFURV9HTE9CQUxfUEFSQU1TJyxcbiAgQ3JlYXRvckNvaW5UcmFuc2ZlciA9ICdDUkVBVE9SX0NPSU5fVFJBTlNGRVInLFxuICBDcmVhdGVORlQgPSAnQ1JFQVRFX05GVCcsXG4gIFVwZGF0ZU5GVCA9ICdVUERBVEVfTkZUJyxcbiAgQWNjZXB0TkZUQmlkID0gJ0FDQ0VQVF9ORlRfQklEJyxcbiAgTkZUQmlkID0gJ05GVF9CSUQnLFxuICBORlRUcmFuc2ZlciA9ICdORlRfVFJBTlNGRVInLFxuICBBY2NlcHRORlRUcmFuc2ZlciA9ICdBQ0NFUFRfTkZUX1RSQU5TRkVSJyxcbiAgQnVybk5GVCA9ICdCVVJOX05GVCcsXG4gIEF1dGhvcml6ZURlcml2ZWRLZXkgPSAnQVVUSE9SSVpFX0RFUklWRURfS0VZJyxcbiAgTWVzc2FnaW5nR3JvdXAgPSAnTUVTU0FHSU5HX0dST1VQJyxcbiAgREFPQ29pbiA9ICdEQU9fQ09JTicsXG4gIERBT0NvaW5UcmFuc2ZlciA9ICdEQU9fQ09JTl9UUkFOU0ZFUicsXG4gIERBT0NvaW5MaW1pdE9yZGVyID0gJ0RBT19DT0lOX0xJTUlUX09SREVSJyxcbiAgQ3JlYXRlVXNlckFzc29jaWF0aW9uID0gJ0NSRUFURV9VU0VSX0FTU09DSUFUSU9OJyxcbiAgRGVsZXRlVXNlckFzc29jaWF0aW9uID0gJ0RFTEVURV9VU0VSX0FTU09DSUFUSU9OJyxcbiAgQ3JlYXRlUG9zdEFzc29jaWF0aW9uID0gJ0NSRUFURV9QT1NUX0FTU09DSUFUSU9OJyxcbiAgRGVsZXRlUG9zdEFzc29jaWF0aW9uID0gJ0RFTEVURV9QT1NUX0FTU09DSUFUSU9OJyxcbiAgQWNjZXNzR3JvdXAgPSAnQUNDRVNTX0dST1VQJyxcbiAgQWNjZXNzR3JvdXBNZW1iZXJzID0gJ0FDQ0VTU19HUk9VUF9NRU1CRVJTJyxcbiAgTmV3TWVzc2FnZSA9ICdORVdfTUVTU0FHRScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlEZXJpdmVQYXJhbXMge1xuICBjYWxsYmFjaz86IHN0cmluZztcbiAgd2Vidmlldz86IGJvb2xlYW47XG4gIHB1YmxpY0tleT86IHN0cmluZztcbiAgdHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2U/OiBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZTtcbiAgZGVyaXZlZFB1YmxpY0tleT86IHN0cmluZztcbiAgZGVsZXRlS2V5PzogYm9vbGVhbjtcbiAgZXhwaXJhdGlvbkRheXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlEZXJpdmVRdWVyeVBhcmFtcyB7XG4gIGNhbGxiYWNrPzogc3RyaW5nO1xuICB3ZWJ2aWV3PzogYm9vbGVhbjtcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICB0cmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZT86IHN0cmluZztcbiAgZGVyaXZlZFB1YmxpY0tleT86IHN0cmluZztcbiAgZGVsZXRlS2V5PzogYm9vbGVhbjtcbiAgZXhwaXJhdGlvbkRheXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXplRGVyaXZlZEtleVBhcmFtcyB7XG4gIE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG4gIERlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjaz86IHN0cmluZztcbiAgRXhwaXJhdGlvbkJsb2NrPzogbnVtYmVyO1xuICBEZWxldGVLZXk6IGJvb2xlYW47XG4gIERlcml2ZWRLZXlTaWduYXR1cmU/OiBib29sZWFuO1xuICBUcmFuc2FjdGlvbkZlZXM6IFRyYW5zYWN0aW9uRmVlW10gfCBudWxsO1xuICBNaW5GZWVSYXRlTmFub3NQZXJLQjogbnVtYmVyO1xuICBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZT86IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlO1xuICBNZW1vPzogc3RyaW5nO1xuICBBcHBOYW1lPzogc3RyaW5nO1xuICBFeHRyYURhdGE/OiB7IFtrOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgRXhwaXJhdGlvbkRheXM/OiBudW1iZXI7XG59XG5cbi8vIFRlbXBvcmFyeSBtYW51YWwgY3JlYXRpb24gb2YgY2xhc3NlcyBmb3IgREFPIGNvaW4gbGltaXQgb3JkZXJzXG5cbmV4cG9ydCBlbnVtIERBT0NvaW5MaW1pdE9yZGVyT3BlcmF0aW9uVHlwZVN0cmluZyB7XG4gIERBT0NvaW5MaW1pdE9yZGVyT3BlcmF0aW9uVHlwZVN0cmluZ0FTSyA9ICdBU0snLFxuICBEQU9Db2luTGltaXRPcmRlck9wZXJhdGlvblR5cGVTdHJpbmdCSUQgPSAnQklEJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkNvbnN0cnVjdGlvblJlc3BvbnNlIHtcbiAgVHJhbnNhY3Rpb25IZXg6IHN0cmluZztcbn1cblxuLy8gaXNzdWVzIHdpdGggdGhlIGNvbnZlcnRlciBsYXRlbHkgc28ganVzdCBnb2luZyB0byBhZGQgdGhlc2UgdG8gdGhlIGN1c3RvbSB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBEQU9Db2luTWFya2V0T3JkZXJXaXRoUXVhbnRpdHlSZXF1ZXN0IHtcbiAgVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIEJ1eWluZ0RBT0NvaW5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgU2VsbGluZ0RBT0NvaW5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgUXVhbnRpdHlUb0ZpbGw6IG51bWJlcjtcbiAgT3BlcmF0aW9uVHlwZTogc3RyaW5nO1xuICBGaWxsVHlwZTogc3RyaW5nO1xuICBNaW5GZWVSYXRlTmFub3NQZXJLQjogbnVtYmVyO1xuICBUcmFuc2FjdGlvbkZlZXM6IFRyYW5zYWN0aW9uRmVlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgREFPQ29pbkxpbWl0T3JkZXJXaXRoRXhjaGFuZ2VSYXRlQW5kUXVhbnRpdHlSZXF1ZXN0IHtcbiAgVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIEJ1eWluZ0RBT0NvaW5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgU2VsbGluZ0RBT0NvaW5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgRXhjaGFuZ2VSYXRlQ29pbnNUb1NlbGxQZXJDb2luVG9CdXk6IG51bWJlcjtcbiAgUXVhbnRpdHlUb0ZpbGw6IG51bWJlcjtcbiAgT3BlcmF0aW9uVHlwZTogc3RyaW5nO1xuICBNaW5GZWVSYXRlTmFub3NQZXJLQj86IG51bWJlcjtcbiAgVHJhbnNhY3Rpb25GZWVzOiBUcmFuc2FjdGlvbkZlZVtdIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhTWFza0luaXRSZXNwb25zZSB7XG4gIGRlcml2ZWRLZXlQYWlyOiBlYy5LZXlQYWlyO1xuICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgc3VibWlzc2lvblJlc3BvbnNlOiBTdWJtaXRUcmFuc2FjdGlvblJlc3BvbnNlO1xuICBldGhlcmV1bUFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEge1xuICBNaW5GZWVSYXRlTmFub3NQZXJLQj86IG51bWJlcjtcbiAgVHJhbnNhY3Rpb25GZWVzPzogVHJhbnNhY3Rpb25GZWVbXSB8IG51bGw7XG4gIEV4dHJhRGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCB0eXBlIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8VD4gPSBPbWl0PFxuICBULFxuICAnTWluRmVlUmF0ZU5hbm9zUGVyS0InIHwgJ1RyYW5zYWN0aW9uRmVlcycgfCAnRXh0cmFEYXRhJyB8ICdJblR1dG9yaWFsJ1xuPiAmXG4gIE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTtcblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGEgc2lnbmVkXG4gICAqIHRyYW5zYWN0aW9uIChzdWJtaXQtcG9zdCwgdXBkYXRlLXByb2ZpbGUsIGV0YykuIEl0IGRldGVybWluZXMgd2hldGhlciB0b1xuICAgKiBicm9hZGNhc3QgdGhlIHRyYW5zYWN0aW9uIHRvIHRoZSBuZXR3b3JrLiBEZWZhdWx0cyB0byB0cnVlLiBJZiBzZXQgdG9cbiAgICogZmFsc2UsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ1dCBub3Qgc2lnbmVkIG9yIHN1Ym1pdHRlZFxuICAgKiB3aGljaCBpcyB1c2VmdWwgZm9yIGNvbnN0cnVjdGluZyB0cmFuc2FjdGlvbnMgdG8gcHJldmlldyB0aGVtIHdpdGhvdXRcbiAgICogYnJvYWRjYXN0aW5nIGFzIGEgc29ydCBvZiBcImRyeS1ydW5cIi5cbiAgICovXG4gIGJyb2FkY2FzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub2RlIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8uIElmIG5vdCBwcm92aWRlZCwgZWl0aGVyIHRoZSBkZWZhdWx0IG5vZGVcbiAgICogb3IgdGhlIGNvbmZpZ3VyZWQgbm9kZSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBub2RlVVJJPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHBlcmltZW50YWwgcGFyYW0uIFdoZW4gbG9jYWxDb25zdHJ1Y3Rpb24gaXMgdHJ1ZSwgdHJhbnNhY3Rpb25zIHdpbGxcbiAgICogYmUgY29uc3RydWN0ZWQgbG9jYWxseS4gVGhpcyBvbmx5IGFwcGxpZXMgYWZ0ZXIgdGhlIGJhbGFuY2UgbW9kZWwgZm9yay5cbiAgICovXG4gIGxvY2FsQ29uc3RydWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29uc3RydWN0IHRoZSB0cmFuc2FjdGlvbiBsb2NhbGx5LlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2Ugd2l0aCB0aGUgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlXG4gICAqL1xuICBjb25zdHJ1Y3Rpb25GdW5jdGlvbj86IChcbiAgICBwYXJhbXM6IGFueSAvLyBUT0RPOiBJIGFjdHVhbGx5IHRoaW5rIHdlIHdhbnQgYW55IHRvIGJlIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGFcbiAgKSA9PiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT47XG59XG5cbmV4cG9ydCB0eXBlIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSA9IHtcbiAgVHJhbnNhY3Rpb246IE1zZ0RlU29UeG47XG4gIEZlZU5hbm9zOiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uSGV4OiBzdHJpbmc7XG4gIFR4bkhhc2hIZXg6IHN0cmluZztcbiAgVG90YWxJbnB1dE5hbm9zOiBudW1iZXI7XG4gIENoYW5nZUFtb3VudE5hbm9zOiBudW1iZXI7XG4gIFNwZW5kQW1vdW50TmFub3M6IG51bWJlcjtcbiAgVHJhbnNhY3Rpb25JREJhc2U1OENoZWNrPzogc3RyaW5nO1xuICAvLyBCdXkgb3Igc2VsbCBjcmVhdG9yIGNvaW5zIChzZXJ2ZXIgc2lkZSBvbmx5KVxuICBFeHBlY3RlZERlU29SZXR1cm5lZE5hbm9zPzogbnVtYmVyO1xuICBFeHBlY3RlZENyZWF0b3JDb2luUmV0dXJuZWROYW5vcz86IG51bWJlcjtcbiAgRm91bmRlclJld2FyZEdlbmVyYXRlZE5hbm9zPzogbnVtYmVyO1xuICAvLyBTdWJtaXRQb3N0IChzZXJ2ZXIgc2lkZSBvbmx5KVxuICBUc3RhbXBOYW5vcz86IG51bWJlcjtcbiAgUG9zdEhhc2hIZXg/OiBzdHJpbmc7XG4gIC8vIFVwZGF0ZVByb2ZpbGUgKHNlcnZlciBzaWRlIG9ubHkpXG4gIENvbXBQcm9maWxlQ3JlYXRpb25UeG5IYXNoSGV4Pzogc3RyaW5nO1xuICAvLyBEQU8gQ29pbiBMaW1pdCBPcmRlciAoc2VydmVyIHNpZGUgb25seSlcbiAgU2ltdWxhdGVkRXhlY3V0aW9uUmVzdWx0PzogREFPQ29pbkxpbWl0T3JkZXJTaW11bGF0ZWRFeGVjdXRpb25SZXN1bHQ7XG4gIC8vIENyZWF0ZS9VcGRhdGUgTkZULCBORlQgQmlkLCBBY2NlcHQgTkZUIEJpZCAoc2VydmVyIHNpZGUgb25seSlcbiAgTkZUUG9zdEhhc2hIZXg/OiBzdHJpbmc7XG4gIC8vIFVwZGF0ZSBORlQsIE5GVCBCaWQsIEFjY2VwdCBORlQgQmlkIChzZXJ2ZXIgc2lkZSBvbmx5KVxuICBTZXJpYWxOdW1iZXI/OiBudW1iZXI7XG4gIC8vIE5GVCBCaWQgKHNlcnZlciBzaWRlIG9ubHkpXG4gIFVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaz86IHN0cmluZztcbiAgLy8gTkZUIEJpZCwgQWNjZXB0IE5GVCBCaWQgKHNlcnZlciBzaWRlIG9ubHkpXG4gIEJpZEFtb3VudE5hbm9zPzogbnVtYmVyO1xuICAvLyBBY2NlcHQgTkZUIEJpZCAoc2VydmVyIHNpZGUgb25seSlcbiAgQmlkZGVyUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdpbmdHcm91cFBheWxvYWQgPSB7XG4gIG1lc3NhZ2luZ0tleVNpZ25hdHVyZTogc3RyaW5nO1xuICBlbmNyeXB0ZWRUb0FwcGxpY2F0aW9uR3JvdXBNZXNzYWdpbmdQcml2YXRlS2V5OiBzdHJpbmc7XG4gIGVuY3J5cHRlZFRvTWVtYmVyc0dyb3VwTWVzc2FnaW5nUHJpdmF0ZUtleTogc3RyaW5nW107XG4gIG1lc3NhZ2luZ1B1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIGVuY3J5cHRlZE1lc3NhZ2luZ0tleVJhbmRvbW5lc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBlbnVtIE1lc3NhZ2luZ0dyb3VwT3BlcmF0aW9uIHtcbiAgREVGQVVMVF9LRVkgPSAnRGVmYXVsdEtleScsXG4gIENSRUFURV9HUk9VUCA9ICdDcmVhdGVHcm91cCcsXG4gIEFERF9NRU1CRVJTID0gJ0FkZE1lbWJlcnMnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERBT0NvaW5FbnRyeSB7XG4gIE51bWJlck9mSG9sZGVyczogbnVtYmVyO1xuICBDb2luc0luQ2lyY3VsYXRpb25OYW5vczogc3RyaW5nO1xuICBNaW50aW5nRGlzYWJsZWQ6IGJvb2xlYW47XG4gIFRyYW5zZmVyUmVzdHJpY3Rpb25TdGF0dXM6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRWaWRlb1YyUmVzcG9uc2Uge1xuICBhc3NldDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcGxheWJhY2tJZDogc3RyaW5nO1xuICB9O1xuICB0dXNFbmRwb2ludDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbn1cbiJdfQ==

@@ -1,2 +0,2 @@

import { AccessGroupEntryResponse, AccessGroupMemberEntryResponse, AssociationCountsResponse, AssociationResponse, AssociationsCountResponse, CheckPartyAccessGroupsRequest, CheckPartyAccessGroupsResponse, GetAccessGroupInfoRequest, GetAccessGroupMemberRequest, GetAccessGroupsRequest, GetAccessGroupsResponse, GetAllMessagingGroupKeysRequest, GetAppStateRequest, GetAppStateResponse, GetBlockTemplateRequest, GetBlockTemplateResponse, GetBulkAccessGroupEntriesRequest, GetBulkAccessGroupEntriesResponse, GetDiamondsForPostRequest, GetDiamondsForPostResponse, GetDiamondsForPublicKeyRequest, GetDiamondsForPublicKeyResponse, GetExchangeRateResponse, GetFollowsResponse, GetFollowsStatelessRequest, GetFullTikTokURLRequest, GetFullTikTokURLResponse, GetGlobalParamsResponse, GetHodlersForPublicKeyRequest, GetHodlersForPublicKeyResponse, GetLikesForPostRequest, GetLikesForPostResponse, GetNextNFTShowcaseResponse, GetNFTBidsForNFTPostRequest, GetNFTBidsForNFTPostResponse, GetNFTBidsForUserRequest, GetNFTBidsForUserResponse, GetNFTCollectionSummaryRequest, GetNFTCollectionSummaryResponse, GetNFTEntriesForPostHashRequest, GetNFTEntriesForPostHashResponse, GetNFTsForUserRequest, GetNFTsForUserResponse, GetNFTShowcaseRequest, GetNFTShowcaseResponse, GetNotificationsCountRequest, GetNotificationsRequest, GetNotificationsResponse, GetPaginatedAccessGroupMembersRequest, GetPaginatedAccessGroupMembersResponse, GetPaginatedMessagesForDmThreadRequest, GetPaginatedMessagesForDmThreadResponse, GetPaginatedMessagesForGroupChatThreadRequest, GetPaginatedMessagesForGroupChatThreadResponse, GetPostsDiamondedBySenderForReceiverRequest, GetPostsForPublicKeyRequest, GetPostsForPublicKeyResponse, GetPostsHashHexListRequest, GetPostsHashHexListResponse, GetPostsStatelessRequest, GetPostsStatelessResponse, GetProfilesRequest, GetProfilesResponse, GetQuoteRepostsForPostRequest, GetQuoteRepostsForPostResponse, GetRepostsForPostRequest, GetRepostsForPostResponse, GetSinglePostRequest, GetSinglePostResponse, GetSingleProfileRequest, GetSingleProfileResponse, GetTransactionSpendingLimitHexStringRequest, GetTransactionSpendingLimitHexStringResponse, GetTxnRequest, GetTxnResponse, GetUserDerivedKeysRequest, GetUserDerivedKeysResponse, GetUserMessageThreadsRequest, GetUserMessageThreadsResponse, GetUserMetadataRequest, GetUserMetadataResponse, GetUsersResponse, GetUsersStatelessRequest, HotFeedPageRequest, HotFeedPageResponse, IsFolllowingPublicKeyResponse, IsFollowingPublicKeyRequest, IsHodlingPublicKeyRequest, IsHodlingPublicKeyResponse, PostAssociationQuery, PostAssociationsResponse, RegisterMessagingGroupKeyRequest, RegisterMessagingGroupKeyResponse, RequestOptions, SubmitBlockRequest, SubmitBlockResponse, TransactionSpendingLimitResponse, UserAssociationQuery, UserAssociationsResponse } from '../backend-types';
import { AccessGroupEntryResponse, AccessGroupMemberEntryResponse, APIBlockRequest, APIBlockResponse, APITransactionInfoRequest, APITransactionInfoResponse, AssociationCountsResponse, AssociationResponse, AssociationsCountResponse, CheckPartyAccessGroupsRequest, CheckPartyAccessGroupsResponse, GetAccessGroupInfoRequest, GetAccessGroupMemberRequest, GetAccessGroupsRequest, GetAccessGroupsResponse, GetAllMessagingGroupKeysRequest, GetAppStateRequest, GetAppStateResponse, GetBlockTemplateRequest, GetBlockTemplateResponse, GetBulkAccessGroupEntriesRequest, GetBulkAccessGroupEntriesResponse, GetDiamondsForPostRequest, GetDiamondsForPostResponse, GetDiamondsForPublicKeyRequest, GetDiamondsForPublicKeyResponse, GetExchangeRateResponse, GetFollowsResponse, GetFollowsStatelessRequest, GetFullTikTokURLRequest, GetFullTikTokURLResponse, GetGlobalParamsResponse, GetHodlersForPublicKeyRequest, GetHodlersForPublicKeyResponse, GetLikesForPostRequest, GetLikesForPostResponse, GetNextNFTShowcaseResponse, GetNFTBidsForNFTPostRequest, GetNFTBidsForNFTPostResponse, GetNFTBidsForUserRequest, GetNFTBidsForUserResponse, GetNFTCollectionSummaryRequest, GetNFTCollectionSummaryResponse, GetNFTEntriesForPostHashRequest, GetNFTEntriesForPostHashResponse, GetNFTsForUserRequest, GetNFTsForUserResponse, GetNFTShowcaseRequest, GetNFTShowcaseResponse, GetNotificationsCountRequest, GetNotificationsRequest, GetNotificationsResponse, GetPaginatedAccessGroupMembersRequest, GetPaginatedAccessGroupMembersResponse, GetPaginatedMessagesForDmThreadRequest, GetPaginatedMessagesForDmThreadResponse, GetPaginatedMessagesForGroupChatThreadRequest, GetPaginatedMessagesForGroupChatThreadResponse, GetPostsDiamondedBySenderForReceiverRequest, GetPostsForPublicKeyRequest, GetPostsForPublicKeyResponse, GetPostsHashHexListRequest, GetPostsHashHexListResponse, GetPostsStatelessRequest, GetPostsStatelessResponse, GetProfilesRequest, GetProfilesResponse, GetQuoteRepostsForPostRequest, GetQuoteRepostsForPostResponse, GetRepostsForPostRequest, GetRepostsForPostResponse, GetSinglePostRequest, GetSinglePostResponse, GetSingleProfileRequest, GetSingleProfileResponse, GetTransactionSpendingLimitHexStringRequest, GetTransactionSpendingLimitHexStringResponse, GetTxnRequest, GetTxnResponse, GetUserDerivedKeysRequest, GetUserDerivedKeysResponse, GetUserMessageThreadsRequest, GetUserMessageThreadsResponse, GetUserMetadataRequest, GetUserMetadataResponse, GetUsersResponse, GetUsersStatelessRequest, HotFeedPageRequest, HotFeedPageResponse, IsFolllowingPublicKeyResponse, IsFollowingPublicKeyRequest, IsHodlingPublicKeyRequest, IsHodlingPublicKeyResponse, PostAssociationQuery, PostAssociationsResponse, RegisterMessagingGroupKeyRequest, RegisterMessagingGroupKeyResponse, RequestOptions, SubmitBlockRequest, SubmitBlockResponse, TransactionSpendingLimitResponse, UserAssociationQuery, UserAssociationsResponse } from '../backend-types';
/**

@@ -170,2 +170,12 @@ * Returns a type that requires the given keys to be present in the partial.

/**
*/
export declare const getPublicKeyForUsername: (username: string, options?: RequestOptions) => Promise<string>;
/**
*/
export declare const getUsernameForPublicKey: (publicKey: string, options?: RequestOptions) => Promise<string>;
export type APITransactionInfoParams = PartialWithRequiredFields<APITransactionInfoRequest, 'TransactionIDBase58Check'> | PartialWithRequiredFields<APITransactionInfoRequest, 'PublicKeyBase58Check'>;
export declare const getTransactionInfo: (params?: Partial<APITransactionInfoParams>, options?: RequestOptions) => Promise<APITransactionInfoResponse>;
export type APIBlockParams = PartialWithRequiredFields<APIBlockRequest, 'Height'> | PartialWithRequiredFields<APIBlockRequest, 'HashHex'>;
export declare const getBlock: (params: APIBlockParams, options?: RequestOptions) => Promise<APIBlockResponse>;
/**
* https://docs.deso.org/deso-backend/api/backend-api#get-app-state

@@ -172,0 +182,0 @@ */

@@ -23,1 +23,11 @@ import { DeSoNetwork, TransactionSpendingLimitResponse } from '../backend-types';

export declare const DESO_NETWORK_TO_ETH_NETWORK: Record<DeSoNetwork, 'mainnet' | 'goerli'>;
export declare const DIAMOND_LEVEL_MAP: Readonly<{
'1': 50000;
'2': 500000;
'3': 5000000;
'4': 50000000;
'5': 500000000;
'6': 5000000000;
'7': 50000000000;
'8': 500000000000;
}>;

@@ -38,2 +38,12 @@ export const DEFAULT_IDENTITY_URI = 'https://identity.deso.org';

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRywyQkFBMkIsQ0FBQztBQUNoRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFFakQsaUJBQWlCO0FBQ2pCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDekIsaUZBQWlGLENBQUM7QUFFcEYsNEVBQTRFO0FBQzVFLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNaLHlEQUF5RDtJQUN6RCxlQUFlLEVBQUUsSUFBSSxHQUFHLEdBQUc7SUFDM0Isd0JBQXdCLEVBQUU7UUFDeEIscUJBQXFCLEVBQUUsQ0FBQztLQUN6QjtJQUNELDRCQUE0QixFQUFFLEVBQUU7SUFDaEMsd0JBQXdCLEVBQUUsRUFBRTtJQUM1QixvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHlCQUF5QixFQUFFLEVBQUU7Q0FDOUIsQ0FBQyxDQUFDO0FBRUwsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQyxPQUFPLEVBQUU7UUFDUCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDZixJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztLQUN4QjtJQUNELE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztRQUNmLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0tBQ3hCO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxlQUFlLEVBQUUscUJBQXFCO0lBQ3RDLGFBQWEsRUFBRSxtQkFBbUI7SUFDbEMsWUFBWSxFQUFFLGtCQUFrQjtDQUNqQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FHcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsUUFBUTtDQUNsQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZVNvTmV0d29yayxcbiAgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UsXG59IGZyb20gJy4uL2JhY2tlbmQtdHlwZXMnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSURFTlRJVFlfVVJJID0gJ2h0dHBzOi8vaWRlbnRpdHkuZGVzby5vcmcnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9ERV9VUkkgPSAnaHR0cHM6Ly9ibG9ja3Byb2R1Y2VyLmRlc28ub3JnJztcbmV4cG9ydCBjb25zdCBJREVOVElUWV9TRVJWSUNFX1ZBTFVFID0gJ2lkZW50aXR5JztcblxuLy8gRXJyb3IgbWVzc2FnZXNcbmV4cG9ydCBjb25zdCBOT19NT05FWV9FUlJPUiA9XG4gICdVc2VyIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBmdW5kcyBpbiB0aGVpciB3YWxsZXQgdG8gY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uJztcblxuLy8gc2luY2Ugd2UgaXNzdWUgYSBkZXJpdmVkIGtleSBhbmQgYXV0aG9yaXplIGl0IGltbWVkaWF0ZWx5IGFmdGVyIGxvZ2luIHRoZVxuLy8gZGVmYXVsdCBwZXJtaXNzaW9uIHRvIGF1dGhvcml6ZSBhIGRlcml2ZWQga2V5XG5leHBvcnQgY29uc3QgREVGQVVMVF9QRVJNSVNTSU9OUzogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UgPVxuICBPYmplY3QuZnJlZXplKHtcbiAgICAvLyBzZXQgdGhlIGxpbWl0IHZlcnkgbG93LCBqdXN0IGVub3VnaCB0byBhdXRob3JpemUgYSBrZXlcbiAgICBHbG9iYWxERVNPTGltaXQ6IDAuMDEgKiAxZTksXG4gICAgVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwOiB7XG4gICAgICBBVVRIT1JJWkVfREVSSVZFRF9LRVk6IDEsXG4gICAgfSxcbiAgICBDcmVhdG9yQ29pbk9wZXJhdGlvbkxpbWl0TWFwOiB7fSxcbiAgICBEQU9Db2luT3BlcmF0aW9uTGltaXRNYXA6IHt9LFxuICAgIE5GVE9wZXJhdGlvbkxpbWl0TWFwOiB7fSxcbiAgICBEQU9Db2luTGltaXRPcmRlckxpbWl0TWFwOiB7fSxcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBQVUJMSUNfS0VZX1BSRUZJWEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIG1haW5uZXQ6IHtcbiAgICBiaXRjb2luOiBbMHgwMF0sXG4gICAgZGVzbzogWzB4Y2QsIDB4MTQsIDB4MF0sXG4gIH0sXG4gIHRlc3RuZXQ6IHtcbiAgICBiaXRjb2luOiBbMHg2Zl0sXG4gICAgZGVzbzogWzB4MTEsIDB4YzIsIDB4MF0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IExPQ0FMX1NUT1JBR0VfS0VZUyA9IE9iamVjdC5mcmVlemUoe1xuICBhY3RpdmVQdWJsaWNLZXk6ICdkZXNvQWN0aXZlUHVibGljS2V5JyxcbiAgaWRlbnRpdHlVc2VyczogJ2Rlc29JZGVudGl0eVVzZXJzJyxcbiAgbG9naW5LZXlQYWlyOiAnZGVzb0xvZ2luS2V5UGFpcicsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFU09fTkVUV09SS19UT19FVEhfTkVUV09SSzogUmVjb3JkPFxuICBEZVNvTmV0d29yayxcbiAgJ21haW5uZXQnIHwgJ2dvZXJsaSdcbj4gPSBPYmplY3QuZnJlZXplKHtcbiAgbWFpbm5ldDogJ21haW5uZXQnLFxuICB0ZXN0bmV0OiAnZ29lcmxpJyxcbn0pO1xuIl19
export const DIAMOND_LEVEL_MAP = Object.freeze({
'1': 50000,
'2': 500000,
'3': 5000000,
'4': 50000000,
'5': 500000000,
'6': 5000000000,
'7': 50000000000,
'8': 500000000000,
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRywyQkFBMkIsQ0FBQztBQUNoRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFFakQsaUJBQWlCO0FBQ2pCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDekIsaUZBQWlGLENBQUM7QUFFcEYsNEVBQTRFO0FBQzVFLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNaLHlEQUF5RDtJQUN6RCxlQUFlLEVBQUUsSUFBSSxHQUFHLEdBQUc7SUFDM0Isd0JBQXdCLEVBQUU7UUFDeEIscUJBQXFCLEVBQUUsQ0FBQztLQUN6QjtJQUNELDRCQUE0QixFQUFFLEVBQUU7SUFDaEMsd0JBQXdCLEVBQUUsRUFBRTtJQUM1QixvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHlCQUF5QixFQUFFLEVBQUU7Q0FDOUIsQ0FBQyxDQUFDO0FBRUwsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQyxPQUFPLEVBQUU7UUFDUCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDZixJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztLQUN4QjtJQUNELE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztRQUNmLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0tBQ3hCO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxlQUFlLEVBQUUscUJBQXFCO0lBQ3RDLGFBQWEsRUFBRSxtQkFBbUI7SUFDbEMsWUFBWSxFQUFFLGtCQUFrQjtDQUNqQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FHcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsUUFBUTtDQUNsQixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdDLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLE1BQU07SUFDWCxHQUFHLEVBQUUsT0FBTztJQUNaLEdBQUcsRUFBRSxRQUFRO0lBQ2IsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsVUFBVTtJQUNmLEdBQUcsRUFBRSxXQUFXO0lBQ2hCLEdBQUcsRUFBRSxZQUFZO0NBQ2xCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlU29OZXR3b3JrLFxuICBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9JREVOVElUWV9VUkkgPSAnaHR0cHM6Ly9pZGVudGl0eS5kZXNvLm9yZyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX1VSSSA9ICdodHRwczovL2Jsb2NrcHJvZHVjZXIuZGVzby5vcmcnO1xuZXhwb3J0IGNvbnN0IElERU5USVRZX1NFUlZJQ0VfVkFMVUUgPSAnaWRlbnRpdHknO1xuXG4vLyBFcnJvciBtZXNzYWdlc1xuZXhwb3J0IGNvbnN0IE5PX01PTkVZX0VSUk9SID1cbiAgJ1VzZXIgZG9lcyBub3QgaGF2ZSBzdWZmaWNpZW50IGZ1bmRzIGluIHRoZWlyIHdhbGxldCB0byBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24nO1xuXG4vLyBzaW5jZSB3ZSBpc3N1ZSBhIGRlcml2ZWQga2V5IGFuZCBhdXRob3JpemUgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgbG9naW4gdGhlXG4vLyBkZWZhdWx0IHBlcm1pc3Npb24gdG8gYXV0aG9yaXplIGEgZGVyaXZlZCBrZXlcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BFUk1JU1NJT05TOiBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZSA9XG4gIE9iamVjdC5mcmVlemUoe1xuICAgIC8vIHNldCB0aGUgbGltaXQgdmVyeSBsb3csIGp1c3QgZW5vdWdoIHRvIGF1dGhvcml6ZSBhIGtleVxuICAgIEdsb2JhbERFU09MaW1pdDogMC4wMSAqIDFlOSxcbiAgICBUcmFuc2FjdGlvbkNvdW50TGltaXRNYXA6IHtcbiAgICAgIEFVVEhPUklaRV9ERVJJVkVEX0tFWTogMSxcbiAgICB9LFxuICAgIENyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXA6IHt9LFxuICAgIERBT0NvaW5PcGVyYXRpb25MaW1pdE1hcDoge30sXG4gICAgTkZUT3BlcmF0aW9uTGltaXRNYXA6IHt9LFxuICAgIERBT0NvaW5MaW1pdE9yZGVyTGltaXRNYXA6IHt9LFxuICB9KTtcblxuZXhwb3J0IGNvbnN0IFBVQkxJQ19LRVlfUFJFRklYRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgbWFpbm5ldDoge1xuICAgIGJpdGNvaW46IFsweDAwXSxcbiAgICBkZXNvOiBbMHhjZCwgMHgxNCwgMHgwXSxcbiAgfSxcbiAgdGVzdG5ldDoge1xuICAgIGJpdGNvaW46IFsweDZmXSxcbiAgICBkZXNvOiBbMHgxMSwgMHhjMiwgMHgwXSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgTE9DQUxfU1RPUkFHRV9LRVlTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFjdGl2ZVB1YmxpY0tleTogJ2Rlc29BY3RpdmVQdWJsaWNLZXknLFxuICBpZGVudGl0eVVzZXJzOiAnZGVzb0lkZW50aXR5VXNlcnMnLFxuICBsb2dpbktleVBhaXI6ICdkZXNvTG9naW5LZXlQYWlyJyxcbn0pO1xuXG5leHBvcnQgY29uc3QgREVTT19ORVRXT1JLX1RPX0VUSF9ORVRXT1JLOiBSZWNvcmQ8XG4gIERlU29OZXR3b3JrLFxuICAnbWFpbm5ldCcgfCAnZ29lcmxpJ1xuPiA9IE9iamVjdC5mcmVlemUoe1xuICBtYWlubmV0OiAnbWFpbm5ldCcsXG4gIHRlc3RuZXQ6ICdnb2VybGknLFxufSk7XG5cbmV4cG9ydCBjb25zdCBESUFNT05EX0xFVkVMX01BUCA9IE9iamVjdC5mcmVlemUoe1xuICAnMSc6IDUwMDAwLFxuICAnMic6IDUwMDAwMCxcbiAgJzMnOiA1MDAwMDAwLFxuICAnNCc6IDUwMDAwMDAwLFxuICAnNSc6IDUwMDAwMDAwMCxcbiAgJzYnOiA1MDAwMDAwMDAwLFxuICAnNyc6IDUwMDAwMDAwMDAwLFxuICAnOCc6IDUwMDAwMDAwMDAwMCxcbn0pO1xuIl19

@@ -1,2 +0,2 @@

import { jwtAlgorithm, KeyPair, Network } from './types';
import { KeyPair, Network, jwtAlgorithm } from './types';
export declare function concatUint8Arrays(arrays: Uint8Array[], length?: number): Uint8Array;

@@ -35,7 +35,7 @@ export declare const uvarint64ToBuf: (uint: number) => Uint8Array;

export declare const decrypt: (privateDecryptionKey: Uint8Array | string, cipherTextHex: string) => Promise<string>;
export declare const getSharedPrivateKey: (privKey: Uint8Array, pubKey: Uint8Array) => Promise<Uint8Array>;
export declare const getSharedPrivateKey: (privKey: Uint8Array, pubKey: Uint8Array) => Uint8Array;
export declare const decodePublicKey: (publicKeyBase58Check: string) => Promise<Uint8Array>;
export declare const getSharedSecret: (privKey: Uint8Array, pubKey: Uint8Array) => Promise<Uint8Array>;
export declare const getSharedSecret: (privKey: Uint8Array, pubKey: Uint8Array) => Uint8Array;
export declare const kdf: (secret: Uint8Array, outputLength: number) => Uint8Array;
export declare function deriveAccessGroupKeyPair(privateKeyHex: string, groupKeyName: string): KeyPair;
export {};

@@ -11,3 +11,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import { sha256 } from '@noble/hashes/sha256';
import { getPublicKey, getSharedSecret as nobleGetSharedSecret, Point, sign as ecSign, utils as ecUtils, } from '@noble/secp256k1';
import { Point, sign as ecSign, utils as ecUtils, getPublicKey, getSharedSecret as nobleGetSharedSecret, } from '@noble/secp256k1';
import * as bs58 from 'bs58';

@@ -157,9 +157,9 @@ import { PUBLIC_KEY_PREFIXES } from './constants';

}
export const encryptChatMessage = (senderSeedHex, recipientPublicKeyBase58Check, message) => __awaiter(void 0, void 0, void 0, function* () {
export const encryptChatMessage = (senderSeedHex, recipientPublicKeyBase58Check, message) => {
const privateKey = ecUtils.hexToBytes(senderSeedHex);
const recipientPublicKey = bs58PublicKeyToBytes(recipientPublicKeyBase58Check);
const sharedPrivateKey = yield getSharedPrivateKey(privateKey, recipientPublicKey);
const sharedPrivateKey = getSharedPrivateKey(privateKey, recipientPublicKey);
const sharedPublicKey = getPublicKey(sharedPrivateKey);
return encrypt(sharedPublicKey, message);
});
};
/**

@@ -173,6 +173,4 @@ * @param publicEncryptionKey could be in raw bytes or base58check format

const ephemPublicKey = getPublicKey(ephemPrivateKey);
const publicKeyBytes = typeof publicKey === 'string'
? yield bs58PublicKeyToBytes(publicKey)
: publicKey;
const privKey = yield getSharedPrivateKey(ephemPrivateKey, publicKeyBytes);
const publicKeyBytes = typeof publicKey === 'string' ? bs58PublicKeyToBytes(publicKey) : publicKey;
const privKey = getSharedPrivateKey(ephemPrivateKey, publicKeyBytes);
const encryptionKey = privKey.slice(0, 16);

@@ -201,3 +199,3 @@ const iv = ecUtils.randomBytes(16);

const pubKeyUncompressed = bs58PublicKeyToBytes(str);
return Uint8Array.from(Point.fromHex(ecUtils.bytesToHex(pubKeyUncompressed)).toRawBytes(true));
return Point.fromHex(ecUtils.bytesToHex(pubKeyUncompressed)).toRawBytes(true);
};

@@ -261,6 +259,6 @@ export const bs58PublicKeyToBytes = (str) => {

});
export const getSharedPrivateKey = (privKey, pubKey) => __awaiter(void 0, void 0, void 0, function* () {
const sharedSecret = yield getSharedSecret(privKey, pubKey);
export const getSharedPrivateKey = (privKey, pubKey) => {
const sharedSecret = getSharedSecret(privKey, pubKey);
return kdf(sharedSecret, 32);
});
};
export const decodePublicKey = (publicKeyBase58Check) => __awaiter(void 0, void 0, void 0, function* () {

@@ -272,3 +270,3 @@ const decoded = yield bs58PublicKeyToBytes(publicKeyBase58Check);

});
export const getSharedSecret = (privKey, pubKey) => __awaiter(void 0, void 0, void 0, function* () {
export const getSharedSecret = (privKey, pubKey) => {
// passing true to compress the public key, and then slicing off the first byte

@@ -278,3 +276,3 @@ // matches the implementation of derive in the elliptic package.

return nobleGetSharedSecret(privKey, pubKey, true).slice(1);
});
};
// taken from reference implementation in the deso chat app:

@@ -334,2 +332,2 @@ // https://github.com/deso-protocol/access-group-messaging-app/blob/cd5c237f5e5729196aac0da161d0851bde78092c/src/services/crypto-utils.service.tsx#L91

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLElBQUksb0JBQW9CLEVBQ3ZDLEtBQUssRUFDTCxJQUFJLElBQUksTUFBTSxFQUNkLEtBQUssSUFBSSxPQUFPLEdBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQW9CLEVBQUUsTUFBZTtJQUNyRSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FB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LFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNyRSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3RSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGEyNTYnO1xuaW1wb3J0IHtcbiAgZ2V0UHVibGljS2V5LFxuICBnZXRTaGFyZWRTZWNyZXQgYXMgbm9ibGVHZXRTaGFyZWRTZWNyZXQsXG4gIFBvaW50LFxuICBzaWduIGFzIGVjU2lnbixcbiAgdXRpbHMgYXMgZWNVdGlscyxcbn0gZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgUFVCTElDX0tFWV9QUkVGSVhFUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGp3dEFsZ29yaXRobSwgS2V5UGFpciwgTmV0d29yayB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25WMCB9IGZyb20gJy4vdHJhbnNhY3Rpb24tdHJhbnNjb2RlcnMnO1xuXG4vLyBCcm93c2VyIGZyaWVuZGx5IHZlcnNpb24gb2Ygbm9kZSdzIEJ1ZmZlci5jb25jYXQuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzOiBVaW50OEFycmF5W10sIGxlbmd0aD86IG51bWJlcikge1xuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBhcnJheXMucmVkdWNlKChhY2MsIGFycmF5KSA9PiBhY2MgKyBhcnJheS5sZW5ndGgsIDApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvZmZzZXQgKyBhcnJheXNbaV0ubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICByZXN1bHQuc2V0KGFycmF5c1tpXS5zbGljZSgwLCBsZW5ndGggLSBvZmZzZXQpLCBvZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQoYXJyYXlzW2ldLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCB1dmFyaW50NjRUb0J1ZiA9ICh1aW50OiBudW1iZXIpOiBVaW50OEFycmF5ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICB3aGlsZSAodWludCA+PSAweDgwKSB7XG4gICAgcmVzdWx0LnB1c2goTnVtYmVyKChCaWdJbnQodWludCkgJiBCaWdJbnQoMHhmZikpIHwgQmlnSW50KDB4ODApKSk7XG4gICAgdWludCA9IE51bWJlcihCaWdJbnQodWludCkgPj4gQmlnSW50KDcpKTtcbiAgfVxuICByZXN1bHQucHVzaCh1aW50IHwgMCk7XG5cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdCk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVmVG9VdmFyaW50NjQgPSAoYnVmZmVyOiBVaW50OEFycmF5KTogW251bWJlciwgVWludDhBcnJheV0gPT4ge1xuICBsZXQgeCA9IEJpZ0ludCgwKTtcbiAgbGV0IHMgPSBCaWdJbnQoMCk7XG5cbiAgLy8gVE9ETzogZml4IGxpbnRpbmcgZXJyb3JcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICBmb3IgKGxldCBpID0gMDsgdHJ1ZTsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGJ1ZmZlcltpXTtcblxuICAgIGlmIChpID4gOSB8fCAoaSA9PSA5ICYmIGJ5dGUgPiAxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1aW50NjQgb3ZlcmZsb3cnKTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZSA8IDB4ODApIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIE51bWJlcihCaWdJbnQoeCkgfCAoQmlnSW50KGJ5dGUpIDw8IEJpZ0ludChzKSkpLFxuICAgICAgICBidWZmZXIuc2xpY2UoaSArIDEpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICB4IHw9IEJpZ0ludChieXRlICYgMHg3ZikgPDwgQmlnSW50KHMpO1xuICAgIHMgKz0gQmlnSW50KDcpO1xuICB9XG59O1xuXG5pbnRlcmZhY2UgQmFzZTU4Q2hlY2tPcHRpb25zIHtcbiAgbmV0d29yazogTmV0d29yaztcbn1cblxuLy8gV2UgYXJlIG5vdCB1c2luZyB0aGUgbmF0aXZlIHdlYiBjcnlwdG8gQVBJIHRvIGFjdHVhbGx5IGdlbmVyYXRlIGtleXNcbi8vIGJlY2F1c2UgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VjcDI1NmsxIGN1cnZlLiBJbnN0ZWFkLCB3ZSBhcmUgdXNpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxIHdoaWNoIGlzIGEgYnJvd3NlciBmcmllbmRseVxuLy8gYWx0ZXJuYXRpdmUgdG8gdGhlIG5vZGUgZWxsaXB0aWMgcGFja2FnZSB3aGljaCBpcyBmYXIgc21hbGxlciBhbmQgb25seVxuLy8gZm9jdXNlcyBvbiBzdXBwb3J0aW5nIHRoZSBlYyBhbGdvcml0aG0gd2UgYXJlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gaGVyZS5cbi8vIElmIHRoZSB3ZWIgY3J5cHRvIEFQSSBldmVyIGFkZHMgc3VwcG9ydCBmb3Igc2VjcDI1NmsxLCB3ZSBzaG91bGQgY2hhbmdlXG4vLyB0aGlzIHRvIHVzZSBpdC5cbi8vXG4vLyBTZWUgdGhlIGZvbGxvd2luZyBmb3IgbW9yZSBpbmZvOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWJjcnlwdG8vaXNzdWVzLzgyXG4vL1xuLy8gSWYgeW91IGRvbid0IHByb3ZpZGUgYSBzZWVkLCBhIHJhbmRvbSBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHlvdSBhbmQgYVxuLy8gcmFuZG9tIGtleSBwYWlyIHdpbGwgYmUgcmV0dXJuZWQuIElmIHlvdSBkbyBwcm92aWRlIGEgc2VlZCwgaXQgc2hvdWxkIGJlIGFcbi8vIHJhbmRvbWx5IGdlbmVyYXRlZCAzMiBieXRlIHZhbHVlIChVaW50OEFycmF5IG9mIGxlbmd0aCAzMiBvciBoZXggc3RyaW5nIG9mXG4vLyBsZW5ndGggNjQpXG5leHBvcnQgY29uc3Qga2V5Z2VuID0gKHNlZWQ/OiBzdHJpbmcgfCBVaW50OEFycmF5KTogS2V5UGFpciA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBzZWVkID8gbm9ybWFsaXplU2VlZChzZWVkKSA6IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBzZWVkSGV4ID0gZWNVdGlscy5ieXRlc1RvSGV4KHByaXZhdGVLZXkpO1xuXG4gIHJldHVybiB7XG4gICAgc2VlZEhleCxcbiAgICBwcml2YXRlOiBwcml2YXRlS2V5LFxuICAgIHB1YmxpYzogZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIHRydWUgLyogaXNDb21wcmVzc2VkICovKSxcbiAgfTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVNlZWQgPSAoc2VlZDogc3RyaW5nIHwgVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICBpZiAodHlwZW9mIHNlZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGEgY291bGQgYmUgYSBoZXggc3RyaW5nIG9yIGEgYnl0ZSBhcnJheSAoVWludDhBcnJheSlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTZYMiA9IChkYXRhOiBVaW50OEFycmF5IHwgc3RyaW5nKTogVWludDhBcnJheSA9PiB7XG4gIGNvbnN0IGQgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBlY1V0aWxzLmhleFRvQnl0ZXMoZGF0YSkgOiBkYXRhO1xuICByZXR1cm4gc2hhMjU2KHNoYTI1NihkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHVibGljS2V5VG9CYXNlNThDaGVjayA9IChcbiAgcHVibGljS2V5Qnl0ZXM6IFVpbnQ4QXJyYXksXG4gIG9wdGlvbnM/OiBCYXNlNThDaGVja09wdGlvbnNcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHByZWZpeCA9IFBVQkxJQ19LRVlfUFJFRklYRVNbb3B0aW9ucz8ubmV0d29yayA/PyAnbWFpbm5ldCddLmRlc287XG4gIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGltcGxlbWVudGF0aW9uIGluIHRoZSBiczU4Y2hlY2sgcGFja2FnZSwgYnV0IHdlXG4gIC8vIHNsaWdodGx5IG1vZGlmeSBpdCB0byB1c2UgdGhlIGJyb3dzZXIgZnJpZW5kbHkgdmVyc2lvbiBvZiBCdWZmZXIuY29uY2F0LlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYnM1OGNoZWNrL2Jsb2IvMTJiM2U3MDBmMzU1YzVjNDlkMGJlM2Y4ZmMyOWJlNmM2NmU3NTNlOS9iYXNlLmpzI0wxXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWy4uLnByZWZpeCwgLi4ucHVibGljS2V5Qnl0ZXNdKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBzaGEyNTZYMihieXRlcyk7XG4gIHJldHVybiBiczU4LmVuY29kZShjb25jYXRVaW50OEFycmF5cyhbYnl0ZXMsIGNoZWNrc3VtXSwgYnl0ZXMubGVuZ3RoICsgNCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTaWduT3B0aW9ucyB7XG4gIGlzRGVyaXZlZEtleTogYm9vbGVhbjtcbn1cblxuY29uc3Qgc2lnbiA9IChtc2dIYXNoSGV4OiBzdHJpbmcsIHByaXZhdGVLZXk6IFVpbnQ4QXJyYXkpID0+IHtcbiAgcmV0dXJuIGVjU2lnbihtc2dIYXNoSGV4LCBwcml2YXRlS2V5LCB7XG4gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgdGhlIHNpZ25pbmcgb3B0aW9ucyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxI3NpZ25tc2doYXNoLXByaXZhdGVrZXlcbiAgICBjYW5vbmljYWw6IHRydWUsXG4gICAgZGVyOiB0cnVlLFxuICAgIGV4dHJhRW50cm9weTogdHJ1ZSxcbiAgICByZWNvdmVyZWQ6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25UeCA9IGFzeW5jIChcbiAgdHhIZXg6IHN0cmluZyxcbiAgc2VlZEhleDogc3RyaW5nLFxuICBvcHRpb25zPzogU2lnbk9wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXModHhIZXgpO1xuICBjb25zdCBbXywgdjFGaWVsZHNCdWZmZXJdID0gVHJhbnNhY3Rpb25WMC5mcm9tQnl0ZXModHJhbnNhY3Rpb25CeXRlcyk7XG4gIGNvbnN0IHNpZ25hdHVyZUluZGV4ID0gdHJhbnNhY3Rpb25CeXRlcy5sZW5ndGggLSB2MUZpZWxkc0J1ZmZlci5sZW5ndGggLSAxO1xuICBjb25zdCB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUgPSB0cmFuc2FjdGlvbkJ5dGVzLnNsaWNlKDAsIHNpZ25hdHVyZUluZGV4KTtcbiAgY29uc3QgaGFzaGVkVHhCeXRlcyA9IHNoYTI1NlgyKHRyYW5zYWN0aW9uQnl0ZXMpO1xuICBjb25zdCB0cmFuc2FjdGlvbkhhc2hIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVkVHhCeXRlcyk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleCk7XG4gIGNvbnN0IFtzaWduYXR1cmVCeXRlcywgcmVjb3ZlcnlQYXJhbV0gPSBhd2FpdCBzaWduKFxuICAgIHRyYW5zYWN0aW9uSGFzaEhleCxcbiAgICBwcml2YXRlS2V5XG4gICk7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gdXZhcmludDY0VG9CdWYoc2lnbmF0dXJlQnl0ZXMubGVuZ3RoKTtcblxuICBpZiAob3B0aW9ucz8uaXNEZXJpdmVkS2V5KSB7XG4gICAgc2lnbmF0dXJlQnl0ZXNbMF0gKz0gMSArIHJlY292ZXJ5UGFyYW07XG4gIH1cblxuICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbkJ5dGVzID0gZWNVdGlscy5jb25jYXRCeXRlcyhcbiAgICB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUsXG4gICAgc2lnbmF0dXJlTGVuZ3RoLFxuICAgIHNpZ25hdHVyZUJ5dGVzLFxuICAgIHYxRmllbGRzQnVmZmVyXG4gICk7XG5cbiAgcmV0dXJuIGVjVXRpbHMuYnl0ZXNUb0hleChzaWduZWRUcmFuc2FjdGlvbkJ5dGVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaWduZWRKV1QgPSBhc3luYyAoXG4gIHNlZWRIZXg6IHN0cmluZyxcbiAgYWxnOiBqd3RBbGdvcml0aG0sXG4gIHtcbiAgICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgLy8gVE9ETzogYWN0dWFsbHkgc3VwcG9ydCB0aGlzLi4uIG9yIHJlbW92ZSBpdC5cbiAgICBleHBpcmF0aW9uLFxuICB9OiB7XG4gICAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xuICAgIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIH1cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IEpTT04uc3RyaW5naWZ5KHsgYWxnLCB0eXA6ICdKV1QnIH0pO1xuICBjb25zdCBpc3N1ZWRBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCB0aGlydHlNaW5Gcm9tTm93ID0gaXNzdWVkQXQgKyAzMCAqIDYwO1xuICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLihkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2sgPyB7IGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayB9IDoge30pLFxuICAgIGlhdDogaXNzdWVkQXQsXG4gICAgZXhwOiB0aGlydHlNaW5Gcm9tTm93LFxuICB9KTtcblxuICBjb25zdCBqd3QgPSBgJHt1cmxTYWZlQmFzZTY0KGhlYWRlcil9LiR7dXJsU2FmZUJhc2U2NChwYXlsb2FkKX1gO1xuICBjb25zdCBbc2lnbmF0dXJlXSA9IGF3YWl0IHNpZ24oXG4gICAgZWNVdGlscy5ieXRlc1RvSGV4KHNoYTI1NihuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoand0KSkpKSxcbiAgICBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleClcbiAgKTtcbiAgY29uc3QgZW5jb2RlZFNpZ25hdHVyZSA9IGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZSk7XG5cbiAgcmV0dXJuIGAke2p3dH0uJHtlbmNvZGVkU2lnbmF0dXJlfWA7XG59O1xuXG5mdW5jdGlvbiB1cmxTYWZlQmFzZTY0KHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiB3aW5kb3dcbiAgICAuYnRvYShzdHIpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgLnJlcGxhY2UoLz0vZywgJycpO1xufVxuXG5leHBvcnQgY29uc3QgZW5jcnlwdENoYXRNZXNzYWdlID0gYXN5bmMgKFxuICBzZW5kZXJTZWVkSGV4OiBzdHJpbmcsXG4gIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VuZGVyU2VlZEhleCk7XG4gIGNvbnN0IHJlY2lwaWVudFB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0J5dGVzKFxuICAgIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIGNvbnN0IHNoYXJlZFByaXZhdGVLZXkgPSBhd2FpdCBnZXRTaGFyZWRQcml2YXRlS2V5KFxuICAgIHByaXZhdGVLZXksXG4gICAgcmVjaXBpZW50UHVibGljS2V5XG4gICk7XG4gIGNvbnN0IHNoYXJlZFB1YmxpY0tleSA9IGdldFB1YmxpY0tleShzaGFyZWRQcml2YXRlS2V5KTtcblxuICByZXR1cm4gZW5jcnlwdChzaGFyZWRQdWJsaWNLZXksIG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gcHVibGljRW5jcnlwdGlvbktleSBjb3VsZCBiZSBpbiByYXcgYnl0ZXMgb3IgYmFzZTU4Y2hlY2sgZm9ybWF0XG4gKiBAcGFyYW0gcGxhaW50ZXh0XG4gKiBAcmV0dXJucyBjaXBoZXIgdGV4dCBhcyBhIGhleCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSBhc3luYyAoXG4gIHB1YmxpY0tleTogVWludDhBcnJheSB8IHN0cmluZyxcbiAgcGxhaW50ZXh0OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVwaGVtUHJpdmF0ZUtleSA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBlcGhlbVB1YmxpY0tleSA9IGdldFB1YmxpY0tleShlcGhlbVByaXZhdGVLZXkpO1xuICBjb25zdCBwdWJsaWNLZXlCeXRlcyA9XG4gICAgdHlwZW9mIHB1YmxpY0tleSA9PT0gJ3N0cmluZydcbiAgICAgID8gYXdhaXQgYnM1OFB1YmxpY0tleVRvQnl0ZXMocHVibGljS2V5KVxuICAgICAgOiBwdWJsaWNLZXk7XG4gIGNvbnN0IHByaXZLZXkgPSBhd2FpdCBnZXRTaGFyZWRQcml2YXRlS2V5KGVwaGVtUHJpdmF0ZUtleSwgcHVibGljS2V5Qnl0ZXMpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gcHJpdktleS5zbGljZSgwLCAxNik7XG4gIGNvbnN0IGl2ID0gZWNVdGlscy5yYW5kb21CeXRlcygxNik7XG4gIGNvbnN0IG1hY0tleSA9IHNoYTI1Nihwcml2S2V5LnNsaWNlKDE2KSk7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBsYWludGV4dCk7XG4gIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsXG4gICAgZW5jcnlwdGlvbktleSxcbiAgICAnQUVTLUNUUicsXG4gICAgdHJ1ZSxcbiAgICBbJ2VuY3J5cHQnXVxuICApO1xuICBjb25zdCBjaXBoZXJCeXRlcyA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgIHtcbiAgICAgIG5hbWU6ICdBRVMtQ1RSJyxcbiAgICAgIGNvdW50ZXI6IGl2LFxuICAgICAgbGVuZ3RoOiAxMjgsXG4gICAgfSxcbiAgICBjcnlwdG9LZXksXG4gICAgYnl0ZXNcbiAgKTtcbiAgY29uc3QgaG1hYyA9IGF3YWl0IGVjVXRpbHMuaG1hY1NoYTI1NihcbiAgICBtYWNLZXksXG4gICAgbmV3IFVpbnQ4QXJyYXkoWy4uLml2LCAuLi5uZXcgVWludDhBcnJheShjaXBoZXJCeXRlcyldKVxuICApO1xuXG4gIHJldHVybiBlY1V0aWxzLmJ5dGVzVG9IZXgoXG4gICAgbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgLi4uZXBoZW1QdWJsaWNLZXksXG4gICAgICAuLi5pdixcbiAgICAgIC4uLm5ldyBVaW50OEFycmF5KGNpcGhlckJ5dGVzKSxcbiAgICAgIC4uLmhtYWMsXG4gICAgXSlcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMzMpO1xuICB9XG4gIGNvbnN0IHB1YktleVVuY29tcHJlc3NlZCA9IGJzNThQdWJsaWNLZXlUb0J5dGVzKHN0cik7XG4gIHJldHVybiBVaW50OEFycmF5LmZyb20oXG4gICAgUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocHViS2V5VW5jb21wcmVzc2VkKSkudG9SYXdCeXRlcyh0cnVlKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGJzNThQdWJsaWNLZXlUb0J5dGVzID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJ5dGVzID0gYnM1OC5kZWNvZGUoc3RyKTtcbiAgY29uc3QgcGF5bG9hZCA9IGJ5dGVzLnNsaWNlKDAsIC00KTtcbiAgY29uc3QgY2hlY2tzdW1BID0gYnl0ZXMuc2xpY2UoLTQpO1xuICBjb25zdCBjaGVja3N1bUIgPSBzaGEyNTZYMihwYXlsb2FkKTtcblxuICBpZiAoXG4gICAgKGNoZWNrc3VtQVswXSBeIGNoZWNrc3VtQlswXSkgfFxuICAgIChjaGVja3N1bUFbMV0gXiBjaGVja3N1bUJbMV0pIHxcbiAgICAoY2hlY2tzdW1BWzJdIF4gY2hlY2tzdW1CWzJdKSB8XG4gICAgKGNoZWNrc3VtQVszXSBeIGNoZWNrc3VtQlszXSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoZWNrc3VtJyk7XG4gIH1cblxuICByZXR1cm4gUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocGF5bG9hZC5zbGljZSgzKSkpLnRvUmF3Qnl0ZXMoZmFsc2UpO1xufTtcblxuY29uc3QgaXNWYWxpZEhtYWMgPSAoY2FuZGlkYXRlOiBVaW50OEFycmF5LCBrbm93bkdvb2Q6IFVpbnQ4QXJyYXkpID0+IHtcbiAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggIT09IGtub3duR29vZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtub3duR29vZC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjYW5kaWRhdGVbaV0gIT09IGtub3duR29vZFtpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY3J5cHRDaGF0TWVzc2FnZSA9IGFzeW5jIChcbiAgcmVjaXBpZW50U2VlZEhleDogc3RyaW5nLFxuICBwdWJsaWNEZWNyeXB0aW9uS2V5OiBzdHJpbmcsXG4gIGNpcGhlclRleHRIZXg6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMocmVjaXBpZW50U2VlZEhleCk7XG4gIGNvbnN0IHB1YmxpY0tleSA9IGF3YWl0IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0RlY3J5cHRpb25LZXkpO1xuICBjb25zdCBzaGFyZWRQcml2YXRlS2V5ID0gYXdhaXQgZ2V0U2hhcmVkUHJpdmF0ZUtleShwcml2YXRlS2V5LCBwdWJsaWNLZXkpO1xuICByZXR1cm4gZGVjcnlwdChzaGFyZWRQcml2YXRlS2V5LCBjaXBoZXJUZXh0SGV4KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gYXN5bmMgKFxuICBwcml2YXRlRGVjcnlwdGlvbktleTogVWludDhBcnJheSB8IHN0cmluZyxcbiAgY2lwaGVyVGV4dEhleDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgY2lwaGVyQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXMoY2lwaGVyVGV4dEhleCk7XG4gIGNvbnN0IG1ldGFMZW5ndGggPSAxMTM7XG5cbiAgaWYgKGNpcGhlckJ5dGVzLmxlbmd0aCA8IG1ldGFMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lwaGVyIHRleHQuIGRhdGEgdG9vIHNtYWxsLicpO1xuICB9XG5cbiAgaWYgKCEoY2lwaGVyQnl0ZXNbMF0gPj0gMiAmJiBjaXBoZXJCeXRlc1swXSA8PSA0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXBoZXIgdGV4dC4nKTtcbiAgfVxuXG4gIGNvbnN0IHByaXZhdGVLZXkgPSBub3JtYWxpemVTZWVkKHByaXZhdGVEZWNyeXB0aW9uS2V5KTtcbiAgY29uc3QgZXBoZW1QdWJsaWNLZXkgPSBjaXBoZXJCeXRlcy5zbGljZSgwLCA2NSk7XG4gIGNvbnN0IGNpcGhlclRleHRMZW5ndGggPSBjaXBoZXJCeXRlcy5sZW5ndGggLSBtZXRhTGVuZ3RoO1xuICBjb25zdCBpdiA9IGNpcGhlckJ5dGVzLnNsaWNlKDY1LCA2NSArIDE2KTtcbiAgY29uc3QgY2lwaGVyQW5kSXYgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSwgNjUgKyAxNiArIGNpcGhlclRleHRMZW5ndGgpO1xuICBjb25zdCBjaXBoZXJUZXh0ID0gY2lwaGVyQW5kSXYuc2xpY2UoMTYpO1xuICBjb25zdCBtc2dNYWMgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSArIDE2ICsgY2lwaGVyVGV4dExlbmd0aCk7XG4gIGNvbnN0IHNoYXJlZFNlY3JldEtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgZXBoZW1QdWJsaWNLZXkpO1xuICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gc2hhcmVkU2VjcmV0S2V5LnNsaWNlKDAsIDE2KTtcbiAgY29uc3QgbWFjS2V5ID0gc2hhMjU2KHNoYXJlZFNlY3JldEtleS5zbGljZSgxNikpO1xuICBjb25zdCBobWFjS25vd25Hb29kID0gYXdhaXQgZWNVdGlscy5obWFjU2hhMjU2KG1hY0tleSwgY2lwaGVyQW5kSXYpO1xuXG4gIGlmICghaXNWYWxpZEhtYWMobXNnTWFjLCBobWFjS25vd25Hb29kKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb3JyZWN0IE1BQycpO1xuICB9XG5cbiAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAncmF3JyxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgICdBRVMtQ1RSJyxcbiAgICB0cnVlLFxuICAgIFsnZGVjcnlwdCddXG4gICk7XG5cbiAgY29uc3QgZGVjcnlwdGVkQnVmZmVyID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgeyBuYW1lOiAnQUVTLUNUUicsIGNvdW50ZXI6IGl2LCBsZW5ndGg6IDEyOCB9LFxuICAgIGNyeXB0b0tleSxcbiAgICBjaXBoZXJUZXh0XG4gICk7XG5cbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkZWNyeXB0ZWRCdWZmZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXJlZFByaXZhdGVLZXkgPSBhc3luYyAoXG4gIHByaXZLZXk6IFVpbnQ4QXJyYXksXG4gIHB1YktleTogVWludDhBcnJheVxuKSA9PiB7XG4gIGNvbnN0IHNoYXJlZFNlY3JldCA9IGF3YWl0IGdldFNoYXJlZFNlY3JldChwcml2S2V5LCBwdWJLZXkpO1xuXG4gIHJldHVybiBrZGYoc2hhcmVkU2VjcmV0LCAzMik7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlUHVibGljS2V5ID0gYXN5bmMgKHB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IGJzNThQdWJsaWNLZXlUb0J5dGVzKHB1YmxpY0tleUJhc2U1OENoZWNrKTtcbiAgY29uc3Qgd2l0aFByZWZpeFJlbW92ZWQgPSBkZWNvZGVkLnNsaWNlKDMpO1xuICBjb25zdCBzZW5kZXJQdWJLZXlIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgod2l0aFByZWZpeFJlbW92ZWQpO1xuXG4gIHJldHVybiBQb2ludC5mcm9tSGV4KHNlbmRlclB1YktleUhleCkudG9SYXdCeXRlcyhmYWxzZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2hhcmVkU2VjcmV0ID0gYXN5bmMgKFxuICBwcml2S2V5OiBVaW50OEFycmF5LFxuICBwdWJLZXk6IFVpbnQ4QXJyYXlcbikgPT4ge1xuICAvLyBwYXNzaW5nIHRydWUgdG8gY29tcHJlc3MgdGhlIHB1YmxpYyBrZXksIGFuZCB0aGVuIHNsaWNpbmcgb2ZmIHRoZSBmaXJzdCBieXRlXG4gIC8vIG1hdGNoZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRlcml2ZSBpbiB0aGUgZWxsaXB0aWMgcGFja2FnZS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9ub2JsZS1zZWNwMjU2azEvaXNzdWVzLzI4I2lzc3VlY29tbWVudC05NDY1MzgwMzdcbiAgcmV0dXJuIG5vYmxlR2V0U2hhcmVkU2VjcmV0KHByaXZLZXksIHB1YktleSwgdHJ1ZSkuc2xpY2UoMSk7XG59O1xuXG4vLyB0YWtlbiBmcm9tIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgZGVzbyBjaGF0IGFwcDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXNvLXByb3RvY29sL2FjY2Vzcy1ncm91cC1tZXNzYWdpbmctYXBwL2Jsb2IvY2Q1YzIzN2Y1ZTU3MjkxOTZhYWMwZGExNjFkMDg1MWJkZTc4MDkyYy9zcmMvc2VydmljZXMvY3J5cHRvLXV0aWxzLnNlcnZpY2UudHN4I0w5MVxuZXhwb3J0IGNvbnN0IGtkZiA9IChzZWNyZXQ6IFVpbnQ4QXJyYXksIG91dHB1dExlbmd0aDogbnVtYmVyKSA9PiB7XG4gIGxldCBjdHIgPSAxO1xuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgpO1xuXG4gIHdoaWxlICh3cml0dGVuIDwgb3V0cHV0TGVuZ3RoKSB7XG4gICAgY29uc3QgaGFzaCA9IHNoYTI1NihcbiAgICAgIG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgLi4ubmV3IFVpbnQ4QXJyYXkoW2N0ciA+PiAyNCwgY3RyID4+IDE2LCBjdHIgPj4gOCwgY3RyXSksXG4gICAgICAgIC4uLnNlY3JldCxcbiAgICAgIF0pXG4gICAgKTtcbiAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShbLi4ucmVzdWx0LCAuLi5oYXNoXSk7XG4gICAgd3JpdHRlbiArPSAzMjtcbiAgICBjdHIgKz0gMTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBUaGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZGVyVG9Kb3NlIGZ1bmN0aW9uIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9CcmlnaHRzcGFjZS9ub2RlLWVjZHNhLXNpZy1mb3JtYXR0ZXIvYmxvYi9jYTI1YTJmZDVhZTlkZDg1MDM2MDgxNjMyOTM2ZTgwMmE0N2ExMjg5L3NyYy9lY2RzYS1zaWctZm9ybWF0dGVyLmpzI0wzMlxuLy8gVGhlIG9yaWdpbmFsIHBhY2thZ2UgaXMgbm90IGJyb3dzZXIgZnJpZW5kbHkgYW5kIHJlcXVpcmVzIG5vZGUgcG9seWZpbGxzLiBXZVxuLy8gYWxzbyBkb24ndCBuZWVkIHRvIGJlIHF1aXRlIGFzIGRlZmVuc2l2ZSBhcyB0aGUgb3JpZ2luYWwgcGFja2FnZSBzaW5jZSB3ZVxuLy8gaGF2ZSBmdWxsIGNvbnRyb2wgb2YgdGhlIGlucHV0LlxuZnVuY3Rpb24gZGVyVG9Kb3NlRW5jb2Rpbmcoc2lnbmF0dXJlOiBVaW50OEFycmF5KSB7XG4gIGNvbnN0IHBhcmFtQnl0ZXMgPSAzMjtcblxuICBsZXQgb2Zmc2V0ID0gMztcbiAgY29uc3Qgckxlbmd0aCA9IHNpZ25hdHVyZVtvZmZzZXRdO1xuICBvZmZzZXQgKz0gMTtcbiAgY29uc3Qgck9mZnNldCA9IG9mZnNldDtcbiAgb2Zmc2V0ICs9IHJMZW5ndGggKyAxO1xuICBjb25zdCBzTGVuZ3RoID0gc2lnbmF0dXJlW29mZnNldF07XG4gIG9mZnNldCArPSAxO1xuICBjb25zdCBzT2Zmc2V0ID0gb2Zmc2V0O1xuICBvZmZzZXQgKz0gc0xlbmd0aDtcblxuICBjb25zdCByUGFkZGluZyA9IHBhcmFtQnl0ZXMgLSByTGVuZ3RoO1xuICBjb25zdCBzUGFkZGluZyA9IHBhcmFtQnl0ZXMgLSBzTGVuZ3RoO1xuXG4gIGNvbnN0IG91dFB1dCA9IG5ldyBVaW50OEFycmF5KHJQYWRkaW5nICsgckxlbmd0aCArIHNQYWRkaW5nICsgc0xlbmd0aCk7XG5cbiAgZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCByUGFkZGluZzsgKytvZmZzZXQpIHtcbiAgICBvdXRQdXRbb2Zmc2V0XSA9IDA7XG4gIH1cblxuICBvdXRQdXQuc2V0KFxuICAgIHNpZ25hdHVyZS5zbGljZShyT2Zmc2V0ICsgTWF0aC5tYXgoLXJQYWRkaW5nLCAwKSwgck9mZnNldCArIHJMZW5ndGgpLFxuICAgIG9mZnNldFxuICApO1xuXG4gIG9mZnNldCA9IHBhcmFtQnl0ZXM7XG5cbiAgZm9yIChjb25zdCBvID0gb2Zmc2V0OyBvZmZzZXQgPCBvICsgc1BhZGRpbmc7ICsrb2Zmc2V0KSB7XG4gICAgb3V0UHV0W29mZnNldF0gPSAwO1xuICB9XG5cbiAgb3V0UHV0LnNldChcbiAgICBzaWduYXR1cmUuc2xpY2Uoc09mZnNldCArIE1hdGgubWF4KC1zUGFkZGluZywgMCksIHNPZmZzZXQgKyBzTGVuZ3RoKSxcbiAgICBvZmZzZXRcbiAgKTtcblxuICBjb25zdCBvdXRwdXRDaGFycyA9IG91dFB1dC5yZWR1Y2UoXG4gICAgKGRhdGEsIGJ5dGUpID0+IGRhdGEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpLFxuICAgICcnXG4gICk7XG5cbiAgcmV0dXJuIHVybFNhZmVCYXNlNjQob3V0cHV0Q2hhcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlQWNjZXNzR3JvdXBLZXlQYWlyKFxuICBwcml2YXRlS2V5SGV4OiBzdHJpbmcsXG4gIGdyb3VwS2V5TmFtZTogc3RyaW5nXG4pOiBLZXlQYWlyIHtcbiAgY29uc3Qgc2VjcmV0SGFzaCA9IHNoYTI1NlgyKHByaXZhdGVLZXlIZXgpO1xuICBjb25zdCBrZXlOYW1lSGFzaCA9IHNoYTI1NlgyKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShncm91cEtleU5hbWUpKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IHNoYTI1NlgyKG5ldyBVaW50OEFycmF5KFsuLi5zZWNyZXRIYXNoLCAuLi5rZXlOYW1lSGFzaF0pKTtcblxuICByZXR1cm4ga2V5Z2VuKHByaXZhdGVLZXkpO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lkZW50aXR5L2NyeXB0by11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUNMLEtBQUssRUFDTCxJQUFJLElBQUksTUFBTSxFQUNkLEtBQUssSUFBSSxPQUFPLEVBQ2hCLFlBQVksRUFDWixlQUFlLElBQUksb0JBQW9CLEdBQ3hDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcxRCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQW9CLEVBQUUsTUFBZTtJQUNyRSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FB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LEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNyRSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3RSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGEyNTYnO1xuaW1wb3J0IHtcbiAgUG9pbnQsXG4gIHNpZ24gYXMgZWNTaWduLFxuICB1dGlscyBhcyBlY1V0aWxzLFxuICBnZXRQdWJsaWNLZXksXG4gIGdldFNoYXJlZFNlY3JldCBhcyBub2JsZUdldFNoYXJlZFNlY3JldCxcbn0gZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgUFVCTElDX0tFWV9QUkVGSVhFUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVjAgfSBmcm9tICcuL3RyYW5zYWN0aW9uLXRyYW5zY29kZXJzJztcbmltcG9ydCB7IEtleVBhaXIsIE5ldHdvcmssIGp3dEFsZ29yaXRobSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBCcm93c2VyIGZyaWVuZGx5IHZlcnNpb24gb2Ygbm9kZSdzIEJ1ZmZlci5jb25jYXQuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzOiBVaW50OEFycmF5W10sIGxlbmd0aD86IG51bWJlcikge1xuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBhcnJheXMucmVkdWNlKChhY2MsIGFycmF5KSA9PiBhY2MgKyBhcnJheS5sZW5ndGgsIDApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvZmZzZXQgKyBhcnJheXNbaV0ubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICByZXN1bHQuc2V0KGFycmF5c1tpXS5zbGljZSgwLCBsZW5ndGggLSBvZmZzZXQpLCBvZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQoYXJyYXlzW2ldLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCB1dmFyaW50NjRUb0J1ZiA9ICh1aW50OiBudW1iZXIpOiBVaW50OEFycmF5ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICB3aGlsZSAodWludCA+PSAweDgwKSB7XG4gICAgcmVzdWx0LnB1c2goTnVtYmVyKChCaWdJbnQodWludCkgJiBCaWdJbnQoMHhmZikpIHwgQmlnSW50KDB4ODApKSk7XG4gICAgdWludCA9IE51bWJlcihCaWdJbnQodWludCkgPj4gQmlnSW50KDcpKTtcbiAgfVxuICByZXN1bHQucHVzaCh1aW50IHwgMCk7XG5cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdCk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVmVG9VdmFyaW50NjQgPSAoYnVmZmVyOiBVaW50OEFycmF5KTogW251bWJlciwgVWludDhBcnJheV0gPT4ge1xuICBsZXQgeCA9IEJpZ0ludCgwKTtcbiAgbGV0IHMgPSBCaWdJbnQoMCk7XG5cbiAgLy8gVE9ETzogZml4IGxpbnRpbmcgZXJyb3JcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICBmb3IgKGxldCBpID0gMDsgdHJ1ZTsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGJ1ZmZlcltpXTtcblxuICAgIGlmIChpID4gOSB8fCAoaSA9PSA5ICYmIGJ5dGUgPiAxKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1aW50NjQgb3ZlcmZsb3cnKTtcbiAgICB9XG5cbiAgICBpZiAoYnl0ZSA8IDB4ODApIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIE51bWJlcihCaWdJbnQoeCkgfCAoQmlnSW50KGJ5dGUpIDw8IEJpZ0ludChzKSkpLFxuICAgICAgICBidWZmZXIuc2xpY2UoaSArIDEpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICB4IHw9IEJpZ0ludChieXRlICYgMHg3ZikgPDwgQmlnSW50KHMpO1xuICAgIHMgKz0gQmlnSW50KDcpO1xuICB9XG59O1xuXG5pbnRlcmZhY2UgQmFzZTU4Q2hlY2tPcHRpb25zIHtcbiAgbmV0d29yazogTmV0d29yaztcbn1cblxuLy8gV2UgYXJlIG5vdCB1c2luZyB0aGUgbmF0aXZlIHdlYiBjcnlwdG8gQVBJIHRvIGFjdHVhbGx5IGdlbmVyYXRlIGtleXNcbi8vIGJlY2F1c2UgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VjcDI1NmsxIGN1cnZlLiBJbnN0ZWFkLCB3ZSBhcmUgdXNpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxIHdoaWNoIGlzIGEgYnJvd3NlciBmcmllbmRseVxuLy8gYWx0ZXJuYXRpdmUgdG8gdGhlIG5vZGUgZWxsaXB0aWMgcGFja2FnZSB3aGljaCBpcyBmYXIgc21hbGxlciBhbmQgb25seVxuLy8gZm9jdXNlcyBvbiBzdXBwb3J0aW5nIHRoZSBlYyBhbGdvcml0aG0gd2UgYXJlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gaGVyZS5cbi8vIElmIHRoZSB3ZWIgY3J5cHRvIEFQSSBldmVyIGFkZHMgc3VwcG9ydCBmb3Igc2VjcDI1NmsxLCB3ZSBzaG91bGQgY2hhbmdlXG4vLyB0aGlzIHRvIHVzZSBpdC5cbi8vXG4vLyBTZWUgdGhlIGZvbGxvd2luZyBmb3IgbW9yZSBpbmZvOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWJjcnlwdG8vaXNzdWVzLzgyXG4vL1xuLy8gSWYgeW91IGRvbid0IHByb3ZpZGUgYSBzZWVkLCBhIHJhbmRvbSBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHlvdSBhbmQgYVxuLy8gcmFuZG9tIGtleSBwYWlyIHdpbGwgYmUgcmV0dXJuZWQuIElmIHlvdSBkbyBwcm92aWRlIGEgc2VlZCwgaXQgc2hvdWxkIGJlIGFcbi8vIHJhbmRvbWx5IGdlbmVyYXRlZCAzMiBieXRlIHZhbHVlIChVaW50OEFycmF5IG9mIGxlbmd0aCAzMiBvciBoZXggc3RyaW5nIG9mXG4vLyBsZW5ndGggNjQpXG5leHBvcnQgY29uc3Qga2V5Z2VuID0gKHNlZWQ/OiBzdHJpbmcgfCBVaW50OEFycmF5KTogS2V5UGFpciA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBzZWVkID8gbm9ybWFsaXplU2VlZChzZWVkKSA6IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBzZWVkSGV4ID0gZWNVdGlscy5ieXRlc1RvSGV4KHByaXZhdGVLZXkpO1xuXG4gIHJldHVybiB7XG4gICAgc2VlZEhleCxcbiAgICBwcml2YXRlOiBwcml2YXRlS2V5LFxuICAgIHB1YmxpYzogZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIHRydWUgLyogaXNDb21wcmVzc2VkICovKSxcbiAgfTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVNlZWQgPSAoc2VlZDogc3RyaW5nIHwgVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICBpZiAodHlwZW9mIHNlZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVjVXRpbHMuaGV4VG9CeXRlcyhzZWVkKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGEgY291bGQgYmUgYSBoZXggc3RyaW5nIG9yIGEgYnl0ZSBhcnJheSAoVWludDhBcnJheSlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTZYMiA9IChkYXRhOiBVaW50OEFycmF5IHwgc3RyaW5nKTogVWludDhBcnJheSA9PiB7XG4gIGNvbnN0IGQgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBlY1V0aWxzLmhleFRvQnl0ZXMoZGF0YSkgOiBkYXRhO1xuICByZXR1cm4gc2hhMjU2KHNoYTI1NihkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHVibGljS2V5VG9CYXNlNThDaGVjayA9IChcbiAgcHVibGljS2V5Qnl0ZXM6IFVpbnQ4QXJyYXksXG4gIG9wdGlvbnM/OiBCYXNlNThDaGVja09wdGlvbnNcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHByZWZpeCA9IFBVQkxJQ19LRVlfUFJFRklYRVNbb3B0aW9ucz8ubmV0d29yayA/PyAnbWFpbm5ldCddLmRlc287XG4gIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGltcGxlbWVudGF0aW9uIGluIHRoZSBiczU4Y2hlY2sgcGFja2FnZSwgYnV0IHdlXG4gIC8vIHNsaWdodGx5IG1vZGlmeSBpdCB0byB1c2UgdGhlIGJyb3dzZXIgZnJpZW5kbHkgdmVyc2lvbiBvZiBCdWZmZXIuY29uY2F0LlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYnM1OGNoZWNrL2Jsb2IvMTJiM2U3MDBmMzU1YzVjNDlkMGJlM2Y4ZmMyOWJlNmM2NmU3NTNlOS9iYXNlLmpzI0wxXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWy4uLnByZWZpeCwgLi4ucHVibGljS2V5Qnl0ZXNdKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBzaGEyNTZYMihieXRlcyk7XG4gIHJldHVybiBiczU4LmVuY29kZShjb25jYXRVaW50OEFycmF5cyhbYnl0ZXMsIGNoZWNrc3VtXSwgYnl0ZXMubGVuZ3RoICsgNCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTaWduT3B0aW9ucyB7XG4gIGlzRGVyaXZlZEtleTogYm9vbGVhbjtcbn1cblxuY29uc3Qgc2lnbiA9IChtc2dIYXNoSGV4OiBzdHJpbmcsIHByaXZhdGVLZXk6IFVpbnQ4QXJyYXkpID0+IHtcbiAgcmV0dXJuIGVjU2lnbihtc2dIYXNoSGV4LCBwcml2YXRlS2V5LCB7XG4gICAgLy8gRm9yIGRldGFpbHMgYWJvdXQgdGhlIHNpZ25pbmcgb3B0aW9ucyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxI3NpZ25tc2doYXNoLXByaXZhdGVrZXlcbiAgICBjYW5vbmljYWw6IHRydWUsXG4gICAgZGVyOiB0cnVlLFxuICAgIGV4dHJhRW50cm9weTogdHJ1ZSxcbiAgICByZWNvdmVyZWQ6IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25UeCA9IGFzeW5jIChcbiAgdHhIZXg6IHN0cmluZyxcbiAgc2VlZEhleDogc3RyaW5nLFxuICBvcHRpb25zPzogU2lnbk9wdGlvbnNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uQnl0ZXMgPSBlY1V0aWxzLmhleFRvQnl0ZXModHhIZXgpO1xuICBjb25zdCBbXywgdjFGaWVsZHNCdWZmZXJdID0gVHJhbnNhY3Rpb25WMC5mcm9tQnl0ZXModHJhbnNhY3Rpb25CeXRlcyk7XG4gIGNvbnN0IHNpZ25hdHVyZUluZGV4ID0gdHJhbnNhY3Rpb25CeXRlcy5sZW5ndGggLSB2MUZpZWxkc0J1ZmZlci5sZW5ndGggLSAxO1xuICBjb25zdCB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUgPSB0cmFuc2FjdGlvbkJ5dGVzLnNsaWNlKDAsIHNpZ25hdHVyZUluZGV4KTtcbiAgY29uc3QgaGFzaGVkVHhCeXRlcyA9IHNoYTI1NlgyKHRyYW5zYWN0aW9uQnl0ZXMpO1xuICBjb25zdCB0cmFuc2FjdGlvbkhhc2hIZXggPSBlY1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVkVHhCeXRlcyk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleCk7XG4gIGNvbnN0IFtzaWduYXR1cmVCeXRlcywgcmVjb3ZlcnlQYXJhbV0gPSBhd2FpdCBzaWduKFxuICAgIHRyYW5zYWN0aW9uSGFzaEhleCxcbiAgICBwcml2YXRlS2V5XG4gICk7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gdXZhcmludDY0VG9CdWYoc2lnbmF0dXJlQnl0ZXMubGVuZ3RoKTtcblxuICBpZiAob3B0aW9ucz8uaXNEZXJpdmVkS2V5KSB7XG4gICAgc2lnbmF0dXJlQnl0ZXNbMF0gKz0gMSArIHJlY292ZXJ5UGFyYW07XG4gIH1cblxuICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbkJ5dGVzID0gZWNVdGlscy5jb25jYXRCeXRlcyhcbiAgICB2MEZpZWxkc1dpdGhvdXRTaWduYXR1cmUsXG4gICAgc2lnbmF0dXJlTGVuZ3RoLFxuICAgIHNpZ25hdHVyZUJ5dGVzLFxuICAgIHYxRmllbGRzQnVmZmVyXG4gICk7XG5cbiAgcmV0dXJuIGVjVXRpbHMuYnl0ZXNUb0hleChzaWduZWRUcmFuc2FjdGlvbkJ5dGVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaWduZWRKV1QgPSBhc3luYyAoXG4gIHNlZWRIZXg6IHN0cmluZyxcbiAgYWxnOiBqd3RBbGdvcml0aG0sXG4gIHtcbiAgICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgLy8gVE9ETzogYWN0dWFsbHkgc3VwcG9ydCB0aGlzLi4uIG9yIHJlbW92ZSBpdC5cbiAgICBleHBpcmF0aW9uLFxuICB9OiB7XG4gICAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xuICAgIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIH1cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGhlYWRlciA9IEpTT04uc3RyaW5naWZ5KHsgYWxnLCB0eXA6ICdKV1QnIH0pO1xuICBjb25zdCBpc3N1ZWRBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCB0aGlydHlNaW5Gcm9tTm93ID0gaXNzdWVkQXQgKyAzMCAqIDYwO1xuICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIC4uLihkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2sgPyB7IGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjayB9IDoge30pLFxuICAgIGlhdDogaXNzdWVkQXQsXG4gICAgZXhwOiB0aGlydHlNaW5Gcm9tTm93LFxuICB9KTtcblxuICBjb25zdCBqd3QgPSBgJHt1cmxTYWZlQmFzZTY0KGhlYWRlcil9LiR7dXJsU2FmZUJhc2U2NChwYXlsb2FkKX1gO1xuICBjb25zdCBbc2lnbmF0dXJlXSA9IGF3YWl0IHNpZ24oXG4gICAgZWNVdGlscy5ieXRlc1RvSGV4KHNoYTI1NihuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoand0KSkpKSxcbiAgICBlY1V0aWxzLmhleFRvQnl0ZXMoc2VlZEhleClcbiAgKTtcbiAgY29uc3QgZW5jb2RlZFNpZ25hdHVyZSA9IGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZSk7XG5cbiAgcmV0dXJuIGAke2p3dH0uJHtlbmNvZGVkU2lnbmF0dXJlfWA7XG59O1xuXG5mdW5jdGlvbiB1cmxTYWZlQmFzZTY0KHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiB3aW5kb3dcbiAgICAuYnRvYShzdHIpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgLnJlcGxhY2UoLz0vZywgJycpO1xufVxuXG5leHBvcnQgY29uc3QgZW5jcnlwdENoYXRNZXNzYWdlID0gKFxuICBzZW5kZXJTZWVkSGV4OiBzdHJpbmcsXG4gIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBlY1V0aWxzLmhleFRvQnl0ZXMoc2VuZGVyU2VlZEhleCk7XG4gIGNvbnN0IHJlY2lwaWVudFB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0J5dGVzKFxuICAgIHJlY2lwaWVudFB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIGNvbnN0IHNoYXJlZFByaXZhdGVLZXkgPSBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIHJlY2lwaWVudFB1YmxpY0tleSk7XG4gIGNvbnN0IHNoYXJlZFB1YmxpY0tleSA9IGdldFB1YmxpY0tleShzaGFyZWRQcml2YXRlS2V5KTtcblxuICByZXR1cm4gZW5jcnlwdChzaGFyZWRQdWJsaWNLZXksIG1lc3NhZ2UpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gcHVibGljRW5jcnlwdGlvbktleSBjb3VsZCBiZSBpbiByYXcgYnl0ZXMgb3IgYmFzZTU4Y2hlY2sgZm9ybWF0XG4gKiBAcGFyYW0gcGxhaW50ZXh0XG4gKiBAcmV0dXJucyBjaXBoZXIgdGV4dCBhcyBhIGhleCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSBhc3luYyAoXG4gIHB1YmxpY0tleTogVWludDhBcnJheSB8IHN0cmluZyxcbiAgcGxhaW50ZXh0OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVwaGVtUHJpdmF0ZUtleSA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMzIpO1xuICBjb25zdCBlcGhlbVB1YmxpY0tleSA9IGdldFB1YmxpY0tleShlcGhlbVByaXZhdGVLZXkpO1xuICBjb25zdCBwdWJsaWNLZXlCeXRlcyA9XG4gICAgdHlwZW9mIHB1YmxpY0tleSA9PT0gJ3N0cmluZycgPyBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXkpIDogcHVibGljS2V5O1xuICBjb25zdCBwcml2S2V5ID0gZ2V0U2hhcmVkUHJpdmF0ZUtleShlcGhlbVByaXZhdGVLZXksIHB1YmxpY0tleUJ5dGVzKTtcbiAgY29uc3QgZW5jcnlwdGlvbktleSA9IHByaXZLZXkuc2xpY2UoMCwgMTYpO1xuICBjb25zdCBpdiA9IGVjVXRpbHMucmFuZG9tQnl0ZXMoMTYpO1xuICBjb25zdCBtYWNLZXkgPSBzaGEyNTYocHJpdktleS5zbGljZSgxNikpO1xuICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwbGFpbnRleHQpO1xuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgJ0FFUy1DVFInLFxuICAgIHRydWUsXG4gICAgWydlbmNyeXB0J11cbiAgKTtcbiAgY29uc3QgY2lwaGVyQnl0ZXMgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICB7XG4gICAgICBuYW1lOiAnQUVTLUNUUicsXG4gICAgICBjb3VudGVyOiBpdixcbiAgICAgIGxlbmd0aDogMTI4LFxuICAgIH0sXG4gICAgY3J5cHRvS2V5LFxuICAgIGJ5dGVzXG4gICk7XG4gIGNvbnN0IGhtYWMgPSBhd2FpdCBlY1V0aWxzLmhtYWNTaGEyNTYoXG4gICAgbWFjS2V5LFxuICAgIG5ldyBVaW50OEFycmF5KFsuLi5pdiwgLi4ubmV3IFVpbnQ4QXJyYXkoY2lwaGVyQnl0ZXMpXSlcbiAgKTtcblxuICByZXR1cm4gZWNVdGlscy5ieXRlc1RvSGV4KFxuICAgIG5ldyBVaW50OEFycmF5KFtcbiAgICAgIC4uLmVwaGVtUHVibGljS2V5LFxuICAgICAgLi4uaXYsXG4gICAgICAuLi5uZXcgVWludDhBcnJheShjaXBoZXJCeXRlcyksXG4gICAgICAuLi5obWFjLFxuICAgIF0pXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDMzKTtcbiAgfVxuICBjb25zdCBwdWJLZXlVbmNvbXByZXNzZWQgPSBiczU4UHVibGljS2V5VG9CeXRlcyhzdHIpO1xuICByZXR1cm4gUG9pbnQuZnJvbUhleChlY1V0aWxzLmJ5dGVzVG9IZXgocHViS2V5VW5jb21wcmVzc2VkKSkudG9SYXdCeXRlcyh0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiczU4UHVibGljS2V5VG9CeXRlcyA9IChzdHI6IHN0cmluZykgPT4ge1xuICBjb25zdCBieXRlcyA9IGJzNTguZGVjb2RlKHN0cik7XG4gIGNvbnN0IHBheWxvYWQgPSBieXRlcy5zbGljZSgwLCAtNCk7XG4gIGNvbnN0IGNoZWNrc3VtQSA9IGJ5dGVzLnNsaWNlKC00KTtcbiAgY29uc3QgY2hlY2tzdW1CID0gc2hhMjU2WDIocGF5bG9hZCk7XG5cbiAgaWYgKFxuICAgIChjaGVja3N1bUFbMF0gXiBjaGVja3N1bUJbMF0pIHxcbiAgICAoY2hlY2tzdW1BWzFdIF4gY2hlY2tzdW1CWzFdKSB8XG4gICAgKGNoZWNrc3VtQVsyXSBeIGNoZWNrc3VtQlsyXSkgfFxuICAgIChjaGVja3N1bUFbM10gXiBjaGVja3N1bUJbM10pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICB9XG5cbiAgcmV0dXJuIFBvaW50LmZyb21IZXgoZWNVdGlscy5ieXRlc1RvSGV4KHBheWxvYWQuc2xpY2UoMykpKS50b1Jhd0J5dGVzKGZhbHNlKTtcbn07XG5cbmNvbnN0IGlzVmFsaWRIbWFjID0gKGNhbmRpZGF0ZTogVWludDhBcnJheSwga25vd25Hb29kOiBVaW50OEFycmF5KSA9PiB7XG4gIGlmIChjYW5kaWRhdGUubGVuZ3RoICE9PSBrbm93bkdvb2QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrbm93bkdvb2QubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY2FuZGlkYXRlW2ldICE9PSBrbm93bkdvb2RbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0Q2hhdE1lc3NhZ2UgPSBhc3luYyAoXG4gIHJlY2lwaWVudFNlZWRIZXg6IHN0cmluZyxcbiAgcHVibGljRGVjcnlwdGlvbktleTogc3RyaW5nLFxuICBjaXBoZXJUZXh0SGV4OiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBwcml2YXRlS2V5ID0gZWNVdGlscy5oZXhUb0J5dGVzKHJlY2lwaWVudFNlZWRIZXgpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNEZWNyeXB0aW9uS2V5KTtcbiAgY29uc3Qgc2hhcmVkUHJpdmF0ZUtleSA9IGF3YWl0IGdldFNoYXJlZFByaXZhdGVLZXkocHJpdmF0ZUtleSwgcHVibGljS2V5KTtcbiAgcmV0dXJuIGRlY3J5cHQoc2hhcmVkUHJpdmF0ZUtleSwgY2lwaGVyVGV4dEhleCk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IGFzeW5jIChcbiAgcHJpdmF0ZURlY3J5cHRpb25LZXk6IFVpbnQ4QXJyYXkgfCBzdHJpbmcsXG4gIGNpcGhlclRleHRIZXg6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IGNpcGhlckJ5dGVzID0gZWNVdGlscy5oZXhUb0J5dGVzKGNpcGhlclRleHRIZXgpO1xuICBjb25zdCBtZXRhTGVuZ3RoID0gMTEzO1xuXG4gIGlmIChjaXBoZXJCeXRlcy5sZW5ndGggPCBtZXRhTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNpcGhlciB0ZXh0LiBkYXRhIHRvbyBzbWFsbC4nKTtcbiAgfVxuXG4gIGlmICghKGNpcGhlckJ5dGVzWzBdID49IDIgJiYgY2lwaGVyQnl0ZXNbMF0gPD0gNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lwaGVyIHRleHQuJyk7XG4gIH1cblxuICBjb25zdCBwcml2YXRlS2V5ID0gbm9ybWFsaXplU2VlZChwcml2YXRlRGVjcnlwdGlvbktleSk7XG4gIGNvbnN0IGVwaGVtUHVibGljS2V5ID0gY2lwaGVyQnl0ZXMuc2xpY2UoMCwgNjUpO1xuICBjb25zdCBjaXBoZXJUZXh0TGVuZ3RoID0gY2lwaGVyQnl0ZXMubGVuZ3RoIC0gbWV0YUxlbmd0aDtcbiAgY29uc3QgaXYgPSBjaXBoZXJCeXRlcy5zbGljZSg2NSwgNjUgKyAxNik7XG4gIGNvbnN0IGNpcGhlckFuZEl2ID0gY2lwaGVyQnl0ZXMuc2xpY2UoNjUsIDY1ICsgMTYgKyBjaXBoZXJUZXh0TGVuZ3RoKTtcbiAgY29uc3QgY2lwaGVyVGV4dCA9IGNpcGhlckFuZEl2LnNsaWNlKDE2KTtcbiAgY29uc3QgbXNnTWFjID0gY2lwaGVyQnl0ZXMuc2xpY2UoNjUgKyAxNiArIGNpcGhlclRleHRMZW5ndGgpO1xuICBjb25zdCBzaGFyZWRTZWNyZXRLZXkgPSBhd2FpdCBnZXRTaGFyZWRQcml2YXRlS2V5KHByaXZhdGVLZXksIGVwaGVtUHVibGljS2V5KTtcbiAgY29uc3QgZW5jcnlwdGlvbktleSA9IHNoYXJlZFNlY3JldEtleS5zbGljZSgwLCAxNik7XG4gIGNvbnN0IG1hY0tleSA9IHNoYTI1NihzaGFyZWRTZWNyZXRLZXkuc2xpY2UoMTYpKTtcbiAgY29uc3QgaG1hY0tub3duR29vZCA9IGF3YWl0IGVjVXRpbHMuaG1hY1NoYTI1NihtYWNLZXksIGNpcGhlckFuZEl2KTtcblxuICBpZiAoIWlzVmFsaWRIbWFjKG1zZ01hYywgaG1hY0tub3duR29vZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29ycmVjdCBNQUMnKTtcbiAgfVxuXG4gIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsXG4gICAgZW5jcnlwdGlvbktleSxcbiAgICAnQUVTLUNUUicsXG4gICAgdHJ1ZSxcbiAgICBbJ2RlY3J5cHQnXVxuICApO1xuXG4gIGNvbnN0IGRlY3J5cHRlZEJ1ZmZlciA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgIHsgbmFtZTogJ0FFUy1DVFInLCBjb3VudGVyOiBpdiwgbGVuZ3RoOiAxMjggfSxcbiAgICBjcnlwdG9LZXksXG4gICAgY2lwaGVyVGV4dFxuICApO1xuXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGVjcnlwdGVkQnVmZmVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFyZWRQcml2YXRlS2V5ID0gKFxuICBwcml2S2V5OiBVaW50OEFycmF5LFxuICBwdWJLZXk6IFVpbnQ4QXJyYXlcbikgPT4ge1xuICBjb25zdCBzaGFyZWRTZWNyZXQgPSBnZXRTaGFyZWRTZWNyZXQocHJpdktleSwgcHViS2V5KTtcblxuICByZXR1cm4ga2RmKHNoYXJlZFNlY3JldCwgMzIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY29kZVB1YmxpY0tleSA9IGFzeW5jIChwdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGRlY29kZWQgPSBhd2FpdCBiczU4UHVibGljS2V5VG9CeXRlcyhwdWJsaWNLZXlCYXNlNThDaGVjayk7XG4gIGNvbnN0IHdpdGhQcmVmaXhSZW1vdmVkID0gZGVjb2RlZC5zbGljZSgzKTtcbiAgY29uc3Qgc2VuZGVyUHViS2V5SGV4ID0gZWNVdGlscy5ieXRlc1RvSGV4KHdpdGhQcmVmaXhSZW1vdmVkKTtcblxuICByZXR1cm4gUG9pbnQuZnJvbUhleChzZW5kZXJQdWJLZXlIZXgpLnRvUmF3Qnl0ZXMoZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXJlZFNlY3JldCA9IChwcml2S2V5OiBVaW50OEFycmF5LCBwdWJLZXk6IFVpbnQ4QXJyYXkpID0+IHtcbiAgLy8gcGFzc2luZyB0cnVlIHRvIGNvbXByZXNzIHRoZSBwdWJsaWMga2V5LCBhbmQgdGhlbiBzbGljaW5nIG9mZiB0aGUgZmlyc3QgYnl0ZVxuICAvLyBtYXRjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkZXJpdmUgaW4gdGhlIGVsbGlwdGljIHBhY2thZ2UuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvbm9ibGUtc2VjcDI1NmsxL2lzc3Vlcy8yOCNpc3N1ZWNvbW1lbnQtOTQ2NTM4MDM3XG4gIHJldHVybiBub2JsZUdldFNoYXJlZFNlY3JldChwcml2S2V5LCBwdWJLZXksIHRydWUpLnNsaWNlKDEpO1xufTtcblxuLy8gdGFrZW4gZnJvbSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gdGhlIGRlc28gY2hhdCBhcHA6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGVzby1wcm90b2NvbC9hY2Nlc3MtZ3JvdXAtbWVzc2FnaW5nLWFwcC9ibG9iL2NkNWMyMzdmNWU1NzI5MTk2YWFjMGRhMTYxZDA4NTFiZGU3ODA5MmMvc3JjL3NlcnZpY2VzL2NyeXB0by11dGlscy5zZXJ2aWNlLnRzeCNMOTFcbmV4cG9ydCBjb25zdCBrZGYgPSAoc2VjcmV0OiBVaW50OEFycmF5LCBvdXRwdXRMZW5ndGg6IG51bWJlcikgPT4ge1xuICBsZXQgY3RyID0gMTtcbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoKTtcblxuICB3aGlsZSAod3JpdHRlbiA8IG91dHB1dExlbmd0aCkge1xuICAgIGNvbnN0IGhhc2ggPSBzaGEyNTYoXG4gICAgICBuZXcgVWludDhBcnJheShbXG4gICAgICAgIC4uLm5ldyBVaW50OEFycmF5KFtjdHIgPj4gMjQsIGN0ciA+PiAxNiwgY3RyID4+IDgsIGN0cl0pLFxuICAgICAgICAuLi5zZWNyZXQsXG4gICAgICBdKVxuICAgICk7XG4gICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoWy4uLnJlc3VsdCwgLi4uaGFzaF0pO1xuICAgIHdyaXR0ZW4gKz0gMzI7XG4gICAgY3RyICs9IDE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVGhpcyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGRlclRvSm9zZSBmdW5jdGlvbiBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vQnJpZ2h0c3BhY2Uvbm9kZS1lY2RzYS1zaWctZm9ybWF0dGVyL2Jsb2IvY2EyNWEyZmQ1YWU5ZGQ4NTAzNjA4MTYzMjkzNmU4MDJhNDdhMTI4OS9zcmMvZWNkc2Etc2lnLWZvcm1hdHRlci5qcyNMMzJcbi8vIFRoZSBvcmlnaW5hbCBwYWNrYWdlIGlzIG5vdCBicm93c2VyIGZyaWVuZGx5IGFuZCByZXF1aXJlcyBub2RlIHBvbHlmaWxscy4gV2Vcbi8vIGFsc28gZG9uJ3QgbmVlZCB0byBiZSBxdWl0ZSBhcyBkZWZlbnNpdmUgYXMgdGhlIG9yaWdpbmFsIHBhY2thZ2Ugc2luY2Ugd2Vcbi8vIGhhdmUgZnVsbCBjb250cm9sIG9mIHRoZSBpbnB1dC5cbmZ1bmN0aW9uIGRlclRvSm9zZUVuY29kaW5nKHNpZ25hdHVyZTogVWludDhBcnJheSkge1xuICBjb25zdCBwYXJhbUJ5dGVzID0gMzI7XG5cbiAgbGV0IG9mZnNldCA9IDM7XG4gIGNvbnN0IHJMZW5ndGggPSBzaWduYXR1cmVbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG4gIGNvbnN0IHJPZmZzZXQgPSBvZmZzZXQ7XG4gIG9mZnNldCArPSByTGVuZ3RoICsgMTtcbiAgY29uc3Qgc0xlbmd0aCA9IHNpZ25hdHVyZVtvZmZzZXRdO1xuICBvZmZzZXQgKz0gMTtcbiAgY29uc3Qgc09mZnNldCA9IG9mZnNldDtcbiAgb2Zmc2V0ICs9IHNMZW5ndGg7XG5cbiAgY29uc3QgclBhZGRpbmcgPSBwYXJhbUJ5dGVzIC0gckxlbmd0aDtcbiAgY29uc3Qgc1BhZGRpbmcgPSBwYXJhbUJ5dGVzIC0gc0xlbmd0aDtcblxuICBjb25zdCBvdXRQdXQgPSBuZXcgVWludDhBcnJheShyUGFkZGluZyArIHJMZW5ndGggKyBzUGFkZGluZyArIHNMZW5ndGgpO1xuXG4gIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgclBhZGRpbmc7ICsrb2Zmc2V0KSB7XG4gICAgb3V0UHV0W29mZnNldF0gPSAwO1xuICB9XG5cbiAgb3V0UHV0LnNldChcbiAgICBzaWduYXR1cmUuc2xpY2Uock9mZnNldCArIE1hdGgubWF4KC1yUGFkZGluZywgMCksIHJPZmZzZXQgKyByTGVuZ3RoKSxcbiAgICBvZmZzZXRcbiAgKTtcblxuICBvZmZzZXQgPSBwYXJhbUJ5dGVzO1xuXG4gIGZvciAoY29uc3QgbyA9IG9mZnNldDsgb2Zmc2V0IDwgbyArIHNQYWRkaW5nOyArK29mZnNldCkge1xuICAgIG91dFB1dFtvZmZzZXRdID0gMDtcbiAgfVxuXG4gIG91dFB1dC5zZXQoXG4gICAgc2lnbmF0dXJlLnNsaWNlKHNPZmZzZXQgKyBNYXRoLm1heCgtc1BhZGRpbmcsIDApLCBzT2Zmc2V0ICsgc0xlbmd0aCksXG4gICAgb2Zmc2V0XG4gICk7XG5cbiAgY29uc3Qgb3V0cHV0Q2hhcnMgPSBvdXRQdXQucmVkdWNlKFxuICAgIChkYXRhLCBieXRlKSA9PiBkYXRhICsgU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKSxcbiAgICAnJ1xuICApO1xuXG4gIHJldHVybiB1cmxTYWZlQmFzZTY0KG91dHB1dENoYXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUFjY2Vzc0dyb3VwS2V5UGFpcihcbiAgcHJpdmF0ZUtleUhleDogc3RyaW5nLFxuICBncm91cEtleU5hbWU6IHN0cmluZ1xuKTogS2V5UGFpciB7XG4gIGNvbnN0IHNlY3JldEhhc2ggPSBzaGEyNTZYMihwcml2YXRlS2V5SGV4KTtcbiAgY29uc3Qga2V5TmFtZUhhc2ggPSBzaGEyNTZYMihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZ3JvdXBLZXlOYW1lKSk7XG4gIGNvbnN0IHByaXZhdGVLZXkgPSBzaGEyNTZYMihuZXcgVWludDhBcnJheShbLi4uc2VjcmV0SGFzaCwgLi4ua2V5TmFtZUhhc2hdKSk7XG5cbiAgcmV0dXJuIGtleWdlbihwcml2YXRlS2V5KTtcbn1cbiJdfQ==

@@ -1,3 +0,3 @@

import { AccessGroupEntryResponse, DecryptedMessageEntryResponse, NewMessageEntryResponse, SubmitTransactionResponse } from '../backend-types';
import { AccessGroupPrivateInfo, APIProvider, IdentityConfiguration, IdentityDerivePayload, LoginOptions, StoredUser, SubscriberNotification, TransactionSpendingLimitResponseOptions } from './types';
import { type AccessGroupEntryResponse, type DecryptedMessageEntryResponse, type NewMessageEntryResponse, type SubmitTransactionResponse, type TransactionSpendingLimitResponse } from '../backend-types';
import { type APIProvider, type AccessGroupPrivateInfo, type IdentityConfiguration, type IdentityDerivePayload, type LoginOptions, type StoredUser, type SubscriberNotification, type TransactionSpendingLimitResponseOptions } from './types';
export declare class Identity {

@@ -11,2 +11,8 @@ #private;

get nodeURI(): string;
/**
* The configured transaction spending limit values provided by the initial
* configure call. These can be used to determine the default tx limit count
* to use if a derived key needs to be re-authorized.
*/
get transactionSpendingLimitOptions(): TransactionSpendingLimitResponse;
constructor(windowProvider: typeof globalThis, apiProvider: APIProvider);

@@ -45,3 +51,3 @@ /**

*/
configure({ identityURI, network, nodeURI, spendingLimitOptions, redirectURI, jwtAlgorithm, appName, }: IdentityConfiguration): void;
configure({ identityURI, network, nodeURI, spendingLimitOptions, redirectURI, jwtAlgorithm, appName, storageProvider, identityPresenter, identityRedirectResolver, }: IdentityConfiguration): void;
/**

@@ -76,3 +82,3 @@ * Allows listening to changes to identity state. The subscriber will be

*/
subscribe(subscriber: (notification: SubscriberNotification) => void): void;
subscribe(subscriber: (notification: SubscriberNotification) => void): Promise<void>;
/**

@@ -85,5 +91,15 @@ * Returns the current underlying state of the identity instance. In general,

*/
snapshot(): {
snapshot(): Promise<{
currentUser: StoredUser | null;
alternateUsers: Record<string, StoredUser> | null;
}>;
/**
* Same as snapshot except it runs synchronously. This exists primarily for
* backwards compatibility should only be used in a browser context where
* localStorage is available.
* @deprecated use `snapshot` instead.
*/
snapshotSync(): {
currentUser: StoredUser | null;
alternateUsers: Record<string, StoredUser> | null;
};

@@ -233,3 +249,3 @@ /**

*/
accessGroupStandardDerivation(groupName: string): AccessGroupPrivateInfo;
accessGroupStandardDerivation(groupName: string): Promise<AccessGroupPrivateInfo>;
/**

@@ -288,3 +304,3 @@ * Get a jwt token signed by the derived key issued to the currently active user. This can be used to pass to

*/
setActiveUser(publicKey: string): void;
setActiveUser(publicKey: string): Promise<void>;
/**

@@ -300,7 +316,11 @@ * Reloads the derived key permissions for the active user. NOTE: In general

/**
* Checks if a user's derived key has the permissions to perform a given
* action or batch of actions. The permissions are passed in as an object with
* the same shape as the `TransactionSpendingLimitResponseOptions` type, which
* is the same as the `spendingLimitOptions` passed to the configure method.
* Use this in a browser context where localStorage is used as the storage
* provider, and it is necessary to check permissions synchronously to prevent
* issues with pop up blockers. If a user's derived key has the permissions to
* perform a given action or batch of actions. The permissions are passed in
* as an object with the same shape as the
* `TransactionSpendingLimitResponseOptions` type, which is the same as the
* `spendingLimitOptions` passed to the configure method.
*
*
* @example

@@ -317,4 +337,24 @@ * Here we check if the user has the permissions to submit at least 1 post.

*/
hasPermissions(permissionsToCheck: Partial<TransactionSpendingLimitResponseOptions>): boolean;
hasPermissionsSync(permissionsToCheck: Partial<TransactionSpendingLimitResponseOptions>): boolean;
/**
* Use this if the storage provider is asynchronous (react native, etc). If a
* user's derived key has the permissions to perform a given action or batch
* of actions. The permissions are passed in as an object with the same shape
* as the `TransactionSpendingLimitResponseOptions` type, which is the same as
* the `spendingLimitOptions` passed to the configure method.
*
*
* @example
* Here we check if the user has the permissions to submit at least 1 post.
*
* ```typescript
* const hasPermissions = await identity.hasPermissions({
* TransactionCountLimitMap: {
* SUBMIT_POST: 1,
* },
* });
* ```
*/
hasPermissionsAsync(permissionsToCheck: Partial<TransactionSpendingLimitResponseOptions>): Promise<boolean>;
/**
* This method will request permissions from the user to perform an action or

@@ -321,0 +361,0 @@ * batch of actions. It will open an identity window and prompt the user to

import { TransactionSpendingLimitResponse } from '../backend-types';
import { TransactionSpendingLimitResponseOptions } from './types';
export declare function compareTransactionSpendingLimits(expectedPermissions: any, actualPermissions: any): boolean;
export declare function compareTransactionSpendingLimits(expectedPermissions: TransactionSpendingLimitResponseOptions, actualPermissions: TransactionSpendingLimitResponse): boolean;
export declare function buildTransactionSpendingLimitResponse(spendingLimitOptions: Partial<TransactionSpendingLimitResponseOptions>): TransactionSpendingLimitResponse;
export declare function guardTxPermission(spendingLimitOptions: TransactionSpendingLimitResponseOptions): Promise<unknown>;

@@ -0,1 +1,11 @@

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { identity } from '../identity';
export function compareTransactionSpendingLimits(expectedPermissions, actualPermissions) {

@@ -8,10 +18,70 @@ let hasAllPermissions = true;

walkObj(expectedPermissions, (expectedVal, path) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
// If the actual permissions are configured with any of the special "allow
// anything" mappings then we rewrite the lookup path for any explicit
// mapping to match on the "allow any" mapping. In some cases, simply
// compare the OpCounts and return early if their can be only 1 mapping.
switch (path === null || path === void 0 ? void 0 : path[0]) {
case 'AccessGroupLimitMap':
if ((_a = actualPermissions === null || actualPermissions === void 0 ? void 0 : actualPermissions.AccessGroupLimitMap) === null || _a === void 0 ? void 0 : _a.find((map) => {
var _a, _b;
return (map.ScopeType === 'Any' &&
map.AccessGroupKeyName === '' &&
map.OperationType === 'Any' &&
map.OpCount >=
normalizeCount((_b = (_a = expectedPermissions === null || expectedPermissions === void 0 ? void 0 : expectedPermissions.AccessGroupLimitMap) === null || _a === void 0 ? void 0 : _a[Number(path[1])]) === null || _b === void 0 ? void 0 : _b.OpCount));
})) {
return;
}
break;
case 'AccessGroupMemberLimitMap':
if ((_b = actualPermissions === null || actualPermissions === void 0 ? void 0 : actualPermissions.AccessGroupMemberLimitMap) === null || _b === void 0 ? void 0 : _b.find((map) => {
var _a, _b;
return (map.ScopeType === 'Any' &&
map.AccessGroupKeyName === '' &&
map.OperationType === 'Any' &&
map.OpCount >=
normalizeCount((_b = (_a = expectedPermissions === null || expectedPermissions === void 0 ? void 0 : expectedPermissions.AccessGroupMemberLimitMap) === null || _a === void 0 ? void 0 : _a[Number(path[1])]) === null || _b === void 0 ? void 0 : _b.OpCount));
})) {
return;
}
break;
case 'AssociationLimitMap':
if ((_c = actualPermissions === null || actualPermissions === void 0 ? void 0 : actualPermissions.AssociationLimitMap) === null || _c === void 0 ? void 0 : _c.find((map) => {
var _a, _b, _c, _d;
return (map.AssociationClass ===
((_b = (_a = expectedPermissions === null || expectedPermissions === void 0 ? void 0 : expectedPermissions.AssociationLimitMap) === null || _a === void 0 ? void 0 : _a[Number(path[1])]) === null || _b === void 0 ? void 0 : _b.AssociationClass) &&
map.AppScopeType === 'Any' &&
map.AssociationType === '' &&
map.AssociationOperation === 'Any' &&
map.OpCount >=
normalizeCount((_d = (_c = expectedPermissions === null || expectedPermissions === void 0 ? void 0 : expectedPermissions.AssociationLimitMap) === null || _c === void 0 ? void 0 : _c[Number(path[1])]) === null || _d === void 0 ? void 0 : _d.OpCount));
})) {
return;
}
break;
case 'CreatorCoinOperationLimitMap':
if ((_d = actualPermissions === null || actualPermissions === void 0 ? void 0 : actualPermissions.CreatorCoinOperationLimitMap) === null || _d === void 0 ? void 0 : _d['']) {
path =
typeof ((_e = actualPermissions === null || actualPermissions === void 0 ? void 0 : actualPermissions.CreatorCoinOperationLimitMap['']) === null || _e === void 0 ? void 0 : _e.any) ===
'number'
? ['CreatorCoinOperationLimitMap', '', 'any']
: ['CreatorCoinOperationLimitMap', '', path[path.length - 1]];
}
break;
case 'NFTOperationLimitMap':
if ((_g = (_f = actualPermissions === null || actualPermissions === void 0 ? void 0 : actualPermissions.NFTOperationLimitMap) === null || _f === void 0 ? void 0 : _f['']) === null || _g === void 0 ? void 0 : _g[0]) {
path =
typeof ((_k = (_j = (_h = actualPermissions === null || actualPermissions === void 0 ? void 0 : actualPermissions.NFTOperationLimitMap) === null || _h === void 0 ? void 0 : _h['']) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.any) ===
'number'
? ['NFTOperationLimitMap', '', '0', 'any']
: ['NFTOperationLimitMap', '', '0', path[path.length - 1]];
}
break;
}
const actualVal = getDeepValue(actualPermissions, path);
if (typeof actualVal === 'undefined' ||
(typeof actualVal === 'number' &&
typeof expectedVal === 'number' &&
actualVal < expectedVal) ||
(typeof actualVal === 'number' &&
expectedVal === 'UNLIMITED' &&
actualVal < 1e9)) {
actualVal < normalizeCount(expectedVal)) ||
(typeof actualVal === 'string' && actualVal !== expectedVal)) {
hasAllPermissions = false;

@@ -23,3 +93,3 @@ }

export function buildTransactionSpendingLimitResponse(spendingLimitOptions) {
var _a;
var _a, _b;
if (spendingLimitOptions.IsUnlimited) {

@@ -57,13 +127,32 @@ return {

}
if (result.TransactionCountLimitMap) {
if (typeof result.TransactionCountLimitMap['AUTHORIZE_DERIVED_KEY'] ===
'undefined') {
result.TransactionCountLimitMap = Object.assign(Object.assign({}, result.TransactionCountLimitMap), { AUTHORIZE_DERIVED_KEY: 1 });
}
else if (result.TransactionCountLimitMap['AUTHORIZE_DERIVED_KEY'] < 0) {
delete result.TransactionCountLimitMap['AUTHORIZE_DERIVED_KEY'];
}
result.TransactionCountLimitMap = (_b = result.TransactionCountLimitMap) !== null && _b !== void 0 ? _b : {};
if (typeof result.TransactionCountLimitMap['AUTHORIZE_DERIVED_KEY'] ===
'undefined') {
result.TransactionCountLimitMap = Object.assign(Object.assign({}, result.TransactionCountLimitMap), { AUTHORIZE_DERIVED_KEY: 1 });
}
else if (result.TransactionCountLimitMap['AUTHORIZE_DERIVED_KEY'] < 0) {
delete result.TransactionCountLimitMap['AUTHORIZE_DERIVED_KEY'];
}
return result;
}
export function guardTxPermission(spendingLimitOptions) {
var _a, _b, _c;
return __awaiter(this, void 0, void 0, function* () {
let hasPermissions = false;
try {
hasPermissions = identity.hasPermissionsSync(spendingLimitOptions);
}
catch (e) {
if ((_a = e === null || e === void 0 ? void 0 : e.message) === null || _a === void 0 ? void 0 : _a.includes('You must be in a browser context to use hasPermissionsSync')) {
// Try falling back to hasPermissionsAsync
hasPermissions = yield identity.hasPermissionsAsync(spendingLimitOptions);
}
}
if (!hasPermissions) {
return identity.requestPermissions(Object.assign(Object.assign({}, spendingLimitOptions), { GlobalDESOLimit: ((_b = identity.transactionSpendingLimitOptions.GlobalDESOLimit) !== null && _b !== void 0 ? _b : 0) +
((_c = spendingLimitOptions.GlobalDESOLimit) !== null && _c !== void 0 ? _c : 0) }));
}
return Promise.resolve();
});
}
function walkObj(node, callback, path = []) {

@@ -106,2 +195,10 @@ if (typeof node === 'object' && node !== null) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWRlbnRpdHkvcGVybWlzc2lvbnMtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxtQkFBd0IsRUFDeEIsaUJBQXNCO0lBRXRCLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBRTdCLG9FQUFvRTtJQUNwRSxJQUFJLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLFdBQVcsRUFBRTtRQUNsQyxPQUFPLGlCQUFpQixDQUFDO0tBQzFCO0lBRUQsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2pELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUNFLE9BQU8sU0FBUyxLQUFLLFdBQVc7WUFDaEMsQ0FBQyxPQUFPLFNBQVMsS0FBSyxRQUFRO2dCQUM1QixPQUFPLFdBQVcsS0FBSyxRQUFRO2dCQUMvQixTQUFTLEdBQUcsV0FBVyxDQUFDO1lBQzFCLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUTtnQkFDNUIsV0FBVyxLQUFLLFdBQVc7Z0JBQzNCLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFDbEI7WUFDQSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7U0FDM0I7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBVSxxQ0FBcUMsQ0FDbkQsb0JBQXNFOztJQUV0RSxJQUFJLG9CQUFvQixDQUFDLFdBQVcsRUFBRTtRQUNwQyxPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztLQUNIO0lBRUQsSUFBSSxDQUFBLE1BQUEsb0JBQW9CLENBQUMsZUFBZSwwQ0FBRSxRQUFRLEVBQUUsTUFBSyxX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O0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBUSxFQUFFLElBQWM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhCLElBQ0UsR0FBRyxLQUFLLElBQUk7UUFDWixPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFDbkM7UUFDQSxPQUFPO0tBQ1I7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3JCO1NBQU07UUFDTCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEdBQVEsRUFBRSxJQUFjLEVBQUUsS0FBVTtJQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxXQUFXLEVBQUU7UUFDdkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUNuQjtJQUVELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUN0QjtTQUFNO1FBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlIH0gZnJvbSAnLi4vYmFja2VuZC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0cyhcbiAgZXhwZWN0ZWRQZXJtaXNzaW9uczogYW55LFxuICBhY3R1YWxQZXJtaXNzaW9uczogYW55XG4pOiBib29sZWFuIHtcbiAgbGV0IGhhc0FsbFBlcm1pc3Npb25zID0gdHJ1ZTtcblxuICAvLyBpZiB0aGUga2V5IGlzIHVubGltaXRlZCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYW55dGhpbmcgZWxzZVxuICBpZiAoYWN0dWFsUGVybWlzc2lvbnM/LklzVW5saW1pdGVkKSB7XG4gICAgcmV0dXJuIGhhc0FsbFBlcm1pc3Npb25zO1xuICB9XG5cbiAgd2Fsa09iaihleHBlY3RlZFBlcm1pc3Npb25zLCAoZXhwZWN0ZWRWYWwsIHBhdGgpID0+IHtcbiAgICBjb25zdCBhY3R1YWxWYWwgPSBnZXREZWVwVmFsdWUoYWN0dWFsUGVybWlzc2lvbnMsIHBhdGgpO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBhY3R1YWxWYWwgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAodHlwZW9mIGFjdHVhbFZhbCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkVmFsID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBhY3R1YWxWYWwgPCBleHBlY3RlZFZhbCkgfHxcbiAgICAgICh0eXBlb2YgYWN0dWFsVmFsID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBleHBlY3RlZFZhbCA9PT0gJ1VOTElNSVRFRCcgJiZcbiAgICAgICAgYWN0dWFsVmFsIDwgMWU5KVxuICAgICkge1xuICAgICAgaGFzQWxsUGVybWlzc2lvbnMgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBoYXNBbGxQZXJtaXNzaW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UoXG4gIHNwZW5kaW5nTGltaXRPcHRpb25zOiBQYXJ0aWFsPFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlT3B0aW9ucz5cbik6IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlIHtcbiAgaWYgKHNwZW5kaW5nTGltaXRPcHRpb25zLklzVW5saW1pdGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIElzVW5saW1pdGVkOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBpZiAoc3BlbmRpbmdMaW1pdE9wdGlvbnMuR2xvYmFsREVTT0xpbWl0Py50b1N0cmluZygpID09PSAnVU5MSU1JVEVEJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdHbG9iYWxERVNPTGltaXQgY2Fubm90IGJlIHVubGltaXRlZC4gWW91IG11c3Qgc3BlY2lmeSBhIHNwZWNpZmljIGxpbWl0LCBvciBzZXQgdGhlIElzVW5saW1pdGVkIGZsYWcgdG8gdHJ1ZS4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UgPSB7fTtcblxuICB3YWxrT2JqKFxuICAgIHNwZW5kaW5nTGltaXRPcHRpb25zLFxuICAgICh2YWwsIHBhdGgpID0+IHtcbiAgICAgIHNldERlZXBWYWx1ZShyZXN1bHQsIHBhdGgsIHZhbCA9PT0gJ1VOTElNSVRFRCcgPyAxZTkgOiB2YWwpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBpZiAocmVzdWx0LkFjY2Vzc0dyb3VwTGltaXRNYXApIHtcbiAgICByZXN1bHQuQWNjZXNzR3JvdXBMaW1pdE1hcCA9IE9iamVjdC52YWx1ZXMocmVzdWx0LkFjY2Vzc0dyb3VwTGltaXRNYXApO1xuICB9XG4gIGlmIChyZXN1bHQuQWNjZXNzR3JvdXBNZW1iZXJMaW1pdE1hcCkge1xuICAgIHJlc3VsdC5BY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHJlc3VsdC5BY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwXG4gICAgKTtcbiAgfVxuICBpZiAocmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXApIHtcbiAgICByZXN1bHQuQXNzb2NpYXRpb25MaW1pdE1hcCA9IE9iamVjdC52YWx1ZXMocmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXApO1xuICAgIC8vIFZhbGlkYXRlIGVhY2ggYXNzb2NpYXRpb24gbGltaXQgb2JqZWN0XG4gICAgcmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXAuZm9yRWFjaCgoYXNzb2NpYXRpb25MaW1pdEl0ZW0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgYXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgJiZcbiAgICAgICAgYXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwU2NvcGVUeXBlID09PSAnQW55J1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgbXVzdCBiZSBzZXQgdG8gdW5kZWZpbmVkIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBBcHBTY29wZVR5cGUgaXMgQW55LiBZb3UgcHJvdmlkZWQgJHthc3NvY2lhdGlvbkxpbWl0SXRlbS5BcHBQdWJsaWNLZXlCYXNlNThDaGVja31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICEvXig/OkJDMXx0QkMpLisvLnRlc3QoYXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwUHVibGljS2V5QmFzZTU4Q2hlY2spICYmXG4gICAgICAgIGFzc29jaWF0aW9uTGltaXRJdGVtLkFwcFNjb3BlVHlwZSA9PT0gJ1Njb3BlZCdcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEFwcFB1YmxpY0tleUJhc2U1OENoZWNrIG11c3QgYmUgc2V0IHRvIGEgdmFsaWQgcHVibGljIGtleSBpZiBBcHBTY29wZVR5cGUgaXMgU2NvcGVkLiBZb3UgcHJvdmlkZWQ6ICR7YXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwUHVibGljS2V5QmFzZTU4Q2hlY2t9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXApIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgcmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcFsnQVVUSE9SSVpFX0RFUklWRURfS0VZJ10gPT09XG4gICAgICAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgcmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcCA9IHtcbiAgICAgICAgLi4ucmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcCxcbiAgICAgICAgQVVUSE9SSVpFX0RFUklWRURfS0VZOiAxLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXBbJ0FVVEhPUklaRV9ERVJJVkVEX0tFWSddIDwgMCkge1xuICAgICAgZGVsZXRlIHJlc3VsdC5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXBbJ0FVVEhPUklaRV9ERVJJVkVEX0tFWSddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB3YWxrT2JqKFxuICBub2RlOiBhbnksXG4gIGNhbGxiYWNrOiAodmFsOiBhbnksIHBhdGg6IHN0cmluZ1tdKSA9PiB2b2lkLFxuICBwYXRoOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBub2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgd2Fsa09iaihub2RlW2tleXNbaV1dLCBjYWxsYmFjaywgcGF0aC5jb25jYXQoa2V5c1tpXSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayhub2RlLCBwYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWVwVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3QgY3VycktleSA9IHBhdGhbMF07XG5cbiAgaWYgKFxuICAgIG9iaiA9PT0gbnVsbCB8fFxuICAgIHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIG9ialtjdXJyS2V5XSA9PT0gJ3VuZGVmaW5lZCdcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIG9ialtjdXJyS2V5XTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0RGVlcFZhbHVlKG9ialtjdXJyS2V5XSwgcGF0aC5zbGljZSgxKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RGVlcFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmdbXSwgdmFsdWU6IGFueSkge1xuICBjb25zdCBjdXJyS2V5ID0gcGF0aFswXTtcbiAgaWYgKHR5cGVvZiBvYmpbY3VycktleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgb2JqW2N1cnJLZXldID0ge307XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICBvYmpbY3VycktleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBzZXREZWVwVmFsdWUob2JqW2N1cnJLZXldLCBwYXRoLnNsaWNlKDEpLCB2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
function normalizeCount(count) {
// NOTE: If checking for unlimited, we just check if it's greater than 1
// because there is no good way to know if the original value was 'UNLIMITED'
// or some other numeric. As long as the value is greater than 1, we just let
// it pass as 'UNLIMITED.' In the end this shouldn't matter since we fail the
// check if there are no more transactions left to spend.
return count === 'UNLIMITED' || count === 1e9 ? 1 : count !== null && count !== void 0 ? count : 0;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWRlbnRpdHkvcGVybWlzc2lvbnMtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2QyxNQUFNLFVBQVUsZ0NBQWdDLENBQzlDLG1CQUE0RCxFQUM1RCxpQkFBbUQ7SUFFbkQsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFFN0Isb0VBQW9FO0lBQ3BFLElBQUksaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsV0FBVyxFQUFFO1FBQ2xDLE9BQU8saUJBQWlCLENBQUM7S0FDMUI7SUFFRCxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUU7O1FBQ2pELDBFQUEwRTtRQUMxRSxzRUFBc0U7UUFDdEUscUVBQXFFO1FBQ3JFLHdFQUF3RTtRQUN4RSxRQUFRLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxDQUFDLENBQUMsRUFBRTtZQUNqQixLQUFLLHFCQUFxQjtnQkFDeEIsSUFDRSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLG1CQUFtQiwwQ0FBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTs7b0JBQ25ELE9BQU8sQ0FDTCxHQUFHLENBQUMsU0FBUyxLQUFLLEtBQUs7d0JBQ3ZCLEdBQUcsQ0FBQyxrQkFBa0IsS0FBSyxFQUFFO3dCQUM3QixHQUFHLENBQUMsYUFBYSxLQUFLLEtBQUs7d0JBQzNCLEdBQUcsQ0FBQyxPQUFPOzRCQUNULGNBQWMsQ0FDWixNQUFBLE1BQUEsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUUsbUJBQW1CLDBDQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQ0FDdkQsT0FBTyxDQUNaLENBQ0osQ0FBQztnQkFDSixDQUFDLENBQUMsRUFDRjtvQkFDQSxPQUFPO2lCQUNSO2dCQUNELE1BQU07WUFDUixLQUFLLDJCQUEyQjtnQkFDOUIsSUFDRSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLHlCQUF5QiwwQ0FBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTs7b0JBQ3pELE9BQU8sQ0FDTCxHQUFHLENBQUMsU0FBUyxLQUFLLEtBQUs7d0JBQ3ZCLEdBQUcsQ0FBQyxrQkFBa0IsS0FBSyxFQUFFO3dCQUM3QixHQUFHLENBQUMsYUFBYSxLQUFLLEtBQUs7d0JBQzNCLEdBQUcsQ0FBQyxPQUFPOzRCQUNULGNBQWMsQ0FDWixNQUFBLE1BQUEsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUUseUJBQXlCLDBDQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2hCLDBDQUFFLE9BQU8sQ0FDWCxDQUNKLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLEVBQ0Y7b0JBQ0EsT0FBTztpQkFDUjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxxQkFBcUI7Z0JBQ3hCLElBQ0UsTUFBQSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxtQkFBbUIsMENBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7O29CQUNuRCxPQUFPLENBQ0wsR0FBRyxDQUFDLGdCQUFnQjt5QkFDbEIsTUFBQSxNQUFBLG1CQUFtQixhQUFuQixtQkFBbUIsdUJBQW5CLG1CQUFtQixDQUFFLG1CQUFtQiwwQ0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMENBQ3ZELGdCQUFnQixDQUFBO3dCQUN0QixHQUFHLENBQUMsWUFBWSxLQUFLLEtBQUs7d0JBQzFCLEdBQUcsQ0FBQyxlQUFlLEtBQUssRUFBRTt3QkFDMUIsR0FBRyxDQUFDLG9CQUFvQixLQUFLLEtBQUs7d0JBQ2xDLEdBQUcsQ0FBQyxPQUFPOzRCQUNULGNBQWMsQ0FDWixNQUFBLE1BQUEsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUUsbUJBQW1CLDBDQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQ0FDdkQsT0FBTyxDQUNaLENBQ0osQ0FBQztnQkFDSixDQUFDLENBQUMsRUFDRjtvQkFDQSxPQUFPO2lCQUNSO2dCQUNELE1BQU07WUFDUixLQUFLLDhCQUE4QjtnQkFDakMsSUFBSSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLDRCQUE0QiwwQ0FBRyxFQUFFLENBQUMsRUFBRTtvQkFDekQsSUFBSTt3QkFDRixPQUFPLENBQUEsTUFBQSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsMENBQUUsR0FBRyxDQUFBOzRCQUMvRCxRQUFROzRCQUNOLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUM7NEJBQzdDLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuRTtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxzQkFBc0I7Z0JBQ3pCLElBQUksTUFBQSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLG9CQUFvQiwwQ0FBRyxFQUFFLENBQUMsMENBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3RELElBQUk7d0JBQ0YsT0FBTyxDQUFBLE1BQUEsTUFBQSxNQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLG9CQUFvQiwwQ0FBRyxFQUFFLENBQUMsMENBQUcsQ0FBQyxDQUFDLDBDQUFFLEdBQUcsQ0FBQTs0QkFDOUQsUUFBUTs0QkFDTixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQzs0QkFDMUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoRTtnQkFDRCxNQUFNO1NBQ1Q7UUFFRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEQsSUFDRSxPQUFPLFNBQVMsS0FBSyxXQUFXO1lBQ2hDLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUTtnQkFDNUIsU0FBUyxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxDQUFDLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssV0FBVyxDQUFDLEVBQzVEO1lBQ0EsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLGlCQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUscUNBQXFDLENBQ25ELG9CQUFzRTs7SUFFdEUsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUU7UUFDcEMsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUM7S0FDSDtJQUVELElBQUksQ0FBQSxNQUFBLG9CQUFvQixDQUFDLGVBQWUsMENBQUUsUUFBUSxFQUFFLE1BQUssV0FBVyxFQUFFO1FBQ3BFLE1BQU0sSUFBSSxLQUFLLENBQ2IsOEdBQThHLENBQy9HLENBQUM7S0FDSDtJQUVELE1BQU0sTUFBTSxHQUFxQyxFQUFFLENBQUM7SUFFcEQsT0FBTyxDQUNMLG9CQUFvQixFQUNwQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNaLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBRUYsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUU7UUFDOUIsTUFBTSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDeEU7SUFDRCxJQUFJLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRTtRQUNwQyxNQUFNLENBQUMseUJBQXlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDOUMsTUFBTSxDQUFDLHlCQUF5QixDQUNqQyxDQUFDO0tBQ0g7SUFDRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRTtRQUM5QixNQUFNLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2RSx5Q0FBeUM7UUFDekMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixFQUFFLEVBQUU7WUFDMUQsSUFDRSxvQkFBb0IsQ0FBQyx1QkFBdUI7Z0JBQzVDLG9CQUFvQixDQUFDLFlBQVksS0FBSyxLQUFLLEVBQzNDO2dCQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEdBQTRHLG9CQUFvQixDQUFDLHVCQUF1QixFQUFFLENBQzNKLENBQUM7YUFDSDtZQUNELElBQ0UsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3BFLG9CQUFvQixDQUFDLFlBQVksS0FBSyxRQUFRLEVBQzlDO2dCQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0dBQXNHLG9CQUFvQixDQUFDLHVCQUF1QixFQUFFLENBQ3JKLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxNQUFNLENBQUMsd0JBQXdCLEdBQUcsTUFBQSxNQUFNLENBQUMsd0JBQXdCLG1DQUFJLEVBQUUsQ0FBQztJQUV4RSxJQUNFLE9BQU8sTUFBTSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDO1FBQy9ELFdBQVcsRUFDWDtRQUNBLE1BQU0sQ0FBQyx3QkFBd0IsbUNBQzFCLE1BQU0sQ0FBQyx3QkFBd0IsS0FDbEMscUJBQXFCLEVBQUUsQ0FBQyxHQUN6QixDQUFDO0tBQ0g7U0FBTSxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN2RSxPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQ2pFO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBZ0IsaUJBQWlCLENBQ3JDLG9CQUE2RDs7O1FBRTdELElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJO1lBQ0YsY0FBYyxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3BFO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDZixJQUNFLE1BQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLE9BQU8sMENBQUUsUUFBUSxDQUNsQiw0REFBNEQsQ0FDN0QsRUFDRDtnQkFDQSwwQ0FBMEM7Z0JBQzFDLGNBQWMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQzNFO1NBQ0Y7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE9BQU8sUUFBUSxDQUFDLGtCQUFrQixpQ0FDN0Isb0JBQW9CLEtBQ3ZCLGVBQWUsRUFDYixDQUFDLE1BQUEsUUFBUSxDQUFDLCtCQUErQixDQUFDLGVBQWUsbUNBQUksQ0FBQyxDQUFDO29CQUMvRCxDQUFDLE1BQUEsb0JBQW9CLENBQUMsZUFBZSxtQ0FBSSxDQUFDLENBQUMsSUFDN0MsQ0FBQztTQUNKO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7O0NBQzFCO0FBRUQsU0FBUyxPQUFPLENBQ2QsSUFBUyxFQUNULFFBQTRDLEVBQzVDLE9BQWlCLEVBQUU7SUFFbkIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtRQUM3QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RDtLQUNGO1NBQU07UUFDTCxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEdBQVEsRUFBRSxJQUFjO0lBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4QixJQUNFLEdBQUcsS0FBSyxJQUFJO1FBQ1osT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxXQUFXLEVBQ25DO1FBQ0EsT0FBTztLQUNSO0lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNyQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNyQjtTQUFNO1FBQ0wsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsRDtBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUFRLEVBQUUsSUFBYyxFQUFFLEtBQVU7SUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO1FBQ3ZDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDbkI7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDdEI7U0FBTTtRQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNsRDtBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxLQUE0QjtJQUNsRCx3RUFBd0U7SUFDeEUsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UseURBQXlEO0lBQ3pELE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLENBQUMsQ0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UgfSBmcm9tICcuLi9iYWNrZW5kLXR5cGVzJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vaWRlbnRpdHknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2VPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0cyhcbiAgZXhwZWN0ZWRQZXJtaXNzaW9uczogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2VPcHRpb25zLFxuICBhY3R1YWxQZXJtaXNzaW9uczogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2Vcbik6IGJvb2xlYW4ge1xuICBsZXQgaGFzQWxsUGVybWlzc2lvbnMgPSB0cnVlO1xuXG4gIC8vIGlmIHRoZSBrZXkgaXMgdW5saW1pdGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhbnl0aGluZyBlbHNlXG4gIGlmIChhY3R1YWxQZXJtaXNzaW9ucz8uSXNVbmxpbWl0ZWQpIHtcbiAgICByZXR1cm4gaGFzQWxsUGVybWlzc2lvbnM7XG4gIH1cblxuICB3YWxrT2JqKGV4cGVjdGVkUGVybWlzc2lvbnMsIChleHBlY3RlZFZhbCwgcGF0aCkgPT4ge1xuICAgIC8vIElmIHRoZSBhY3R1YWwgcGVybWlzc2lvbnMgYXJlIGNvbmZpZ3VyZWQgd2l0aCBhbnkgb2YgdGhlIHNwZWNpYWwgXCJhbGxvd1xuICAgIC8vIGFueXRoaW5nXCIgbWFwcGluZ3MgdGhlbiB3ZSByZXdyaXRlIHRoZSBsb29rdXAgcGF0aCBmb3IgYW55IGV4cGxpY2l0XG4gICAgLy8gbWFwcGluZyB0byBtYXRjaCBvbiB0aGUgXCJhbGxvdyBhbnlcIiBtYXBwaW5nLiBJbiBzb21lIGNhc2VzLCBzaW1wbHlcbiAgICAvLyBjb21wYXJlIHRoZSBPcENvdW50cyBhbmQgcmV0dXJuIGVhcmx5IGlmIHRoZWlyIGNhbiBiZSBvbmx5IDEgbWFwcGluZy5cbiAgICBzd2l0Y2ggKHBhdGg/LlswXSkge1xuICAgICAgY2FzZSAnQWNjZXNzR3JvdXBMaW1pdE1hcCc6XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhY3R1YWxQZXJtaXNzaW9ucz8uQWNjZXNzR3JvdXBMaW1pdE1hcD8uZmluZCgobWFwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBtYXAuU2NvcGVUeXBlID09PSAnQW55JyAmJlxuICAgICAgICAgICAgICBtYXAuQWNjZXNzR3JvdXBLZXlOYW1lID09PSAnJyAmJlxuICAgICAgICAgICAgICBtYXAuT3BlcmF0aW9uVHlwZSA9PT0gJ0FueScgJiZcbiAgICAgICAgICAgICAgbWFwLk9wQ291bnQgPj1cbiAgICAgICAgICAgICAgICBub3JtYWxpemVDb3VudChcbiAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUGVybWlzc2lvbnM/LkFjY2Vzc0dyb3VwTGltaXRNYXA/LltOdW1iZXIocGF0aFsxXSldXG4gICAgICAgICAgICAgICAgICAgID8uT3BDb3VudFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQWNjZXNzR3JvdXBNZW1iZXJMaW1pdE1hcCc6XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhY3R1YWxQZXJtaXNzaW9ucz8uQWNjZXNzR3JvdXBNZW1iZXJMaW1pdE1hcD8uZmluZCgobWFwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBtYXAuU2NvcGVUeXBlID09PSAnQW55JyAmJlxuICAgICAgICAgICAgICBtYXAuQWNjZXNzR3JvdXBLZXlOYW1lID09PSAnJyAmJlxuICAgICAgICAgICAgICBtYXAuT3BlcmF0aW9uVHlwZSA9PT0gJ0FueScgJiZcbiAgICAgICAgICAgICAgbWFwLk9wQ291bnQgPj1cbiAgICAgICAgICAgICAgICBub3JtYWxpemVDb3VudChcbiAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUGVybWlzc2lvbnM/LkFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXA/LltcbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyKHBhdGhbMV0pXG4gICAgICAgICAgICAgICAgICBdPy5PcENvdW50XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBc3NvY2lhdGlvbkxpbWl0TWFwJzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFjdHVhbFBlcm1pc3Npb25zPy5Bc3NvY2lhdGlvbkxpbWl0TWFwPy5maW5kKChtYXApID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIG1hcC5Bc3NvY2lhdGlvbkNsYXNzID09PVxuICAgICAgICAgICAgICAgIGV4cGVjdGVkUGVybWlzc2lvbnM/LkFzc29jaWF0aW9uTGltaXRNYXA/LltOdW1iZXIocGF0aFsxXSldXG4gICAgICAgICAgICAgICAgICA/LkFzc29jaWF0aW9uQ2xhc3MgJiZcbiAgICAgICAgICAgICAgbWFwLkFwcFNjb3BlVHlwZSA9PT0gJ0FueScgJiZcbiAgICAgICAgICAgICAgbWFwLkFzc29jaWF0aW9uVHlwZSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgbWFwLkFzc29jaWF0aW9uT3BlcmF0aW9uID09PSAnQW55JyAmJlxuICAgICAgICAgICAgICBtYXAuT3BDb3VudCA+PVxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZUNvdW50KFxuICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRQZXJtaXNzaW9ucz8uQXNzb2NpYXRpb25MaW1pdE1hcD8uW051bWJlcihwYXRoWzFdKV1cbiAgICAgICAgICAgICAgICAgICAgPy5PcENvdW50XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdDcmVhdG9yQ29pbk9wZXJhdGlvbkxpbWl0TWFwJzpcbiAgICAgICAgaWYgKGFjdHVhbFBlcm1pc3Npb25zPy5DcmVhdG9yQ29pbk9wZXJhdGlvbkxpbWl0TWFwPy5bJyddKSB7XG4gICAgICAgICAgcGF0aCA9XG4gICAgICAgICAgICB0eXBlb2YgYWN0dWFsUGVybWlzc2lvbnM/LkNyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXBbJyddPy5hbnkgPT09XG4gICAgICAgICAgICAnbnVtYmVyJ1xuICAgICAgICAgICAgICA/IFsnQ3JlYXRvckNvaW5PcGVyYXRpb25MaW1pdE1hcCcsICcnLCAnYW55J11cbiAgICAgICAgICAgICAgOiBbJ0NyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXAnLCAnJywgcGF0aFtwYXRoLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ05GVE9wZXJhdGlvbkxpbWl0TWFwJzpcbiAgICAgICAgaWYgKGFjdHVhbFBlcm1pc3Npb25zPy5ORlRPcGVyYXRpb25MaW1pdE1hcD8uWycnXT8uWzBdKSB7XG4gICAgICAgICAgcGF0aCA9XG4gICAgICAgICAgICB0eXBlb2YgYWN0dWFsUGVybWlzc2lvbnM/Lk5GVE9wZXJhdGlvbkxpbWl0TWFwPy5bJyddPy5bMF0/LmFueSA9PT1cbiAgICAgICAgICAgICdudW1iZXInXG4gICAgICAgICAgICAgID8gWydORlRPcGVyYXRpb25MaW1pdE1hcCcsICcnLCAnMCcsICdhbnknXVxuICAgICAgICAgICAgICA6IFsnTkZUT3BlcmF0aW9uTGltaXRNYXAnLCAnJywgJzAnLCBwYXRoW3BhdGgubGVuZ3RoIC0gMV1dO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFZhbCA9IGdldERlZXBWYWx1ZShhY3R1YWxQZXJtaXNzaW9ucywgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgYWN0dWFsVmFsID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgKHR5cGVvZiBhY3R1YWxWYWwgPT09ICdudW1iZXInICYmXG4gICAgICAgIGFjdHVhbFZhbCA8IG5vcm1hbGl6ZUNvdW50KGV4cGVjdGVkVmFsKSkgfHxcbiAgICAgICh0eXBlb2YgYWN0dWFsVmFsID09PSAnc3RyaW5nJyAmJiBhY3R1YWxWYWwgIT09IGV4cGVjdGVkVmFsKVxuICAgICkge1xuICAgICAgaGFzQWxsUGVybWlzc2lvbnMgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBoYXNBbGxQZXJtaXNzaW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UoXG4gIHNwZW5kaW5nTGltaXRPcHRpb25zOiBQYXJ0aWFsPFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlT3B0aW9ucz5cbik6IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlIHtcbiAgaWYgKHNwZW5kaW5nTGltaXRPcHRpb25zLklzVW5saW1pdGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIElzVW5saW1pdGVkOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBpZiAoc3BlbmRpbmdMaW1pdE9wdGlvbnMuR2xvYmFsREVTT0xpbWl0Py50b1N0cmluZygpID09PSAnVU5MSU1JVEVEJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdHbG9iYWxERVNPTGltaXQgY2Fubm90IGJlIHVubGltaXRlZC4gWW91IG11c3Qgc3BlY2lmeSBhIHNwZWNpZmljIGxpbWl0LCBvciBzZXQgdGhlIElzVW5saW1pdGVkIGZsYWcgdG8gdHJ1ZS4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UgPSB7fTtcblxuICB3YWxrT2JqKFxuICAgIHNwZW5kaW5nTGltaXRPcHRpb25zLFxuICAgICh2YWwsIHBhdGgpID0+IHtcbiAgICAgIHNldERlZXBWYWx1ZShyZXN1bHQsIHBhdGgsIHZhbCA9PT0gJ1VOTElNSVRFRCcgPyAxZTkgOiB2YWwpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBpZiAocmVzdWx0LkFjY2Vzc0dyb3VwTGltaXRNYXApIHtcbiAgICByZXN1bHQuQWNjZXNzR3JvdXBMaW1pdE1hcCA9IE9iamVjdC52YWx1ZXMocmVzdWx0LkFjY2Vzc0dyb3VwTGltaXRNYXApO1xuICB9XG4gIGlmIChyZXN1bHQuQWNjZXNzR3JvdXBNZW1iZXJMaW1pdE1hcCkge1xuICAgIHJlc3VsdC5BY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHJlc3VsdC5BY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwXG4gICAgKTtcbiAgfVxuICBpZiAocmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXApIHtcbiAgICByZXN1bHQuQXNzb2NpYXRpb25MaW1pdE1hcCA9IE9iamVjdC52YWx1ZXMocmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXApO1xuICAgIC8vIFZhbGlkYXRlIGVhY2ggYXNzb2NpYXRpb24gbGltaXQgb2JqZWN0XG4gICAgcmVzdWx0LkFzc29jaWF0aW9uTGltaXRNYXAuZm9yRWFjaCgoYXNzb2NpYXRpb25MaW1pdEl0ZW0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgYXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgJiZcbiAgICAgICAgYXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwU2NvcGVUeXBlID09PSAnQW55J1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgbXVzdCBiZSBzZXQgdG8gdW5kZWZpbmVkIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBBcHBTY29wZVR5cGUgaXMgQW55LiBZb3UgcHJvdmlkZWQgJHthc3NvY2lhdGlvbkxpbWl0SXRlbS5BcHBQdWJsaWNLZXlCYXNlNThDaGVja31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICEvXig/OkJDMXx0QkMpLisvLnRlc3QoYXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwUHVibGljS2V5QmFzZTU4Q2hlY2spICYmXG4gICAgICAgIGFzc29jaWF0aW9uTGltaXRJdGVtLkFwcFNjb3BlVHlwZSA9PT0gJ1Njb3BlZCdcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEFwcFB1YmxpY0tleUJhc2U1OENoZWNrIG11c3QgYmUgc2V0IHRvIGEgdmFsaWQgcHVibGljIGtleSBpZiBBcHBTY29wZVR5cGUgaXMgU2NvcGVkLiBZb3UgcHJvdmlkZWQ6ICR7YXNzb2NpYXRpb25MaW1pdEl0ZW0uQXBwUHVibGljS2V5QmFzZTU4Q2hlY2t9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcCA9IHJlc3VsdC5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXAgPz8ge307XG5cbiAgaWYgKFxuICAgIHR5cGVvZiByZXN1bHQuVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwWydBVVRIT1JJWkVfREVSSVZFRF9LRVknXSA9PT1cbiAgICAndW5kZWZpbmVkJ1xuICApIHtcbiAgICByZXN1bHQuVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwID0ge1xuICAgICAgLi4ucmVzdWx0LlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcCxcbiAgICAgIEFVVEhPUklaRV9ERVJJVkVEX0tFWTogMSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlc3VsdC5UcmFuc2FjdGlvbkNvdW50TGltaXRNYXBbJ0FVVEhPUklaRV9ERVJJVkVEX0tFWSddIDwgMCkge1xuICAgIGRlbGV0ZSByZXN1bHQuVHJhbnNhY3Rpb25Db3VudExpbWl0TWFwWydBVVRIT1JJWkVfREVSSVZFRF9LRVknXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBndWFyZFR4UGVybWlzc2lvbihcbiAgc3BlbmRpbmdMaW1pdE9wdGlvbnM6IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlT3B0aW9uc1xuKSB7XG4gIGxldCBoYXNQZXJtaXNzaW9ucyA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgaGFzUGVybWlzc2lvbnMgPSBpZGVudGl0eS5oYXNQZXJtaXNzaW9uc1N5bmMoc3BlbmRpbmdMaW1pdE9wdGlvbnMpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBlPy5tZXNzYWdlPy5pbmNsdWRlcyhcbiAgICAgICAgJ1lvdSBtdXN0IGJlIGluIGEgYnJvd3NlciBjb250ZXh0IHRvIHVzZSBoYXNQZXJtaXNzaW9uc1N5bmMnXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyBUcnkgZmFsbGluZyBiYWNrIHRvIGhhc1Blcm1pc3Npb25zQXN5bmNcbiAgICAgIGhhc1Blcm1pc3Npb25zID0gYXdhaXQgaWRlbnRpdHkuaGFzUGVybWlzc2lvbnNBc3luYyhzcGVuZGluZ0xpbWl0T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFoYXNQZXJtaXNzaW9ucykge1xuICAgIHJldHVybiBpZGVudGl0eS5yZXF1ZXN0UGVybWlzc2lvbnMoe1xuICAgICAgLi4uc3BlbmRpbmdMaW1pdE9wdGlvbnMsXG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIChpZGVudGl0eS50cmFuc2FjdGlvblNwZW5kaW5nTGltaXRPcHRpb25zLkdsb2JhbERFU09MaW1pdCA/PyAwKSArXG4gICAgICAgIChzcGVuZGluZ0xpbWl0T3B0aW9ucy5HbG9iYWxERVNPTGltaXQgPz8gMCksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbmZ1bmN0aW9uIHdhbGtPYmooXG4gIG5vZGU6IGFueSxcbiAgY2FsbGJhY2s6ICh2YWw6IGFueSwgcGF0aDogc3RyaW5nW10pID0+IHZvaWQsXG4gIHBhdGg6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIG5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrT2JqKG5vZGVba2V5c1tpXV0sIGNhbGxiYWNrLCBwYXRoLmNvbmNhdChrZXlzW2ldKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKG5vZGUsIHBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZXBWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBjdXJyS2V5ID0gcGF0aFswXTtcblxuICBpZiAoXG4gICAgb2JqID09PSBudWxsIHx8XG4gICAgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHxcbiAgICB0eXBlb2Ygb2JqW2N1cnJLZXldID09PSAndW5kZWZpbmVkJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gb2JqW2N1cnJLZXldO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXREZWVwVmFsdWUob2JqW2N1cnJLZXldLCBwYXRoLnNsaWNlKDEpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXREZWVwVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gIGNvbnN0IGN1cnJLZXkgPSBwYXRoWzBdO1xuICBpZiAodHlwZW9mIG9ialtjdXJyS2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmpbY3VycktleV0gPSB7fTtcbiAgfVxuXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMSkge1xuICAgIG9ialtjdXJyS2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHNldERlZXBWYWx1ZShvYmpbY3VycktleV0sIHBhdGguc2xpY2UoMSksIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb3VudChjb3VudD86IG51bWJlciB8ICdVTkxJTUlURUQnKSB7XG4gIC8vIE5PVEU6IElmIGNoZWNraW5nIGZvciB1bmxpbWl0ZWQsIHdlIGp1c3QgY2hlY2sgaWYgaXQncyBncmVhdGVyIHRoYW4gMVxuICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGtub3cgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyAnVU5MSU1JVEVEJ1xuICAvLyBvciBzb21lIG90aGVyIG51bWVyaWMuICBBcyBsb25nIGFzIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMSwgd2UganVzdCBsZXRcbiAgLy8gaXQgcGFzcyBhcyAnVU5MSU1JVEVELicgSW4gdGhlIGVuZCB0aGlzIHNob3VsZG4ndCBtYXR0ZXIgc2luY2Ugd2UgZmFpbCB0aGVcbiAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIG5vIG1vcmUgdHJhbnNhY3Rpb25zIGxlZnQgdG8gc3BlbmQuXG4gIHJldHVybiBjb3VudCA9PT0gJ1VOTElNSVRFRCcgfHwgY291bnQgPT09IDFlOSA/IDEgOiBjb3VudCA/PyAwO1xufVxuIl19

@@ -1,2 +0,2 @@

import { AccessGroupLimitMapItem, AccessGroupMemberLimitMapItem, AssociationLimitMapItem, TransactionSpendingLimitResponse } from '../backend-types';
import { AccessGroupLimitMapItem, AccessGroupMemberLimitMapItem, AssociationLimitMapItem, TransactionSpendingLimitResponse, TransactionType } from '../backend-types';
export type Network = 'mainnet' | 'testnet';

@@ -30,5 +30,3 @@ export interface IdentityResponse {

GlobalDESOLimit?: number;
TransactionCountLimitMap?: {
[key: string]: number | 'UNLIMITED';
};
TransactionCountLimitMap?: Partial<Record<TransactionType, number | 'UNLIMITED'>>;
CreatorCoinOperationLimitMap?: {

@@ -95,3 +93,55 @@ [key: string]: {

appName?: string;
/**
* Since our keys are generated using the secp256k1 curve, the correct
* JWT algorithm header *should* be ES256K.
* See: https://www.rfc-editor.org/rfc/rfc8812.html#name-jose-algorithms-registratio
*
* HOWEVER, the backend jwt lib used by deso foundation -
* https://github.com/golang-jwt/jwt - (as well as many other jwt libraries)
* do not support ES256K. So instead, we default to the more widely supported ES256 algo,
* which can still work for verifying our signatures. But if a consumer of this lib is using a
* jwt lib that supports ES256K they can specify that here.
* See this github issue
* for more context: https://github.com/auth0/node-jsonwebtoken/issues/862
* If ES256K is ever supported by the backend jwt lib, we should change this.
*/
jwtAlgorithm?: jwtAlgorithm;
/**
* An optional storage provider. If not provided, we will assume localStorage
* is available.
*/
storageProvider?: Storage | AsyncStorage;
/**
* An optional function that is provided the identity url that needs to be
* opened. This can be used to customize how the identity url is opened. For
* example, if you are using react native, you might want to use the Linking
* API to open the url in a system browser window.
* @example
* ```ts
* identityPresenter: (url) => {
* WebBrowser.openBrowserAsync(url);
* },
* ```
*/
identityPresenter?: (url: string) => void;
/**
* A function that returns a promise that resolves to a
* redirect url. This would be used in the context of react native application
* that needs to propagate the redirect url to the identity library.
* NOTE: This is required if you are using a custom identityPresenter.
* @example
* ```ts
* identityRedirectResolver: () => {
* return new Promise((resolve) => {
* // This is an example of how you might use the Linking API in react native,
* // assuming you've opened a browser window to the identity domain.
* Linking.addEventListener('url', ({ url }) => {
* WebBrowser.dismissBrowser();
* resolve(url);
* });
* });
* },
* ```
*/
identityRedirectResolver?: () => Promise<string>;
}

@@ -269,1 +319,7 @@ export interface APIProvider {

}
export interface AsyncStorage {
getItem: (key: string) => Promise<string | null>;
setItem: (key: string, value: string) => Promise<void>;
removeItem: (key: string) => Promise<void>;
clear: () => Promise<void>;
}

@@ -73,2 +73,2 @@ export var NOTIFICATION_EVENTS;

})(NOTIFICATION_EVENTS || (NOTIFICATION_EVENTS = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWRlbnRpdHkvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ09BLE1BQU0sQ0FBTixJQUFZLG1CQW9GWDtBQXBGRCxXQUFZLG1CQUFtQjtJQUM3Qjs7T0FFRztJQUNILDhDQUF1QixDQUFBO0lBRXZCOzs7O09BSUc7SUFDSCxrRkFBMkQsQ0FBQTtJQUUzRDs7OztPQUlHO0lBQ0gsOEVBQXVELENBQUE7SUFFdkQ7O09BRUc7SUFDSCxnRkFBeUQsQ0FBQTtJQUV6RDs7T0FFRztJQUNILDhFQUF1RCxDQUFBO0lBRXZEOzs7T0FHRztJQUNILDBFQUFtRCxDQUFBO0lBRW5EOztPQUVHO0lBQ0gsa0RBQTJCLENBQUE7SUFFM0I7OztPQUdHO0lBQ0gsOENBQXVCLENBQUE7SUFFdkI7O09BRUc7SUFDSCxvREFBNkIsQ0FBQTtJQUU3Qjs7O09BR0c7SUFDSCxnREFBeUIsQ0FBQTtJQUV6Qjs7T0FFRztJQUNILGtFQUEyQyxDQUFBO0lBRTNDOzs7T0FHRztJQUNILDhEQUF1QyxDQUFBO0lBRXZDOztPQUVHO0lBQ0gsOEVBQXVELENBQUE7SUFFdkQ7OztPQUdHO0lBQ0gsMEVBQW1ELENBQUE7SUFFbkQ7O09BRUc7SUFDSCxnRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBcEZXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFvRjlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWNjZXNzR3JvdXBMaW1pdE1hcEl0ZW0sXG4gIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXBJdGVtLFxuICBBc3NvY2lhdGlvbkxpbWl0TWFwSXRlbSxcbiAgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UsXG59IGZyb20gJy4uL2JhY2tlbmQtdHlwZXMnO1xuZXhwb3J0IHR5cGUgTmV0d29yayA9ICdtYWlubmV0JyB8ICd0ZXN0bmV0JztcblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVJlc3BvbnNlIHtcbiAgc2VydmljZTogJ2lkZW50aXR5JztcbiAgbWV0aG9kOiAnZGVyaXZlJyB8ICdsb2dpbicgfCAnaW5pdGlhbGl6ZSc7XG4gIHBheWxvYWQ/OiBhbnk7XG4gIGlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5RGVyaXZlUGF5bG9hZCB7XG4gIGRlcml2ZWRTZWVkSGV4Pzogc3RyaW5nO1xuICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgcHVibGljS2V5QmFzZTU4Q2hlY2s6IHN0cmluZztcbiAgYnRjRGVwb3NpdEFkZHJlc3M6IHN0cmluZztcbiAgZXRoRGVwb3NpdEFkZHJlc3M6IHN0cmluZztcbiAgZXhwaXJhdGlvbkJsb2NrOiBudW1iZXI7XG4gIG5ldHdvcms6IE5ldHdvcms7XG4gIGFjY2Vzc1NpZ25hdHVyZTogc3RyaW5nO1xuICBqd3Q6IHN0cmluZztcbiAgZGVyaXZlZEp3dDogc3RyaW5nO1xuICBtZXNzYWdpbmdQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBtZXNzYWdpbmdQcml2YXRlS2V5OiBzdHJpbmc7XG4gIG1lc3NhZ2luZ0tleU5hbWU6IHN0cmluZztcbiAgbWVzc2FnaW5nS2V5U2lnbmF0dXJlOiBzdHJpbmc7XG4gIHRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdEhleDogc3RyaW5nO1xuICBzaWduZWRVcDogYm9vbGVhbjtcbiAgcHVibGljS2V5QWRkZWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2VPcHRpb25zIHtcbiAgR2xvYmFsREVTT0xpbWl0PzogbnVtYmVyO1xuICBUcmFuc2FjdGlvbkNvdW50TGltaXRNYXA/OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB8ICdVTkxJTUlURUQnIH07XG4gIENyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXA/OiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9O1xuICB9O1xuICBEQU9Db2luT3BlcmF0aW9uTGltaXRNYXA/OiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9O1xuICB9O1xuICBORlRPcGVyYXRpb25MaW1pdE1hcD86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IG51bWJlcl06IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfSB9O1xuICB9O1xuICBEQU9Db2luTGltaXRPcmRlckxpbWl0TWFwPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfTtcbiAgfTtcbiAgQXNzb2NpYXRpb25MaW1pdE1hcD86IChPbWl0PEFzc29jaWF0aW9uTGltaXRNYXBJdGVtLCAnT3BDb3VudCc+ICYge1xuICAgIE9wQ291bnQ6IG51bWJlciB8ICdVTkxJTUlURUQnO1xuICB9KVtdO1xuICBBY2Nlc3NHcm91cExpbWl0TWFwPzogKE9taXQ8QWNjZXNzR3JvdXBMaW1pdE1hcEl0ZW0sICdPcENvdW50Jz4gJiB7XG4gICAgT3BDb3VudDogbnVtYmVyIHwgJ1VOTElNSVRFRCc7XG4gIH0pW107XG4gIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXA/OiAoT21pdDxcbiAgICBBY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwSXRlbSxcbiAgICAnT3BDb3VudCdcbiAgPiAmIHsgT3BDb3VudDogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfSlbXTtcbiAgSXNVbmxpbWl0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBqd3RBbGdvcml0aG0gPSAnRVMyNTZLJyB8ICdFUzI1Nic7XG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpdHkgZG9tYWluLiBEZWZhdWx0cyB0byBodHRwczovL2lkZW50aXR5LmRlc28ub3JnXG4gICAqL1xuICBpZGVudGl0eVVSST86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgbmV0d29yay4gSWYgbm90IHByb3ZpZGVkLCB3ZSB3aWxsIGFzc3VtZSBtYWlubmV0LlxuICAgKi9cbiAgbmV0d29yaz86IE5ldHdvcms7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNvIG5vZGUgdXNlZCBmb3IgYW55IGFwaSBjYWxscyAoZ2V0IGJhbGFuY2UsIGRlcml2ZWQga2V5IGF1dGhvcml6YXRpb24sIGV0YylcbiAgICovXG4gIG5vZGVVUkk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJlZGlyZWN0IFVSSS4gSWYgcHJvdmlkZWQsIHdlIGRvIGEgaGFyZCByZWRpcmVjdCB0byB0aGUgaWRlbnRpdHlcbiAgICogZG9tYWluIGFuZCBwYXNzIGRhdGEgdmlhIHF1ZXJ5IHBhcmFtcyBiYWNrIHRvIHRoZSBwcm92aWRlZCB1cmkuXG4gICAqL1xuICByZWRpcmVjdFVSST86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgYW5kIHNwZW5kaW5nIGxpbWl0cyB0aGF0IHdpbGwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyXG4gICAqIGR1cmluZyBsb2dpbi4gSWYgbm90IHByb3ZpZGVkLCB3ZSB3aWxsIGFzc3VtZSBubyBwZXJtaXNzaW9ucy5cbiAgICovXG4gIHNwZW5kaW5nTGltaXRPcHRpb25zPzogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBwIHVzZWQgdG8gYXV0aG9yaXplIGRlcml2ZWQga2V5cy4gRGVmYXVsdHMgdG8gdW5rbm93bi5cbiAgICovXG4gIGFwcE5hbWU/OiBzdHJpbmc7XG5cbiAgLy8gU2luY2Ugb3VyIGtleXMgYXJlIGdlbmVyYXRlZCB1c2luZyB0aGUgc2VjcDI1NmsxIGN1cnZlLCB0aGUgY29ycmVjdFxuICAvLyBKV1QgYWxnb3JpdGhtIGhlYWRlciAqc2hvdWxkKiBiZSBFUzI1NksuXG4gIC8vIFNlZTogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzg4MTIuaHRtbCNuYW1lLWpvc2UtYWxnb3JpdGhtcy1yZWdpc3RyYXRpb1xuICAvL1xuICAvLyBIT1dFVkVSLCB0aGUgYmFja2VuZCBqd3QgbGliIHVzZWQgYnkgZGVzbyBmb3VuZGF0aW9uIC1cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy1qd3Qvand0IC0gKGFzIHdlbGwgYXMgbWFueSBvdGhlciBqd3QgbGlicmFyaWVzKVxuICAvLyBkbyBub3Qgc3VwcG9ydCBFUzI1NksuIFNvIGluc3RlYWQsIHdlIGRlZmF1bHQgdG8gdGhlIG1vcmUgd2lkZWx5IHN1cHBvcnRlZCBFUzI1NiBhbGdvLFxuICAvLyB3aGljaCBjYW4gc3RpbGwgd29yayBmb3IgdmVyaWZ5aW5nIG91ciBzaWduYXR1cmVzLiBCdXQgaWYgYSBjb25zdW1lciBvZiB0aGlzIGxpYiBpcyB1c2luZyBhXG4gIC8vIGp3dCBsaWIgdGhhdCBzdXBwb3J0cyBFUzI1NksgdGhleSBjYW4gc3BlY2lmeSB0aGF0IGhlcmUuXG4gIC8vIFNlZSB0aGlzIGdpdGh1YiBpc3N1ZVxuICAvLyBmb3IgbW9yZSBjb250ZXh0OiBodHRwczovL2dpdGh1Yi5jb20vYXV0aDAvbm9kZS1qc29ud2VidG9rZW4vaXNzdWVzLzg2MlxuICAvLyBJZiBFUzI1NksgaXMgZXZlciBzdXBwb3J0ZWQgYnkgdGhlIGJhY2tlbmQgand0IGxpYiwgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzLlxuICBqd3RBbGdvcml0aG0/OiBqd3RBbGdvcml0aG07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJUHJvdmlkZXIge1xuICBwb3N0OiAodXJsOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gUHJvbWlzZTxhbnk+O1xuICBnZXQ6ICh1cmw6IHN0cmluZykgPT4gUHJvbWlzZTxhbnk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd1Byb3ZpZGVyIHtcbiAgbG9jYXRpb246IHsgc2VhcmNoOiBzdHJpbmc7IHBhdGhuYW1lOiBzdHJpbmc7IGhyZWY6IHN0cmluZyB9O1xuICBoaXN0b3J5OiB7IHJlcGxhY2VTdGF0ZTogKHN0YXRlOiBhbnksIHRpdGxlOiBzdHJpbmcsIHVybDogc3RyaW5nKSA9PiB2b2lkIH07XG4gIGxvY2FsU3RvcmFnZToge1xuICAgIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiB2b2lkO1xuICB9O1xuICBvcGVuOiAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zOiBzdHJpbmdcbiAgKSA9PiBXaW5kb3cgfCBudWxsO1xuICBhZGRFdmVudExpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuICByZW1vdmVFdmVudExpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luT3B0aW9ucyB7XG4gIGdldEZyZWVEZXNvOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBQcmltYXJ5RGVyaXZlZEtleUluZm8gPSBJZGVudGl0eURlcml2ZVBheWxvYWQgJiB7XG4gIHRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdHM6IFRyYW5zYWN0aW9uU3BlbmRpbmdMaW1pdFJlc3BvbnNlO1xuICBJc1ZhbGlkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFN0b3JlZFVzZXIgPSB7XG4gIHB1YmxpY0tleTogc3RyaW5nO1xuICBwcmltYXJ5RGVyaXZlZEtleTogUHJpbWFyeURlcml2ZWRLZXlJbmZvO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVVzZXIge1xuICBhY2Nlc3NMZXZlbDogbnVtYmVyO1xuICBhY2Nlc3NMZXZlbEhtYWM6IHN0cmluZztcbiAgYnRjRGVwb3NpdEFkZHJlc3M6IHN0cmluZztcbiAgZW5jcnlwdGVkU2VlZEhleDogc3RyaW5nO1xuICBldGhEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBkZXJpdmVkUHVibGljS2V5QmFzZTU4Q2hlY2s/OiBzdHJpbmc7XG4gIGhhc0V4dHJhVGV4dDogYm9vbGVhbjtcbiAgbmV0d29yazogc3RyaW5nO1xuICB2ZXJzaW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlMb2dpblBheWxvYWQge1xuICB1c2VyczogUmVjb3JkPHN0cmluZywgSWRlbnRpdHlVc2VyPjtcbiAgcHVibGljS2V5QWRkZWQ6IHN0cmluZztcbiAgcGhvbmVOdW1iZXJTdWNjZXNzOiBib29sZWFuO1xuICBzaWduZWRVcDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVN0YXRlIHtcbiAgY3VycmVudFVzZXI6IFN0b3JlZFVzZXIgfCBudWxsO1xuICBhbHRlcm5hdGVVc2VyczogUmVjb3JkPHN0cmluZywgU3RvcmVkVXNlcj4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmVycmVkIHtcbiAgcmVzb2x2ZTogKGFyZ3M6IGFueSkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoYXJnczogYW55KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleVBhaXIge1xuICBzZWVkSGV4OiBzdHJpbmc7XG4gIHByaXZhdGU6IFVpbnQ4QXJyYXk7XG4gIHB1YmxpYzogVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpYmVyTm90aWZpY2F0aW9uIHtcbiAgZXZlbnQ6IE5PVElGSUNBVElPTl9FVkVOVFM7XG4gIGN1cnJlbnRVc2VyOiBTdG9yZWRVc2VyIHwgbnVsbDtcbiAgYWx0ZXJuYXRlVXNlcnM6IFJlY29yZDxzdHJpbmcsIFN0b3JlZFVzZXI+IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdGhlcnNjYW5UcmFuc2FjdGlvbnNCeUFkZHJlc3NSZXNwb25zZSB7XG4gIHN0YXR1czogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlc3VsdDogRXRoZXJzY2FuVHJhbnNhY3Rpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdGhlcnNjYW5UcmFuc2FjdGlvbiB7XG4gIGJsb2NrTnVtYmVyOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIG5vbmNlOiBzdHJpbmc7XG4gIGJsb2NrSGFzaDogc3RyaW5nO1xuICB0cmFuc2FjdGlvbkluZGV4OiBzdHJpbmc7XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZ2FzOiBzdHJpbmc7XG4gIGdhc1ByaWNlOiBzdHJpbmc7XG4gIGlzRXJyb3I6IHN0cmluZztcbiAgdHhyZWNlaXB0X3N0YXR1czogc3RyaW5nO1xuICBpbnB1dDogc3RyaW5nO1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgY3VtdWxhdGl2ZUdhc1VzZWQ6IHN0cmluZztcbiAgZ2FzVXNlZDogc3RyaW5nO1xuICBjb25maXJtYXRpb25zOiBzdHJpbmc7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc0dyb3VwUHJpdmF0ZUluZm8ge1xuICBBY2Nlc3NHcm91cFB1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIEFjY2Vzc0dyb3VwUHJpdmF0ZUtleUhleDogc3RyaW5nO1xuICBBY2Nlc3NHcm91cEtleU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gTk9USUZJQ0FUSU9OX0VWRU5UUyB7XG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIGNvbnN1bWluZyBhcHAgaW5pdGlhbGx5IHN1YnNjcmliZXMgdG8gaWRlbnRpdHkuXG4gICAqL1xuICBTVUJTQ1JJQkUgPSAnU1VCU0NSSUJFJyxcblxuICAvKipcbiAgICogVGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgZXZlbnQgZmlyZWQgQUZURVIgdGhlIHVzZXIgY29tcGxldGVzIGFuIGlkZW50aXR5IGZsb3dcbiAgICogdGhhdCByZXF1aXJlcyBhIGRlcml2ZWQga2V5IGF1dGhvcml6YXRpb24uIFRoaXMgZXZlbnQgaXMgZmlyZWQgQkVGT1JFIHRoZVxuICAgKiByZXF1ZXN0IHRvIGF1dGhvcml6ZSB0aGUgZGVyaXZlZCBrZXkgaXMgbWFkZS5cbiAgICovXG4gIEFVVEhPUklaRV9ERVJJVkVEX0tFWV9TVEFSVCA9ICdBVVRIT1JJWkVfREVSSVZFRF9LRVlfU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBldmVudCBmaXJlZCBBRlRFUiB0aGUgdXNlciBjb21wbGV0ZXMgYW4gaWRlbnRpdHlcbiAgICogZmxvdyB0aGF0IHJlcXVpcmVzIGEgZGVyaXZlZCBrZXkgYXV0aG9yaXphdGlvbi4gVGhpcyBldmVudCBpcyBmaXJlZCBBRlRFUlxuICAgKiB0aGUgcmVxdWVzdCB0byBhdXRob3JpemUgdGhlIGRlcml2ZWQga2V5IGlzIG1hZGUuXG4gICAqL1xuICBBVVRIT1JJWkVfREVSSVZFRF9LRVlfRU5EID0gJ0FVVEhPUklaRV9ERVJJVkVEX0tFWV9FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGlmIHRoZSByZXF1ZXN0IHRvIGF1dGhvcml6ZSBhIGRlcml2ZWQga2V5IGZhaWxzLlxuICAgKi9cbiAgQVVUSE9SSVpFX0RFUklWRURfS0VZX0ZBSUwgPSAnQVVUSE9SSVpFX0RFUklWRURfS0VZX0ZBSUwnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgb3BlbnMgdGhlIHBlcm1pc3Npb25zIGFwcHJvdmFsIHBvcHVwLlxuICAgKi9cbiAgUkVRVUVTVF9QRVJNSVNTSU9OU19TVEFSVCA9ICdSRVFVRVNUX1BFUk1JU1NJT05TX1NUQVJUJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyBhcHByb3ZpbmcgcGVybWlzc2lvbnMsIGFuZFxuICAgKiBjb21lcyBBRlRFUiB0aGUgaW50ZXJtZWRpYXRlIEFVVEhPUklaRV9ERVJJVkVEX0tFWSBldmVudHMuXG4gICAqL1xuICBSRVFVRVNUX1BFUk1JU1NJT05TX0VORCA9ICdSRVFVRVNUX1BFUk1JU1NJT05TX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBvcGVucyB0aGUgbG9naW4gcG9wdXAuXG4gICAqL1xuICBMT0dJTl9TVEFSVCA9ICdMT0dJTl9TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgbG9nZ2luZyBpbiwgYW5kXG4gICAqIGNvbWVzIEFGVEVSIHRoZSBpbnRlcm1lZGlhdGUgQVVUSE9SSVpFX0RFUklWRURfS0VZIGV2ZW50cy5cbiAgICovXG4gIExPR0lOX0VORCA9ICdMT0dJTl9FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgb3BlbnMgdGhlIGxvZ291dCBwb3B1cC5cbiAgICovXG4gIExPR09VVF9TVEFSVCA9ICdMT0dPVVRfU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIGxvZ2dpbmcgb3V0LCBhbmRcbiAgICogY29tZXMgQUZURVIgdGhlIGludGVybWVkaWF0ZSBBVVRIT1JJWkVfREVSSVZFRF9LRVkgZXZlbnRzLlxuICAgKi9cbiAgTE9HT1VUX0VORCA9ICdMT0dPVVRfRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG9wZW5zIHRoZSBnZXQgZGVzbyBwb3B1cC5cbiAgICovXG4gIEdFVF9GUkVFX0RFU09fU1RBUlQgPSAnR0VUX0ZSRUVfREVTT19TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgdGhlIGdldCBkZXNvIGZsb3csIGFuZCBjb21lc1xuICAgKiBBRlRFUiB0aGUgaW50ZXJtZWRpYXRlIEFVVEhPUklaRV9ERVJJVkVEX0tFWSBldmVudHMuXG4gICAqL1xuICBHRVRfRlJFRV9ERVNPX0VORCA9ICdHRVRfRlJFRV9ERVNPX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBvcGVucyB0aGUgdmVyaWZ5IHBob25lIG51bWJlciBwb3B1cC5cbiAgICovXG4gIFZFUklGWV9QSE9ORV9OVU1CRVJfU1RBUlQgPSAnVkVSSUZZX1BIT05FX05VTUJFUl9TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgdGhlIHZlcmlmeSBwaG9uZSBudW1iZXIgZmxvdyxcbiAgICogYW5kIGNvbWVzIEFGVEVSIHRoZSBpbnRlcm1lZGlhdGUgQVVUSE9SSVpFX0RFUklWRURfS0VZIGV2ZW50cy5cbiAgICovXG4gIFZFUklGWV9QSE9ORV9OVU1CRVJfRU5EID0gJ1ZFUklGWV9QSE9ORV9OVU1CRVJfRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBjb25zdW1pbmcgYXBwIHN3aXRjaGVzIHRoZSBhY3RpdmUgdXNlci5cbiAgICovXG4gIENIQU5HRV9BQ1RJVkVfVVNFUiA9ICdDSEFOR0VfQUNUSVZFX1VTRVInLFxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWRlbnRpdHkvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOFFBLE1BQU0sQ0FBTixJQUFZLG1CQW9GWDtBQXBGRCxXQUFZLG1CQUFtQjtJQUM3Qjs7T0FFRztJQUNILDhDQUF1QixDQUFBO0lBRXZCOzs7O09BSUc7SUFDSCxrRkFBMkQsQ0FBQTtJQUUzRDs7OztPQUlHO0lBQ0gsOEVBQXVELENBQUE7SUFFdkQ7O09BRUc7SUFDSCxnRkFBeUQsQ0FBQTtJQUV6RDs7T0FFRztJQUNILDhFQUF1RCxDQUFBO0lBRXZEOzs7T0FHRztJQUNILDBFQUFtRCxDQUFBO0lBRW5EOztPQUVHO0lBQ0gsa0RBQTJCLENBQUE7SUFFM0I7OztPQUdHO0lBQ0gsOENBQXVCLENBQUE7SUFFdkI7O09BRUc7SUFDSCxvREFBNkIsQ0FBQTtJQUU3Qjs7O09BR0c7SUFDSCxnREFBeUIsQ0FBQTtJQUV6Qjs7T0FFRztJQUNILGtFQUEyQyxDQUFBO0lBRTNDOzs7T0FHRztJQUNILDhEQUF1QyxDQUFBO0lBRXZDOztPQUVHO0lBQ0gsOEVBQXVELENBQUE7SUFFdkQ7OztPQUdHO0lBQ0gsMEVBQW1ELENBQUE7SUFFbkQ7O09BRUc7SUFDSCxnRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBcEZXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFvRjlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWNjZXNzR3JvdXBMaW1pdE1hcEl0ZW0sXG4gIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXBJdGVtLFxuICBBc3NvY2lhdGlvbkxpbWl0TWFwSXRlbSxcbiAgVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2UsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcyc7XG5leHBvcnQgdHlwZSBOZXR3b3JrID0gJ21haW5uZXQnIHwgJ3Rlc3RuZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UmVzcG9uc2Uge1xuICBzZXJ2aWNlOiAnaWRlbnRpdHknO1xuICBtZXRob2Q6ICdkZXJpdmUnIHwgJ2xvZ2luJyB8ICdpbml0aWFsaXplJztcbiAgcGF5bG9hZD86IGFueTtcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlEZXJpdmVQYXlsb2FkIHtcbiAgZGVyaXZlZFNlZWRIZXg/OiBzdHJpbmc7XG4gIGRlcml2ZWRQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBwdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBidGNEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBldGhEZXBvc2l0QWRkcmVzczogc3RyaW5nO1xuICBleHBpcmF0aW9uQmxvY2s6IG51bWJlcjtcbiAgbmV0d29yazogTmV0d29yaztcbiAgYWNjZXNzU2lnbmF0dXJlOiBzdHJpbmc7XG4gIGp3dDogc3RyaW5nO1xuICBkZXJpdmVkSnd0OiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1B1YmxpY0tleUJhc2U1OENoZWNrOiBzdHJpbmc7XG4gIG1lc3NhZ2luZ1ByaXZhdGVLZXk6IHN0cmluZztcbiAgbWVzc2FnaW5nS2V5TmFtZTogc3RyaW5nO1xuICBtZXNzYWdpbmdLZXlTaWduYXR1cmU6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0SGV4OiBzdHJpbmc7XG4gIHNpZ25lZFVwOiBib29sZWFuO1xuICBwdWJsaWNLZXlBZGRlZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZU9wdGlvbnMge1xuICBHbG9iYWxERVNPTGltaXQ/OiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcD86IFBhcnRpYWw8XG4gICAgUmVjb3JkPFRyYW5zYWN0aW9uVHlwZSwgbnVtYmVyIHwgJ1VOTElNSVRFRCc+XG4gID47XG4gIENyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXA/OiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9O1xuICB9O1xuICBEQU9Db2luT3BlcmF0aW9uTGltaXRNYXA/OiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfCAnVU5MSU1JVEVEJyB9O1xuICB9O1xuICBORlRPcGVyYXRpb25MaW1pdE1hcD86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IG51bWJlcl06IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfSB9O1xuICB9O1xuICBEQU9Db2luTGltaXRPcmRlckxpbWl0TWFwPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfTtcbiAgfTtcbiAgQXNzb2NpYXRpb25MaW1pdE1hcD86IChPbWl0PEFzc29jaWF0aW9uTGltaXRNYXBJdGVtLCAnT3BDb3VudCc+ICYge1xuICAgIE9wQ291bnQ6IG51bWJlciB8ICdVTkxJTUlURUQnO1xuICB9KVtdO1xuICBBY2Nlc3NHcm91cExpbWl0TWFwPzogKE9taXQ8QWNjZXNzR3JvdXBMaW1pdE1hcEl0ZW0sICdPcENvdW50Jz4gJiB7XG4gICAgT3BDb3VudDogbnVtYmVyIHwgJ1VOTElNSVRFRCc7XG4gIH0pW107XG4gIEFjY2Vzc0dyb3VwTWVtYmVyTGltaXRNYXA/OiAoT21pdDxcbiAgICBBY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwSXRlbSxcbiAgICAnT3BDb3VudCdcbiAgPiAmIHsgT3BDb3VudDogbnVtYmVyIHwgJ1VOTElNSVRFRCcgfSlbXTtcbiAgSXNVbmxpbWl0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBqd3RBbGdvcml0aG0gPSAnRVMyNTZLJyB8ICdFUzI1Nic7XG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpdHkgZG9tYWluLiBEZWZhdWx0cyB0byBodHRwczovL2lkZW50aXR5LmRlc28ub3JnXG4gICAqL1xuICBpZGVudGl0eVVSST86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgbmV0d29yay4gSWYgbm90IHByb3ZpZGVkLCB3ZSB3aWxsIGFzc3VtZSBtYWlubmV0LlxuICAgKi9cbiAgbmV0d29yaz86IE5ldHdvcms7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNvIG5vZGUgdXNlZCBmb3IgYW55IGFwaSBjYWxscyAoZ2V0IGJhbGFuY2UsIGRlcml2ZWQga2V5IGF1dGhvcml6YXRpb24sIGV0YylcbiAgICovXG4gIG5vZGVVUkk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJlZGlyZWN0IFVSSS4gSWYgcHJvdmlkZWQsIHdlIGRvIGEgaGFyZCByZWRpcmVjdCB0byB0aGUgaWRlbnRpdHlcbiAgICogZG9tYWluIGFuZCBwYXNzIGRhdGEgdmlhIHF1ZXJ5IHBhcmFtcyBiYWNrIHRvIHRoZSBwcm92aWRlZCB1cmkuXG4gICAqL1xuICByZWRpcmVjdFVSST86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgYW5kIHNwZW5kaW5nIGxpbWl0cyB0aGF0IHdpbGwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyXG4gICAqIGR1cmluZyBsb2dpbi4gSWYgbm90IHByb3ZpZGVkLCB3ZSB3aWxsIGFzc3VtZSBubyBwZXJtaXNzaW9ucy5cbiAgICovXG4gIHNwZW5kaW5nTGltaXRPcHRpb25zPzogVHJhbnNhY3Rpb25TcGVuZGluZ0xpbWl0UmVzcG9uc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBwIHVzZWQgdG8gYXV0aG9yaXplIGRlcml2ZWQga2V5cy4gRGVmYXVsdHMgdG8gdW5rbm93bi5cbiAgICovXG4gIGFwcE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNpbmNlIG91ciBrZXlzIGFyZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHNlY3AyNTZrMSBjdXJ2ZSwgdGhlIGNvcnJlY3RcbiAgICogSldUIGFsZ29yaXRobSBoZWFkZXIgKnNob3VsZCogYmUgRVMyNTZLLlxuICAgKiBTZWU6IGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM4ODEyLmh0bWwjbmFtZS1qb3NlLWFsZ29yaXRobXMtcmVnaXN0cmF0aW9cbiAgICpcbiAgICogSE9XRVZFUiwgdGhlIGJhY2tlbmQgand0IGxpYiB1c2VkIGJ5IGRlc28gZm91bmRhdGlvbiAtXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nb2xhbmctand0L2p3dCAtIChhcyB3ZWxsIGFzIG1hbnkgb3RoZXIgand0IGxpYnJhcmllcylcbiAgICogZG8gbm90IHN1cHBvcnQgRVMyNTZLLiBTbyBpbnN0ZWFkLCB3ZSBkZWZhdWx0IHRvIHRoZSBtb3JlIHdpZGVseSBzdXBwb3J0ZWQgRVMyNTYgYWxnbyxcbiAgICogd2hpY2ggY2FuIHN0aWxsIHdvcmsgZm9yIHZlcmlmeWluZyBvdXIgc2lnbmF0dXJlcy4gQnV0IGlmIGEgY29uc3VtZXIgb2YgdGhpcyBsaWIgaXMgdXNpbmcgYVxuICAgKiBqd3QgbGliIHRoYXQgc3VwcG9ydHMgRVMyNTZLIHRoZXkgY2FuIHNwZWNpZnkgdGhhdCBoZXJlLlxuICAgKiBTZWUgdGhpcyBnaXRodWIgaXNzdWVcbiAgICogZm9yIG1vcmUgY29udGV4dDogaHR0cHM6Ly9naXRodWIuY29tL2F1dGgwL25vZGUtanNvbndlYnRva2VuL2lzc3Vlcy84NjJcbiAgICogSWYgRVMyNTZLIGlzIGV2ZXIgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kIGp3dCBsaWIsIHdlIHNob3VsZCBjaGFuZ2UgdGhpcy5cbiAgICovXG4gIGp3dEFsZ29yaXRobT86IGp3dEFsZ29yaXRobTtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgc3RvcmFnZSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkLCB3ZSB3aWxsIGFzc3VtZSBsb2NhbFN0b3JhZ2VcbiAgICogaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgc3RvcmFnZVByb3ZpZGVyPzogU3RvcmFnZSB8IEFzeW5jU3RvcmFnZTtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCBpcyBwcm92aWRlZCB0aGUgaWRlbnRpdHkgdXJsIHRoYXQgbmVlZHMgdG8gYmVcbiAgICogb3BlbmVkLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6ZSBob3cgdGhlIGlkZW50aXR5IHVybCBpcyBvcGVuZWQuIEZvclxuICAgKiBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIHJlYWN0IG5hdGl2ZSwgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIHRoZSBMaW5raW5nXG4gICAqIEFQSSB0byBvcGVuIHRoZSB1cmwgaW4gYSBzeXN0ZW0gYnJvd3NlciB3aW5kb3cuXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGlkZW50aXR5UHJlc2VudGVyOiAodXJsKSA9PiB7XG4gICAqICAgV2ViQnJvd3Nlci5vcGVuQnJvd3NlckFzeW5jKHVybCk7XG4gICAqIH0sXG4gICAqIGBgYFxuICAgKi9cbiAgaWRlbnRpdHlQcmVzZW50ZXI/OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFcbiAgICogcmVkaXJlY3QgdXJsLiBUaGlzIHdvdWxkIGJlIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgcmVhY3QgbmF0aXZlIGFwcGxpY2F0aW9uXG4gICAqIHRoYXQgbmVlZHMgdG8gcHJvcGFnYXRlIHRoZSByZWRpcmVjdCB1cmwgdG8gdGhlIGlkZW50aXR5IGxpYnJhcnkuXG4gICAqIE5PVEU6IFRoaXMgaXMgcmVxdWlyZWQgaWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBpZGVudGl0eVByZXNlbnRlci5cbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogICBpZGVudGl0eVJlZGlyZWN0UmVzb2x2ZXI6ICgpID0+IHtcbiAgICogICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgKiAgICAgICAvLyBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHlvdSBtaWdodCB1c2UgdGhlIExpbmtpbmcgQVBJIGluIHJlYWN0IG5hdGl2ZSxcbiAgICogICAgICAgLy8gYXNzdW1pbmcgeW91J3ZlIG9wZW5lZCBhIGJyb3dzZXIgd2luZG93IHRvIHRoZSBpZGVudGl0eSBkb21haW4uXG4gICAqICAgICAgIExpbmtpbmcuYWRkRXZlbnRMaXN0ZW5lcigndXJsJywgKHsgdXJsIH0pID0+IHtcbiAgICogICAgICAgICBXZWJCcm93c2VyLmRpc21pc3NCcm93c2VyKCk7XG4gICAqICAgICAgICAgcmVzb2x2ZSh1cmwpO1xuICAgKiAgICAgICB9KTtcbiAgICogICAgIH0pO1xuICAgKiAgIH0sXG4gICAqIGBgYFxuICAgKi9cbiAgaWRlbnRpdHlSZWRpcmVjdFJlc29sdmVyPzogKCkgPT4gUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVByb3ZpZGVyIHtcbiAgcG9zdDogKHVybDogc3RyaW5nLCBkYXRhOiBhbnkpID0+IFByb21pc2U8YW55PjtcbiAgZ2V0OiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dQcm92aWRlciB7XG4gIGxvY2F0aW9uOiB7IHNlYXJjaDogc3RyaW5nOyBwYXRobmFtZTogc3RyaW5nOyBocmVmOiBzdHJpbmcgfTtcbiAgaGlzdG9yeTogeyByZXBsYWNlU3RhdGU6IChzdGF0ZTogYW55LCB0aXRsZTogc3RyaW5nLCB1cmw6IHN0cmluZykgPT4gdm9pZCB9O1xuICBsb2NhbFN0b3JhZ2U6IHtcbiAgICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGw7XG4gICAgc2V0SXRlbTogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIHJlbW92ZUl0ZW06IChrZXk6IHN0cmluZykgPT4gdm9pZDtcbiAgfTtcbiAgb3BlbjogKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogc3RyaW5nXG4gICkgPT4gV2luZG93IHwgbnVsbDtcbiAgYWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dpbk9wdGlvbnMge1xuICBnZXRGcmVlRGVzbzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUHJpbWFyeURlcml2ZWRLZXlJbmZvID0gSWRlbnRpdHlEZXJpdmVQYXlsb2FkICYge1xuICB0cmFuc2FjdGlvblNwZW5kaW5nTGltaXRzOiBUcmFuc2FjdGlvblNwZW5kaW5nTGltaXRSZXNwb25zZTtcbiAgSXNWYWxpZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTdG9yZWRVc2VyID0ge1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcHJpbWFyeURlcml2ZWRLZXk6IFByaW1hcnlEZXJpdmVkS2V5SW5mbztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlVc2VyIHtcbiAgYWNjZXNzTGV2ZWw6IG51bWJlcjtcbiAgYWNjZXNzTGV2ZWxIbWFjOiBzdHJpbmc7XG4gIGJ0Y0RlcG9zaXRBZGRyZXNzOiBzdHJpbmc7XG4gIGVuY3J5cHRlZFNlZWRIZXg6IHN0cmluZztcbiAgZXRoRGVwb3NpdEFkZHJlc3M6IHN0cmluZztcbiAgZGVyaXZlZFB1YmxpY0tleUJhc2U1OENoZWNrPzogc3RyaW5nO1xuICBoYXNFeHRyYVRleHQ6IGJvb2xlYW47XG4gIG5ldHdvcms6IHN0cmluZztcbiAgdmVyc2lvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5TG9naW5QYXlsb2FkIHtcbiAgdXNlcnM6IFJlY29yZDxzdHJpbmcsIElkZW50aXR5VXNlcj47XG4gIHB1YmxpY0tleUFkZGVkOiBzdHJpbmc7XG4gIHBob25lTnVtYmVyU3VjY2VzczogYm9vbGVhbjtcbiAgc2lnbmVkVXA6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlTdGF0ZSB7XG4gIGN1cnJlbnRVc2VyOiBTdG9yZWRVc2VyIHwgbnVsbDtcbiAgYWx0ZXJuYXRlVXNlcnM6IFJlY29yZDxzdHJpbmcsIFN0b3JlZFVzZXI+IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZlcnJlZCB7XG4gIHJlc29sdmU6IChhcmdzOiBhbnkpID0+IHZvaWQ7XG4gIHJlamVjdDogKGFyZ3M6IGFueSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlQYWlyIHtcbiAgc2VlZEhleDogc3RyaW5nO1xuICBwcml2YXRlOiBVaW50OEFycmF5O1xuICBwdWJsaWM6IFVpbnQ4QXJyYXk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaWJlck5vdGlmaWNhdGlvbiB7XG4gIGV2ZW50OiBOT1RJRklDQVRJT05fRVZFTlRTO1xuICBjdXJyZW50VXNlcjogU3RvcmVkVXNlciB8IG51bGw7XG4gIGFsdGVybmF0ZVVzZXJzOiBSZWNvcmQ8c3RyaW5nLCBTdG9yZWRVc2VyPiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXRoZXJzY2FuVHJhbnNhY3Rpb25zQnlBZGRyZXNzUmVzcG9uc2Uge1xuICBzdGF0dXM6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICByZXN1bHQ6IEV0aGVyc2NhblRyYW5zYWN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXRoZXJzY2FuVHJhbnNhY3Rpb24ge1xuICBibG9ja051bWJlcjogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgaGFzaDogc3RyaW5nO1xuICBub25jZTogc3RyaW5nO1xuICBibG9ja0hhc2g6IHN0cmluZztcbiAgdHJhbnNhY3Rpb25JbmRleDogc3RyaW5nO1xuICBmcm9tOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGdhczogc3RyaW5nO1xuICBnYXNQcmljZTogc3RyaW5nO1xuICBpc0Vycm9yOiBzdHJpbmc7XG4gIHR4cmVjZWlwdF9zdGF0dXM6IHN0cmluZztcbiAgaW5wdXQ6IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG4gIGN1bXVsYXRpdmVHYXNVc2VkOiBzdHJpbmc7XG4gIGdhc1VzZWQ6IHN0cmluZztcbiAgY29uZmlybWF0aW9uczogc3RyaW5nO1xuICBtZXRob2RJZDogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NHcm91cFByaXZhdGVJbmZvIHtcbiAgQWNjZXNzR3JvdXBQdWJsaWNLZXlCYXNlNThDaGVjazogc3RyaW5nO1xuICBBY2Nlc3NHcm91cFByaXZhdGVLZXlIZXg6IHN0cmluZztcbiAgQWNjZXNzR3JvdXBLZXlOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIE5PVElGSUNBVElPTl9FVkVOVFMge1xuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBjb25zdW1pbmcgYXBwIGluaXRpYWxseSBzdWJzY3JpYmVzIHRvIGlkZW50aXR5LlxuICAgKi9cbiAgU1VCU0NSSUJFID0gJ1NVQlNDUklCRScsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIGV2ZW50IGZpcmVkIEFGVEVSIHRoZSB1c2VyIGNvbXBsZXRlcyBhbiBpZGVudGl0eSBmbG93XG4gICAqIHRoYXQgcmVxdWlyZXMgYSBkZXJpdmVkIGtleSBhdXRob3JpemF0aW9uLiBUaGlzIGV2ZW50IGlzIGZpcmVkIEJFRk9SRSB0aGVcbiAgICogcmVxdWVzdCB0byBhdXRob3JpemUgdGhlIGRlcml2ZWQga2V5IGlzIG1hZGUuXG4gICAqL1xuICBBVVRIT1JJWkVfREVSSVZFRF9LRVlfU1RBUlQgPSAnQVVUSE9SSVpFX0RFUklWRURfS0VZX1NUQVJUJyxcblxuICAvKipcbiAgICogVGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgZXZlbnQgZmlyZWQgQUZURVIgdGhlIHVzZXIgY29tcGxldGVzIGFuIGlkZW50aXR5XG4gICAqIGZsb3cgdGhhdCByZXF1aXJlcyBhIGRlcml2ZWQga2V5IGF1dGhvcml6YXRpb24uIFRoaXMgZXZlbnQgaXMgZmlyZWQgQUZURVJcbiAgICogdGhlIHJlcXVlc3QgdG8gYXV0aG9yaXplIHRoZSBkZXJpdmVkIGtleSBpcyBtYWRlLlxuICAgKi9cbiAgQVVUSE9SSVpFX0RFUklWRURfS0VZX0VORCA9ICdBVVRIT1JJWkVfREVSSVZFRF9LRVlfRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCBpZiB0aGUgcmVxdWVzdCB0byBhdXRob3JpemUgYSBkZXJpdmVkIGtleSBmYWlscy5cbiAgICovXG4gIEFVVEhPUklaRV9ERVJJVkVEX0tFWV9GQUlMID0gJ0FVVEhPUklaRV9ERVJJVkVEX0tFWV9GQUlMJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG9wZW5zIHRoZSBwZXJtaXNzaW9ucyBhcHByb3ZhbCBwb3B1cC5cbiAgICovXG4gIFJFUVVFU1RfUEVSTUlTU0lPTlNfU1RBUlQgPSAnUkVRVUVTVF9QRVJNSVNTSU9OU19TVEFSVCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgYXBwcm92aW5nIHBlcm1pc3Npb25zLCBhbmRcbiAgICogY29tZXMgQUZURVIgdGhlIGludGVybWVkaWF0ZSBBVVRIT1JJWkVfREVSSVZFRF9LRVkgZXZlbnRzLlxuICAgKi9cbiAgUkVRVUVTVF9QRVJNSVNTSU9OU19FTkQgPSAnUkVRVUVTVF9QRVJNSVNTSU9OU19FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgb3BlbnMgdGhlIGxvZ2luIHBvcHVwLlxuICAgKi9cbiAgTE9HSU5fU1RBUlQgPSAnTE9HSU5fU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIGxvZ2dpbmcgaW4sIGFuZFxuICAgKiBjb21lcyBBRlRFUiB0aGUgaW50ZXJtZWRpYXRlIEFVVEhPUklaRV9ERVJJVkVEX0tFWSBldmVudHMuXG4gICAqL1xuICBMT0dJTl9FTkQgPSAnTE9HSU5fRU5EJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG9wZW5zIHRoZSBsb2dvdXQgcG9wdXAuXG4gICAqL1xuICBMT0dPVVRfU1RBUlQgPSAnTE9HT1VUX1NUQVJUJyxcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyBsb2dnaW5nIG91dCwgYW5kXG4gICAqIGNvbWVzIEFGVEVSIHRoZSBpbnRlcm1lZGlhdGUgQVVUSE9SSVpFX0RFUklWRURfS0VZIGV2ZW50cy5cbiAgICovXG4gIExPR09VVF9FTkQgPSAnTE9HT1VUX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBvcGVucyB0aGUgZ2V0IGRlc28gcG9wdXAuXG4gICAqL1xuICBHRVRfRlJFRV9ERVNPX1NUQVJUID0gJ0dFVF9GUkVFX0RFU09fU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIHRoZSBnZXQgZGVzbyBmbG93LCBhbmQgY29tZXNcbiAgICogQUZURVIgdGhlIGludGVybWVkaWF0ZSBBVVRIT1JJWkVfREVSSVZFRF9LRVkgZXZlbnRzLlxuICAgKi9cbiAgR0VUX0ZSRUVfREVTT19FTkQgPSAnR0VUX0ZSRUVfREVTT19FTkQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgb3BlbnMgdGhlIHZlcmlmeSBwaG9uZSBudW1iZXIgcG9wdXAuXG4gICAqL1xuICBWRVJJRllfUEhPTkVfTlVNQkVSX1NUQVJUID0gJ1ZFUklGWV9QSE9ORV9OVU1CRVJfU1RBUlQnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIHRoZSB2ZXJpZnkgcGhvbmUgbnVtYmVyIGZsb3csXG4gICAqIGFuZCBjb21lcyBBRlRFUiB0aGUgaW50ZXJtZWRpYXRlIEFVVEhPUklaRV9ERVJJVkVEX0tFWSBldmVudHMuXG4gICAqL1xuICBWRVJJRllfUEhPTkVfTlVNQkVSX0VORCA9ICdWRVJJRllfUEhPTkVfTlVNQkVSX0VORCcsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgY29uc3VtaW5nIGFwcCBzd2l0Y2hlcyB0aGUgYWN0aXZlIHVzZXIuXG4gICAqL1xuICBDSEFOR0VfQUNUSVZFX1VTRVIgPSAnQ0hBTkdFX0FDVElWRV9VU0VSJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3luY1N0b3JhZ2Uge1xuICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBjbGVhcjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==

@@ -26,2 +26,3 @@ import { ConstructedTransactionResponse, OptionalFeesAndExtraData, RequestOptions, SubmitTransactionResponse, TransactionFee } from './backend-types';

TransactionFees?: TransactionFee[] | null;
BlockHeight?: number;
};

@@ -31,2 +32,3 @@ export declare const convertExtraData: (extraData?: {

} | undefined, consensusExtraDataKVs?: TransactionExtraDataKV[]) => TransactionExtraData;
export declare const getTxWithFeeNanos: (pubKey: string, metadata: TransactionMetadataRecord, txFields?: BalanceModelTransactionFields) => Transaction;
export declare const constructBalanceModelTx: (pubKey: string, metadata: TransactionMetadataRecord, txFields?: BalanceModelTransactionFields) => Promise<ConstructedTransactionResponse>;

@@ -36,1 +38,2 @@ export declare const computeFee: (txn: Transaction, feeRate: number) => Transaction;

export declare const isMaybeDeSoPublicKey: (query: string) => boolean;
export declare const sumTransactionFees: (txFees?: TransactionFee[] | null) => number;

@@ -13,3 +13,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import { api, cleanURL, getAppState } from './data';
import { bs58PublicKeyToCompressedBytes, encodeUTF8ToBytes, identity, publicKeyToBase58Check, sha256X2, Transaction, TransactionExtraData, TransactionExtraDataKV, TransactionNonce, TransactionOutput, TransactionToMsgDeSoTxn, } from './identity';
import { Transaction, TransactionExtraData, TransactionExtraDataKV, TransactionNonce, TransactionOutput, TransactionToMsgDeSoTxn, bs58PublicKeyToCompressedBytes, encodeUTF8ToBytes, identity, publicKeyToBase58Check, sha256X2, } from './identity';
////////////////////////////////////////////////////////////////////////////////

@@ -62,8 +62,12 @@ // This is all the stuff we don't export to consumers of the library. If

};
export const constructBalanceModelTx = (pubKey, metadata, txFields) => __awaiter(void 0, void 0, void 0, function* () {
// TODO: cache block height somewhere.
const { BlockHeight } = yield getAppState();
export const getTxWithFeeNanos = (pubKey, metadata, txFields) => {
var _a;
const nonce = new TransactionNonce();
// NOTE: typically we would use the block height returned from a node to build
// a transaction, but just for calculating fees we can use a pseudo value, in
// this case we just use the max safe integer.
// TODO: put in real block height buffer.
nonce.expirationBlockHeight = BlockHeight + 275;
nonce.expirationBlockHeight = (txFields === null || txFields === void 0 ? void 0 : txFields.BlockHeight)
? txFields.BlockHeight + 275
: Number.MAX_SAFE_INTEGER;
// TODO: cache used partial IDs? Replace with better logic

@@ -89,3 +93,8 @@ // for generating random uint64

});
const txnWithFee = computeFee(transaction, (txFields === null || txFields === void 0 ? void 0 : txFields.MinFeeRateNanosPerKB) || globalConfigOptions.MinFeeRateNanosPerKB);
return computeFee(transaction, (_a = txFields === null || txFields === void 0 ? void 0 : txFields.MinFeeRateNanosPerKB) !== null && _a !== void 0 ? _a : globalConfigOptions.MinFeeRateNanosPerKB);
};
export const constructBalanceModelTx = (pubKey, metadata, txFields) => __awaiter(void 0, void 0, void 0, function* () {
// TODO: cache block height somewhere.
const { BlockHeight } = yield getAppState();
const txnWithFee = getTxWithFeeNanos(pubKey, metadata, Object.assign(Object.assign({}, txFields), { BlockHeight }));
const txnBytes = txnWithFee.toBytes();

@@ -155,2 +164,7 @@ const TransactionHex = bytesToHex(txnBytes);

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFNTCxlQUFlLEdBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBT3RCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsdUJBQXVCLEdBQ3hCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLGdGQUFnRjtBQUNoRix3RUFBd0U7QUFDeEUsMEVBQTBFO0FBQzFFLGdGQUFnRjtBQUVoRiw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLCtCQUErQjtBQUMvQixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLGlCQUFpQixFQUFFLEtBQUs7Q0FDekIsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLFFBQWdCLEVBQ2hCLE1BQXNDO0FBQ3RDLDJFQUEyRTtBQUMzRSxVQUEwQixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFJNUMsRUFBRTs7SUFDSCxNQUFNLDhCQUE4QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUI7UUFDdEUsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7UUFDeEMsT0FBTyxDQUFDLG9CQUFvQjtRQUMxQixDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztR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QUU7SUFDN0QsT0FBTyxDQUNMLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDakQsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ5dGVzVG9IZXggfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7XG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgU3VibWl0VHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgVHJhbnNhY3Rpb25GZWUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnLi9iYWNrZW5kLXR5cGVzJztcbmltcG9ydCB7IGFwaSwgY2xlYW5VUkwsIGdldEFwcFN0YXRlIH0gZnJvbSAnLi9kYXRhJztcbmltcG9ydCB7XG4gIGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyxcbiAgZW5jb2RlVVRGOFRvQnl0ZXMsXG4gIGlkZW50aXR5LFxuICBwdWJsaWNLZXlUb0Jhc2U1OENoZWNrLFxuICBzaGEyNTZYMixcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uRXh0cmFEYXRhLFxuICBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXB0TkZUQmlkLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRlTkZULFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhTkZUQmlkLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhUmVjb3JkLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhU3VibWl0UG9zdCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YVVwZGF0ZU5GVCxcbiAgVHJhbnNhY3Rpb25Ob25jZSxcbiAgVHJhbnNhY3Rpb25PdXRwdXQsXG4gIFRyYW5zYWN0aW9uVG9Nc2dEZVNvVHhuLFxufSBmcm9tICcuL2lkZW50aXR5Jztcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBUaGlzIGlzIGFsbCB0aGUgc3R1ZmYgd2UgZG9uJ3QgZXhwb3J0IHRvIGNvbnN1bWVycyBvZiB0aGUgbGlicmFyeS4gSWZcbi8vIGFueXRoaW5nIGhlcmUgbmVlZHMgdG8gYmUgZXhwb3J0ZWQsIGl0IHNob3VsZCBiZSBtb3ZlZCB0byBhbm90aGVyIGZpbGUuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vLyBUaGlzIGNhbiBiZSBtdXRhdGVkIGJ5IHRoZSB1c2VyIG9mIHRoZSBsaWJyYXJ5IHZpYSB0aGUgY29uZmlndXJlIGZ1bmN0aW9uLFxuLy8gYnV0IGl0J3Mgbm90IGV4cG9ydGVkIGV4cGxpY2l0bHkuIFdoYXRldmVyIGNoYW5nZXMgYXJlIG1hZGUgZXh0ZXJuYWxseSB3aWxsXG4vLyBiZSByZWZsZWN0ZWQgaW4gdGhlIGxpYnJhcnkuXG5leHBvcnQgY29uc3QgZ2xvYmFsQ29uZmlnT3B0aW9ucyA9IHtcbiAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IDE1MDAsXG4gIExvY2FsQ29uc3RydWN0aW9uOiBmYWxzZSxcbn07XG5cbi8qKlxuICogV3JhcHMgc2lnbmluZyBhbmQgc3VibWl0IHRvIGluY2x1ZGUgdGhlIGNvbmZpZ3VyYWJsZSBmZWUsIGFuZCBhZGQgZGVmYXVsdHNcbiAqIGZvciBvcHRpb25hbCBwYXJhbXMuXG4gKlxuICogQHBhcmFtIGVuZHBvaW50IHRoZSBlbmRwb2ludCBmb3IgY29uc3RydWN0aW5nIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHBhcmFtcyB0eCBzcGVjaWZpYyBwYXJhbXMgZm9yIHRoZSBlbmRwb2ludCArIG9wdGlvbmFsIGZlZXMgYW5kIGV4dHJhIGRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZVNpZ25BbmRTdWJtaXQgPSBhc3luYyAoXG4gIGVuZHBvaW50OiBzdHJpbmcsXG4gIHBhcmFtczogT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhICYgYW55LFxuICAvLyB3ZSBhbHdheXMgYnJvYWRjYXN0IGJ5IGRlZmF1bHQsIGJ1dCBjb25zdW1lcnMgY2FuIG9wdGlvbmFsbHkgZGlzYWJsZSBpdC5cbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7IGJyb2FkY2FzdDogdHJ1ZSB9XG4pOiBQcm9taXNlPHtcbiAgY29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlOiBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U7XG4gIHN1Ym1pdHRlZFRyYW5zYWN0aW9uUmVzcG9uc2U6IFN1Ym1pdFRyYW5zYWN0aW9uUmVzcG9uc2UgfCBudWxsO1xufT4gPT4ge1xuICBjb25zdCBjb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCAoKG9wdGlvbnMubG9jYWxDb25zdHJ1Y3Rpb24gfHxcbiAgICBnbG9iYWxDb25maWdPcHRpb25zLkxvY2FsQ29uc3RydWN0aW9uKSAmJlxuICBvcHRpb25zLmNvbnN0cnVjdGlvbkZ1bmN0aW9uXG4gICAgPyBvcHRpb25zLmNvbnN0cnVjdGlvbkZ1bmN0aW9uKHBhcmFtcylcbiAgICA6IGFwaS5wb3N0KFxuICAgICAgICBvcHRpb25zLm5vZGVVUkkgPyBgJHtjbGVhblVSTChvcHRpb25zLm5vZGVVUkksIGVuZHBvaW50KX1gIDogZW5kcG9pbnQsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6XG4gICAgICAgICAgICBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IgPz9cbiAgICAgICAgICAgIGdsb2JhbENvbmZpZ09wdGlvbnMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICAgIH1cbiAgICAgICkpO1xuICBpZiAoXG4gICAgKG9wdGlvbnMubG9jYWxDb25zdHJ1Y3Rpb24gfHwgZ2xvYmFsQ29uZmlnT3B0aW9ucy5Mb2NhbENvbnN0cnVjdGlvbikgJiZcbiAgICBvcHRpb25zLmNvbnN0cnVjdGlvbkZ1bmN0aW9uXG4gICkge1xuICAgIGNvbnNvbGUubG9nKGNvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSk7XG4gIH1cbiAgY29uc3Qgc3VibWl0dGVkVHJhbnNhY3Rpb25SZXNwb25zZSA9XG4gICAgb3B0aW9ucy5icm9hZGNhc3QgIT09IGZhbHNlXG4gICAgICA/IGF3YWl0IGlkZW50aXR5LnNpZ25BbmRTdWJtaXQoY29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlKVxuICAgICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgY29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlLFxuICAgIHN1Ym1pdHRlZFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBCYWxhbmNlTW9kZWxUcmFuc2FjdGlvbkZpZWxkcyA9IHtcbiAgT3V0cHV0cz86IFRyYW5zYWN0aW9uT3V0cHV0W107XG4gIEV4dHJhRGF0YT86IHsgW2s6IHN0cmluZ106IHN0cmluZyB9O1xuICBDb25zZW5zdXNFeHRyYURhdGFLVnM/OiBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWW107XG4gIE1pbkZlZVJhdGVOYW5vc1BlcktCPzogbnVtYmVyO1xuICBUcmFuc2FjdGlvbkZlZXM/OiBUcmFuc2FjdGlvbkZlZVtdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0RXh0cmFEYXRhID0gKFxuICBleHRyYURhdGE/OiB7IFtrOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzPzogVHJhbnNhY3Rpb25FeHRyYURhdGFLVltdXG4pOiBUcmFuc2FjdGlvbkV4dHJhRGF0YSA9PiB7XG4gIGNvbnN0IHNvcnRlZEV4dHJhRGF0YSA9IChjb25zZW5zdXNFeHRyYURhdGFLVnMgfHwgW10pXG4gICAgLmNvbmNhdChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhRGF0YSB8fCB7fSkubWFwKFxuICAgICAgICAoW2ssIHZdKSA9PlxuICAgICAgICAgIG5ldyBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWKGVuY29kZVVURjhUb0J5dGVzKGspLCBlbmNvZGVVVEY4VG9CeXRlcyh2KSlcbiAgICAgIClcbiAgICApXG4gICAgLnNvcnQoKGEsIGIpID0+IGEua2V5LnRvU3RyaW5nKCkubG9jYWxlQ29tcGFyZShiLmtleS50b1N0cmluZygpKSk7XG4gIGNvbnN0IHJlYWxFeHRyYURhdGEgPSBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGEoKTtcbiAgcmVhbEV4dHJhRGF0YS5rdnMgPSBzb3J0ZWRFeHRyYURhdGE7XG4gIHJldHVybiByZWFsRXh0cmFEYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4ID0gYXN5bmMgKFxuICBwdWJLZXk6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFRyYW5zYWN0aW9uTWV0YWRhdGFSZWNvcmQsXG4gIHR4RmllbGRzPzogQmFsYW5jZU1vZGVsVHJhbnNhY3Rpb25GaWVsZHNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIC8vIFRPRE86IGNhY2hlIGJsb2NrIGhlaWdodCBzb21ld2hlcmUuXG4gIGNvbnN0IHsgQmxvY2tIZWlnaHQgfSA9IGF3YWl0IGdldEFwcFN0YXRlKCk7XG4gIGNvbnN0IG5vbmNlID0gbmV3IFRyYW5zYWN0aW9uTm9uY2UoKTtcbiAgLy8gVE9ETzogcHV0IGluIHJlYWwgYmxvY2sgaGVpZ2h0IGJ1ZmZlci5cbiAgbm9uY2UuZXhwaXJhdGlvbkJsb2NrSGVpZ2h0ID0gQmxvY2tIZWlnaHQgKyAyNzU7XG4gIC8vIFRPRE86IGNhY2hlIHVzZWQgcGFydGlhbCBJRHM/IFJlcGxhY2Ugd2l0aCBiZXR0ZXIgbG9naWNcbiAgLy8gZm9yIGdlbmVyYXRpbmcgcmFuZG9tIHVpbnQ2NFxuICBub25jZS5wYXJ0aWFsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTE4KTtcbiAgY29uc3QgdHJhbnNhY3Rpb25GZWVPdXRwdXRzID0gKHR4RmllbGRzPy5UcmFuc2FjdGlvbkZlZXMgfHwgW10pLm1hcCgodGYpID0+IHtcbiAgICBjb25zdCBuZXdPdXRwdXQgPSBuZXcgVHJhbnNhY3Rpb25PdXRwdXQoKTtcbiAgICBuZXdPdXRwdXQucHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgICAgdGYuUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgICApO1xuICAgIG5ld091dHB1dC5hbW91bnROYW5vcyA9IHRmLkFtb3VudE5hbm9zO1xuICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gIH0pO1xuICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbih7XG4gICAgdmVyc2lvbjogMSxcbiAgICBmZWVOYW5vczogMCxcbiAgICBub25jZSxcbiAgICBtZXRhZGF0YSxcbiAgICBvdXRwdXRzOiB0cmFuc2FjdGlvbkZlZU91dHB1dHMuY29uY2F0KHR4RmllbGRzPy5PdXRwdXRzIHx8IFtdKSxcbiAgICBpbnB1dHM6IFtdLFxuICAgIGV4dHJhRGF0YTogY29udmVydEV4dHJhRGF0YShcbiAgICAgIHR4RmllbGRzPy5FeHRyYURhdGEsXG4gICAgICB0eEZpZWxkcz8uQ29uc2Vuc3VzRXh0cmFEYXRhS1ZzXG4gICAgKSxcbiAgICBwdWJsaWNLZXk6IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhwdWJLZXkpLFxuICAgIHNpZ25hdHVyZTogbmV3IFVpbnQ4QXJyYXkoMCksXG4gIH0pO1xuXG4gIGNvbnN0IHR4bldpdGhGZWUgPSBjb21wdXRlRmVlKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHR4RmllbGRzPy5NaW5GZWVSYXRlTmFub3NQZXJLQiB8fCBnbG9iYWxDb25maWdPcHRpb25zLk1pbkZlZVJhdGVOYW5vc1BlcktCXG4gICk7XG4gIGNvbnN0IHR4bkJ5dGVzID0gdHhuV2l0aEZlZS50b0J5dGVzKCk7XG4gIGNvbnN0IFRyYW5zYWN0aW9uSGV4ID0gYnl0ZXNUb0hleCh0eG5CeXRlcyk7XG5cbiAgLy8gVE9ETzogbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV2ZXJ5dGhpbmcgcmV0dXJuZWQgaW4gdGhlIGNvbnN0cnVjdGVkIHRyYW5zYWN0aW9uXG4gIC8vIHJlc3BvbnNlIG9iamVjdCBmb3IgZWFjaCB0eXBlLiB0aGlzIHdpbGwgYmUgYSBoZWFkYWNoZSBubyBkb3VidC5cbiAgY29uc3QgZmVlcyA9IHR4bldpdGhGZWUuZmVlTmFub3M7XG4gIGNvbnN0IG91dHB1dFN1bSA9IHR4bldpdGhGZWUub3V0cHV0cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLmFtb3VudE5hbm9zLCAwKTtcbiAgLy8gVE9ETzogc3VtIGV4dHJhIHNwZW5kIGZvciBjcmVhdG9yIGNvaW5zLCBkYW8gY29pbiBsaW1pdCBvcmRlcnMgKHVnaCksIGNyZWF0ZSBORlRzLCBjcmVhdGUgcHJvZmlsZVxuICAvLyBORlQgYnV5cy4gUHJvYmFibHkgbm90IG5lY2Vzc2FyaWx5LCBidXQgd291bGQgYmUgYmVzdCB0byBoYXZlIHRoaXMuXG4gIGNvbnN0IHR4bkhhc2ggPSBzaGEyNTZYMih0eG5CeXRlcyk7XG4gIGNvbnN0IHR4blR5cGUgPSB0eG5XaXRoRmVlLmdldFR4blR5cGVTdHJpbmcoKTtcbiAgcmV0dXJuIHtcbiAgICBUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25Ub01zZ0RlU29UeG4odHhuV2l0aEZlZSksXG4gICAgRmVlTmFub3M6IGZlZXMsXG4gICAgVHJhbnNhY3Rpb25IZXgsXG4gICAgQ2hhbmdlQW1vdW50TmFub3M6IDAsXG4gICAgVG90YWxJbnB1dE5hbm9zOiBmZWVzICsgb3V0cHV0U3VtLFxuICAgIFNwZW5kQW1vdW50TmFub3M6IGZlZXMgKyBvdXRwdXRTdW0sXG4gICAgVHJhbnNhY3Rpb25JREJhc2U1OENoZWNrOiBwdWJsaWNLZXlUb0Jhc2U1OENoZWNrKHR4bkhhc2gpLFxuICAgIFR4bkhhc2hIZXg6IGJ5dGVzVG9IZXgodHhuSGFzaCksXG4gICAgUG9zdEhhc2hIZXg6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3VibWl0UG9zdCA/IGJ5dGVzVG9IZXgodHhuSGFzaCkgOiB1bmRlZmluZWQsXG4gICAgVHN0YW1wTmFub3M6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3VibWl0UG9zdFxuICAgICAgICA/IChtZXRhZGF0YSBhcyBUcmFuc2FjdGlvbk1ldGFkYXRhU3VibWl0UG9zdCkudGltZXN0YW1wTmFub3NcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgTkZUUG9zdEhhc2hIZXg6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQ3JlYXRlTkZUIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuVXBkYXRlTkZUIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuTkZUQmlkIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWNjZXB0TkZUQmlkXG4gICAgICAgID8gYnl0ZXNUb0hleChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgbWV0YWRhdGEgYXNcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdGVORlRcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFVcGRhdGVORlRcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFORlRCaWRcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFBY2NlcHRORlRCaWRcbiAgICAgICAgICAgICkubmZ0UG9zdEhhc2hcbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIFNlcmlhbE51bWJlcjpcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5VcGRhdGVORlQgfHxcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ORlRCaWQgfHxcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BY2NlcHRORlRCaWRcbiAgICAgICAgPyAoXG4gICAgICAgICAgICBtZXRhZGF0YSBhc1xuICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFVcGRhdGVORlRcbiAgICAgICAgICAgICAgfCBUcmFuc2FjdGlvbk1ldGFkYXRhTkZUQmlkXG4gICAgICAgICAgICAgIHwgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2VwdE5GVEJpZFxuICAgICAgICAgICkuc2VyaWFsTnVtYmVyXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIFVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjazpcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ORlRCaWQgPyBwdWJLZXkgOiB1bmRlZmluZWQsXG4gICAgQmlkQW1vdW50TmFub3M6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuTkZUQmlkIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWNjZXB0TkZUQmlkXG4gICAgICAgID8gKFxuICAgICAgICAgICAgbWV0YWRhdGEgYXNcbiAgICAgICAgICAgICAgfCBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXB0TkZUQmlkXG4gICAgICAgICAgICAgIHwgVHJhbnNhY3Rpb25NZXRhZGF0YU5GVEJpZFxuICAgICAgICAgICkuYmlkQW1vdW50TmFub3NcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgQmlkZGVyUHVibGljS2V5QmFzZTU4Q2hlY2s6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWNjZXB0TkZUQmlkXG4gICAgICAgID8gcHVibGljS2V5VG9CYXNlNThDaGVjayhcbiAgICAgICAgICAgIChtZXRhZGF0YSBhcyBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXB0TkZUQmlkKS5iaWRkZXJQS0lEXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlRmVlID0gKHR4bjogVHJhbnNhY3Rpb24sIGZlZVJhdGU6IG51bWJlcik6IFRyYW5zYWN0aW9uID0+IHtcbiAgaWYgKCFmZWVSYXRlKSByZXR1cm4gdHhuO1xuICBsZXQgcHJldkZlZSA9IDA7XG4gIGxldCBmZWUgPSAwO1xuICB3aGlsZSAocHJldkZlZSA9PSAwIHx8IHByZXZGZWUgIT0gZmVlKSB7XG4gICAgcHJldkZlZSA9IGZlZTtcbiAgICBjb25zdCBzaXplID0gY29tcHV0ZVR4U2l6ZSh0eG4pICsgNzE7XG4gICAgZmVlID0gTWF0aC5jZWlsKChzaXplICogZmVlUmF0ZSkgLyAxMDAwKTtcbiAgICB0eG4uZmVlTmFub3MgPSBmZWU7XG4gIH1cbiAgcmV0dXJuIHR4bjtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVHhTaXplID0gKHR4bjogVHJhbnNhY3Rpb24pOiBudW1iZXIgPT4ge1xuICByZXR1cm4gdHhuLnRvQnl0ZXMoKS5sZW5ndGg7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNYXliZURlU29QdWJsaWNLZXkgPSAocXVlcnk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIChxdWVyeS5sZW5ndGggPT09IDU1ICYmIHF1ZXJ5LnN0YXJ0c1dpdGgoJ0JDJykpIHx8XG4gICAgKHF1ZXJ5Lmxlbmd0aCA9PT0gNTQgJiYgcXVlcnkuc3RhcnRzV2l0aCgndEJDJykpXG4gICk7XG59O1xuIl19
export const sumTransactionFees = (txFees) => {
if (!(txFees === null || txFees === void 0 ? void 0 : txFees.length))
return 0;
return txFees.reduce((acc, curr) => acc + curr.AmountNanos, 0);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFNTCxlQUFlLEdBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQU90QixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2Qiw4QkFBOEIsRUFDOUIsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsUUFBUSxHQUNULE1BQU0sWUFBWSxDQUFDO0FBQ3BCLGdGQUFnRjtBQUNoRix3RUFBd0U7QUFDeEUsMEVBQTBFO0FBQzFFLGdGQUFnRjtBQUVoRiw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLCtCQUErQjtBQUMvQixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLGlCQUFpQixFQUFFLEtBQUs7Q0FDekIsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLFFBQWdCLEVBQ2hCLE1BQXNDO0FBQ3RDLDJFQUEyRTtBQUMzRSxVQUEwQixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFJNUMsRUFBRTs7SUFDSCxNQUFNLDhCQUE4QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUI7UUFDdEUsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7UUFDeEMsT0FBTyxDQUFDLG9CQUFvQjtRQUMxQixDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztR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SSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztLQUNwQjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBZ0IsRUFBVSxFQUFFO0lBQ3hELE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO0lBQzdELE9BQU8sQ0FDTCxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2pELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUNoQyxNQUFnQyxFQUN4QixFQUFFO0lBQ1YsSUFBSSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQTtRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQVcsQ0FBQyxDQUFDO0FBQzNFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ5dGVzVG9IZXggfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7XG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgU3VibWl0VHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgVHJhbnNhY3Rpb25GZWUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnLi9iYWNrZW5kLXR5cGVzJztcbmltcG9ydCB7IGFwaSwgY2xlYW5VUkwsIGdldEFwcFN0YXRlIH0gZnJvbSAnLi9kYXRhJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkV4dHJhRGF0YSxcbiAgVHJhbnNhY3Rpb25FeHRyYURhdGFLVixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2VwdE5GVEJpZCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0ZU5GVCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YU5GVEJpZCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YVJlY29yZCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YVN1Ym1pdFBvc3QsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFVcGRhdGVORlQsXG4gIFRyYW5zYWN0aW9uTm9uY2UsXG4gIFRyYW5zYWN0aW9uT3V0cHV0LFxuICBUcmFuc2FjdGlvblRvTXNnRGVTb1R4bixcbiAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzLFxuICBlbmNvZGVVVEY4VG9CeXRlcyxcbiAgaWRlbnRpdHksXG4gIHB1YmxpY0tleVRvQmFzZTU4Q2hlY2ssXG4gIHNoYTI1NlgyLFxufSBmcm9tICcuL2lkZW50aXR5Jztcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBUaGlzIGlzIGFsbCB0aGUgc3R1ZmYgd2UgZG9uJ3QgZXhwb3J0IHRvIGNvbnN1bWVycyBvZiB0aGUgbGlicmFyeS4gSWZcbi8vIGFueXRoaW5nIGhlcmUgbmVlZHMgdG8gYmUgZXhwb3J0ZWQsIGl0IHNob3VsZCBiZSBtb3ZlZCB0byBhbm90aGVyIGZpbGUuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vLyBUaGlzIGNhbiBiZSBtdXRhdGVkIGJ5IHRoZSB1c2VyIG9mIHRoZSBsaWJyYXJ5IHZpYSB0aGUgY29uZmlndXJlIGZ1bmN0aW9uLFxuLy8gYnV0IGl0J3Mgbm90IGV4cG9ydGVkIGV4cGxpY2l0bHkuIFdoYXRldmVyIGNoYW5nZXMgYXJlIG1hZGUgZXh0ZXJuYWxseSB3aWxsXG4vLyBiZSByZWZsZWN0ZWQgaW4gdGhlIGxpYnJhcnkuXG5leHBvcnQgY29uc3QgZ2xvYmFsQ29uZmlnT3B0aW9ucyA9IHtcbiAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IDE1MDAsXG4gIExvY2FsQ29uc3RydWN0aW9uOiBmYWxzZSxcbn07XG5cbi8qKlxuICogV3JhcHMgc2lnbmluZyBhbmQgc3VibWl0IHRvIGluY2x1ZGUgdGhlIGNvbmZpZ3VyYWJsZSBmZWUsIGFuZCBhZGQgZGVmYXVsdHNcbiAqIGZvciBvcHRpb25hbCBwYXJhbXMuXG4gKlxuICogQHBhcmFtIGVuZHBvaW50IHRoZSBlbmRwb2ludCBmb3IgY29uc3RydWN0aW5nIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHBhcmFtcyB0eCBzcGVjaWZpYyBwYXJhbXMgZm9yIHRoZSBlbmRwb2ludCArIG9wdGlvbmFsIGZlZXMgYW5kIGV4dHJhIGRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZVNpZ25BbmRTdWJtaXQgPSBhc3luYyAoXG4gIGVuZHBvaW50OiBzdHJpbmcsXG4gIHBhcmFtczogT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhICYgYW55LFxuICAvLyB3ZSBhbHdheXMgYnJvYWRjYXN0IGJ5IGRlZmF1bHQsIGJ1dCBjb25zdW1lcnMgY2FuIG9wdGlvbmFsbHkgZGlzYWJsZSBpdC5cbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7IGJyb2FkY2FzdDogdHJ1ZSB9XG4pOiBQcm9taXNlPHtcbiAgY29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlOiBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U7XG4gIHN1Ym1pdHRlZFRyYW5zYWN0aW9uUmVzcG9uc2U6IFN1Ym1pdFRyYW5zYWN0aW9uUmVzcG9uc2UgfCBudWxsO1xufT4gPT4ge1xuICBjb25zdCBjb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCAoKG9wdGlvbnMubG9jYWxDb25zdHJ1Y3Rpb24gfHxcbiAgICBnbG9iYWxDb25maWdPcHRpb25zLkxvY2FsQ29uc3RydWN0aW9uKSAmJlxuICBvcHRpb25zLmNvbnN0cnVjdGlvbkZ1bmN0aW9uXG4gICAgPyBvcHRpb25zLmNvbnN0cnVjdGlvbkZ1bmN0aW9uKHBhcmFtcylcbiAgICA6IGFwaS5wb3N0KFxuICAgICAgICBvcHRpb25zLm5vZGVVUkkgPyBgJHtjbGVhblVSTChvcHRpb25zLm5vZGVVUkksIGVuZHBvaW50KX1gIDogZW5kcG9pbnQsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6XG4gICAgICAgICAgICBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IgPz9cbiAgICAgICAgICAgIGdsb2JhbENvbmZpZ09wdGlvbnMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICAgIH1cbiAgICAgICkpO1xuICBpZiAoXG4gICAgKG9wdGlvbnMubG9jYWxDb25zdHJ1Y3Rpb24gfHwgZ2xvYmFsQ29uZmlnT3B0aW9ucy5Mb2NhbENvbnN0cnVjdGlvbikgJiZcbiAgICBvcHRpb25zLmNvbnN0cnVjdGlvbkZ1bmN0aW9uXG4gICkge1xuICAgIGNvbnNvbGUubG9nKGNvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSk7XG4gIH1cbiAgY29uc3Qgc3VibWl0dGVkVHJhbnNhY3Rpb25SZXNwb25zZSA9XG4gICAgb3B0aW9ucy5icm9hZGNhc3QgIT09IGZhbHNlXG4gICAgICA/IGF3YWl0IGlkZW50aXR5LnNpZ25BbmRTdWJtaXQoY29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlKVxuICAgICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgY29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlLFxuICAgIHN1Ym1pdHRlZFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBCYWxhbmNlTW9kZWxUcmFuc2FjdGlvbkZpZWxkcyA9IHtcbiAgT3V0cHV0cz86IFRyYW5zYWN0aW9uT3V0cHV0W107XG4gIEV4dHJhRGF0YT86IHsgW2s6IHN0cmluZ106IHN0cmluZyB9O1xuICBDb25zZW5zdXNFeHRyYURhdGFLVnM/OiBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWW107XG4gIE1pbkZlZVJhdGVOYW5vc1BlcktCPzogbnVtYmVyO1xuICBUcmFuc2FjdGlvbkZlZXM/OiBUcmFuc2FjdGlvbkZlZVtdIHwgbnVsbDtcbiAgQmxvY2tIZWlnaHQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydEV4dHJhRGF0YSA9IChcbiAgZXh0cmFEYXRhPzogeyBbazogc3RyaW5nXTogc3RyaW5nIH0sXG4gIGNvbnNlbnN1c0V4dHJhRGF0YUtWcz86IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1ZbXVxuKTogVHJhbnNhY3Rpb25FeHRyYURhdGEgPT4ge1xuICBjb25zdCBzb3J0ZWRFeHRyYURhdGEgPSAoY29uc2Vuc3VzRXh0cmFEYXRhS1ZzIHx8IFtdKVxuICAgIC5jb25jYXQoXG4gICAgICBPYmplY3QuZW50cmllcyhleHRyYURhdGEgfHwge30pLm1hcChcbiAgICAgICAgKFtrLCB2XSkgPT5cbiAgICAgICAgICBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGFLVihlbmNvZGVVVEY4VG9CeXRlcyhrKSwgZW5jb2RlVVRGOFRvQnl0ZXModikpXG4gICAgICApXG4gICAgKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLmtleS50b1N0cmluZygpLmxvY2FsZUNvbXBhcmUoYi5rZXkudG9TdHJpbmcoKSkpO1xuICBjb25zdCByZWFsRXh0cmFEYXRhID0gbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhKCk7XG4gIHJlYWxFeHRyYURhdGEua3ZzID0gc29ydGVkRXh0cmFEYXRhO1xuICByZXR1cm4gcmVhbEV4dHJhRGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeFdpdGhGZWVOYW5vcyA9IChcbiAgcHViS2V5OiBzdHJpbmcsXG4gIG1ldGFkYXRhOiBUcmFuc2FjdGlvbk1ldGFkYXRhUmVjb3JkLFxuICB0eEZpZWxkcz86IEJhbGFuY2VNb2RlbFRyYW5zYWN0aW9uRmllbGRzXG4pID0+IHtcbiAgY29uc3Qgbm9uY2UgPSBuZXcgVHJhbnNhY3Rpb25Ob25jZSgpO1xuICAvLyBOT1RFOiB0eXBpY2FsbHkgd2Ugd291bGQgdXNlIHRoZSBibG9jayBoZWlnaHQgcmV0dXJuZWQgZnJvbSBhIG5vZGUgdG8gYnVpbGRcbiAgLy8gYSB0cmFuc2FjdGlvbiwgYnV0IGp1c3QgZm9yIGNhbGN1bGF0aW5nIGZlZXMgd2UgY2FuIHVzZSBhIHBzZXVkbyB2YWx1ZSwgaW5cbiAgLy8gdGhpcyBjYXNlIHdlIGp1c3QgdXNlIHRoZSBtYXggc2FmZSBpbnRlZ2VyLlxuICAvLyBUT0RPOiBwdXQgaW4gcmVhbCBibG9jayBoZWlnaHQgYnVmZmVyLlxuICBub25jZS5leHBpcmF0aW9uQmxvY2tIZWlnaHQgPSB0eEZpZWxkcz8uQmxvY2tIZWlnaHRcbiAgICA/IHR4RmllbGRzLkJsb2NrSGVpZ2h0ICsgMjc1XG4gICAgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgLy8gVE9ETzogY2FjaGUgdXNlZCBwYXJ0aWFsIElEcz8gUmVwbGFjZSB3aXRoIGJldHRlciBsb2dpY1xuICAvLyBmb3IgZ2VuZXJhdGluZyByYW5kb20gdWludDY0XG4gIG5vbmNlLnBhcnRpYWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTgpO1xuICBjb25zdCB0cmFuc2FjdGlvbkZlZU91dHB1dHMgPSAodHhGaWVsZHM/LlRyYW5zYWN0aW9uRmVlcyB8fCBbXSkubWFwKCh0ZikgPT4ge1xuICAgIGNvbnN0IG5ld091dHB1dCA9IG5ldyBUcmFuc2FjdGlvbk91dHB1dCgpO1xuICAgIG5ld091dHB1dC5wdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgICB0Zi5QdWJsaWNLZXlCYXNlNThDaGVja1xuICAgICk7XG4gICAgbmV3T3V0cHV0LmFtb3VudE5hbm9zID0gdGYuQW1vdW50TmFub3M7XG4gICAgcmV0dXJuIG5ld091dHB1dDtcbiAgfSk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHtcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGZlZU5hbm9zOiAwLFxuICAgIG5vbmNlLFxuICAgIG1ldGFkYXRhLFxuICAgIG91dHB1dHM6IHRyYW5zYWN0aW9uRmVlT3V0cHV0cy5jb25jYXQodHhGaWVsZHM/Lk91dHB1dHMgfHwgW10pLFxuICAgIGlucHV0czogW10sXG4gICAgZXh0cmFEYXRhOiBjb252ZXJ0RXh0cmFEYXRhKFxuICAgICAgdHhGaWVsZHM/LkV4dHJhRGF0YSxcbiAgICAgIHR4RmllbGRzPy5Db25zZW5zdXNFeHRyYURhdGFLVnNcbiAgICApLFxuICAgIHB1YmxpY0tleTogYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKHB1YktleSksXG4gICAgc2lnbmF0dXJlOiBuZXcgVWludDhBcnJheSgwKSxcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVGZWUoXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgdHhGaWVsZHM/Lk1pbkZlZVJhdGVOYW5vc1BlcktCID8/IGdsb2JhbENvbmZpZ09wdGlvbnMuTWluRmVlUmF0ZU5hbm9zUGVyS0JcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeCA9IGFzeW5jIChcbiAgcHViS2V5OiBzdHJpbmcsXG4gIG1ldGFkYXRhOiBUcmFuc2FjdGlvbk1ldGFkYXRhUmVjb3JkLFxuICB0eEZpZWxkcz86IEJhbGFuY2VNb2RlbFRyYW5zYWN0aW9uRmllbGRzXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICAvLyBUT0RPOiBjYWNoZSBibG9jayBoZWlnaHQgc29tZXdoZXJlLlxuICBjb25zdCB7IEJsb2NrSGVpZ2h0IH0gPSBhd2FpdCBnZXRBcHBTdGF0ZSgpO1xuXG4gIGNvbnN0IHR4bldpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhwdWJLZXksIG1ldGFkYXRhLCB7XG4gICAgLi4udHhGaWVsZHMsXG4gICAgQmxvY2tIZWlnaHQsXG4gIH0pO1xuXG4gIGNvbnN0IHR4bkJ5dGVzID0gdHhuV2l0aEZlZS50b0J5dGVzKCk7XG4gIGNvbnN0IFRyYW5zYWN0aW9uSGV4ID0gYnl0ZXNUb0hleCh0eG5CeXRlcyk7XG5cbiAgLy8gVE9ETzogbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV2ZXJ5dGhpbmcgcmV0dXJuZWQgaW4gdGhlIGNvbnN0cnVjdGVkIHRyYW5zYWN0aW9uXG4gIC8vIHJlc3BvbnNlIG9iamVjdCBmb3IgZWFjaCB0eXBlLiB0aGlzIHdpbGwgYmUgYSBoZWFkYWNoZSBubyBkb3VidC5cbiAgY29uc3QgZmVlcyA9IHR4bldpdGhGZWUuZmVlTmFub3M7XG4gIGNvbnN0IG91dHB1dFN1bSA9IHR4bldpdGhGZWUub3V0cHV0cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLmFtb3VudE5hbm9zLCAwKTtcbiAgLy8gVE9ETzogc3VtIGV4dHJhIHNwZW5kIGZvciBjcmVhdG9yIGNvaW5zLCBkYW8gY29pbiBsaW1pdCBvcmRlcnMgKHVnaCksIGNyZWF0ZSBORlRzLCBjcmVhdGUgcHJvZmlsZVxuICAvLyBORlQgYnV5cy4gUHJvYmFibHkgbm90IG5lY2Vzc2FyaWx5LCBidXQgd291bGQgYmUgYmVzdCB0byBoYXZlIHRoaXMuXG4gIGNvbnN0IHR4bkhhc2ggPSBzaGEyNTZYMih0eG5CeXRlcyk7XG4gIGNvbnN0IHR4blR5cGUgPSB0eG5XaXRoRmVlLmdldFR4blR5cGVTdHJpbmcoKTtcbiAgcmV0dXJuIHtcbiAgICBUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25Ub01zZ0RlU29UeG4odHhuV2l0aEZlZSksXG4gICAgRmVlTmFub3M6IGZlZXMsXG4gICAgVHJhbnNhY3Rpb25IZXgsXG4gICAgQ2hhbmdlQW1vdW50TmFub3M6IDAsXG4gICAgVG90YWxJbnB1dE5hbm9zOiBmZWVzICsgb3V0cHV0U3VtLFxuICAgIFNwZW5kQW1vdW50TmFub3M6IGZlZXMgKyBvdXRwdXRTdW0sXG4gICAgVHJhbnNhY3Rpb25JREJhc2U1OENoZWNrOiBwdWJsaWNLZXlUb0Jhc2U1OENoZWNrKHR4bkhhc2gpLFxuICAgIFR4bkhhc2hIZXg6IGJ5dGVzVG9IZXgodHhuSGFzaCksXG4gICAgUG9zdEhhc2hIZXg6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3VibWl0UG9zdCA/IGJ5dGVzVG9IZXgodHhuSGFzaCkgOiB1bmRlZmluZWQsXG4gICAgVHN0YW1wTmFub3M6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3VibWl0UG9zdFxuICAgICAgICA/IChtZXRhZGF0YSBhcyBUcmFuc2FjdGlvbk1ldGFkYXRhU3VibWl0UG9zdCkudGltZXN0YW1wTmFub3NcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgTkZUUG9zdEhhc2hIZXg6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQ3JlYXRlTkZUIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuVXBkYXRlTkZUIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuTkZUQmlkIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWNjZXB0TkZUQmlkXG4gICAgICAgID8gYnl0ZXNUb0hleChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgbWV0YWRhdGEgYXNcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdGVORlRcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFVcGRhdGVORlRcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFORlRCaWRcbiAgICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFBY2NlcHRORlRCaWRcbiAgICAgICAgICAgICkubmZ0UG9zdEhhc2hcbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIFNlcmlhbE51bWJlcjpcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5VcGRhdGVORlQgfHxcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ORlRCaWQgfHxcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BY2NlcHRORlRCaWRcbiAgICAgICAgPyAoXG4gICAgICAgICAgICBtZXRhZGF0YSBhc1xuICAgICAgICAgICAgICB8IFRyYW5zYWN0aW9uTWV0YWRhdGFVcGRhdGVORlRcbiAgICAgICAgICAgICAgfCBUcmFuc2FjdGlvbk1ldGFkYXRhTkZUQmlkXG4gICAgICAgICAgICAgIHwgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2VwdE5GVEJpZFxuICAgICAgICAgICkuc2VyaWFsTnVtYmVyXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIFVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjazpcbiAgICAgIHR4blR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ORlRCaWQgPyBwdWJLZXkgOiB1bmRlZmluZWQsXG4gICAgQmlkQW1vdW50TmFub3M6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuTkZUQmlkIHx8XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWNjZXB0TkZUQmlkXG4gICAgICAgID8gKFxuICAgICAgICAgICAgbWV0YWRhdGEgYXNcbiAgICAgICAgICAgICAgfCBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXB0TkZUQmlkXG4gICAgICAgICAgICAgIHwgVHJhbnNhY3Rpb25NZXRhZGF0YU5GVEJpZFxuICAgICAgICAgICkuYmlkQW1vdW50TmFub3NcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgQmlkZGVyUHVibGljS2V5QmFzZTU4Q2hlY2s6XG4gICAgICB0eG5UeXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWNjZXB0TkZUQmlkXG4gICAgICAgID8gcHVibGljS2V5VG9CYXNlNThDaGVjayhcbiAgICAgICAgICAgIChtZXRhZGF0YSBhcyBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXB0TkZUQmlkKS5iaWRkZXJQS0lEXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlRmVlID0gKHR4bjogVHJhbnNhY3Rpb24sIGZlZVJhdGU6IG51bWJlcik6IFRyYW5zYWN0aW9uID0+IHtcbiAgaWYgKCFmZWVSYXRlKSByZXR1cm4gdHhuO1xuICBsZXQgcHJldkZlZSA9IDA7XG4gIGxldCBmZWUgPSAwO1xuICB3aGlsZSAocHJldkZlZSA9PSAwIHx8IHByZXZGZWUgIT0gZmVlKSB7XG4gICAgcHJldkZlZSA9IGZlZTtcbiAgICBjb25zdCBzaXplID0gY29tcHV0ZVR4U2l6ZSh0eG4pICsgNzE7XG4gICAgZmVlID0gTWF0aC5jZWlsKChzaXplICogZmVlUmF0ZSkgLyAxMDAwKTtcbiAgICB0eG4uZmVlTmFub3MgPSBmZWU7XG4gIH1cbiAgcmV0dXJuIHR4bjtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVHhTaXplID0gKHR4bjogVHJhbnNhY3Rpb24pOiBudW1iZXIgPT4ge1xuICByZXR1cm4gdHhuLnRvQnl0ZXMoKS5sZW5ndGg7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNYXliZURlU29QdWJsaWNLZXkgPSAocXVlcnk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIChxdWVyeS5sZW5ndGggPT09IDU1ICYmIHF1ZXJ5LnN0YXJ0c1dpdGgoJ0JDJykpIHx8XG4gICAgKHF1ZXJ5Lmxlbmd0aCA9PT0gNTQgJiYgcXVlcnkuc3RhcnRzV2l0aCgndEJDJykpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc3VtVHJhbnNhY3Rpb25GZWVzID0gKFxuICB0eEZlZXM/OiBUcmFuc2FjdGlvbkZlZVtdIHwgbnVsbFxuKTogbnVtYmVyID0+IHtcbiAgaWYgKCF0eEZlZXM/Lmxlbmd0aCkgcmV0dXJuIDA7XG4gIHJldHVybiB0eEZlZXMucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuQW1vdW50TmFub3MsIDAgYXMgbnVtYmVyKTtcbn07XG4iXX0=

@@ -11,3 +11,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import { api, cleanURL, media } from './data';
import { encodeUTF8ToBytes, identity, TransactionExtraDataKV, TransactionMetadataUpdateGlobalParams, uvarint64ToBuf, } from './identity';
import { TransactionExtraDataKV, TransactionMetadataUpdateGlobalParams, encodeUTF8ToBytes, identity, uvarint64ToBuf, } from './identity';
import { constructBalanceModelTx, handleSignAndSubmit } from './internal';

@@ -19,3 +19,3 @@ const jwtPost = (endpoint, params = {}, options) => __awaiter(void 0, void 0, void 0, function* () {

if (isAdminRequest) {
const { currentUser } = identity.snapshot();
const { currentUser } = yield identity.snapshot();
if (!currentUser) {

@@ -208,2 +208,2 @@ throw new Error('Cannot issue an admin request without a logged in user');

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXJlcXVlc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2p3dC1yZXF1ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFrRUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUE2QixNQUFNLFFBQVEsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIscUNBQXFDLEVBQ3JDLGNBQWMsR0FDZixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUUsTUFBTSxPQUFPLEdBQUcsQ0FDZCxRQUFnQixFQUNoQixTQUFjLEVBQUUsRUFDaEIsT0FBd0IsRUFDeEIsRUFBRTs7SUFDRixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUV4QixJQUFJLGNBQWMsRUFBRTtRQUNsQixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsY0FBYyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7S0FDeEM7SUFFRCxNQUFNLFVBQVUsaURBQ1gsTUFBTSxHQUNOLENBQUMsY0FBYyxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsS0FDekMsR0FBRyxFQUFFLE1BQUEsTUFBTSxDQUFDLEdBQUcsbUNBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUMxQyxDQUFDO0lBRUYsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxFQUFFO1FBQ3RCLE9BQU8s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dkMsQ0FBQztBQUNKLENBQUMsQ0FBQSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRtaW5HZXRBbGxVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LFxuICBBZG1pbkdldEhvdEZlZWRBbGdvcml0aG1SZXNwb25zZSxcbiAgQWRtaW5HZXRIb3RGZWVkVXNlck11bHRpcGxpZXJSZXF1ZXN0LFxuICBBZG1pbkdldEhvdEZlZWRVc2VyTXVsdGlwbGllclJlc3BvbnNlLFxuICBBZG1pbkdldE1lbXBvb2xTdGF0c1Jlc3BvbnNlLFxuICBBZG1pbkdldE5GVERyb3BSZXF1ZXN0LFxuICBBZG1pbkdldE5GVERyb3BSZXNwb25zZSxcbiAgQWRtaW5HZXRVc2VyQWRtaW5EYXRhUmVxdWVzdCxcbiAgQWRtaW5HZXRVc2VyQWRtaW5EYXRhUmVzcG9uc2UsXG4gIEFkbWluR2V0VXNlckdsb2JhbE1ldGFkYXRhUmVxdWVzdCxcbiAgQWRtaW5HZXRVc2VyR2xvYmFsTWV0YWRhdGFSZXNwb25zZSxcbiAgQWRtaW5HZXRVc2VybmFtZVZlcmlmaWNhdGlvbkF1ZGl0TG9nc1JlcXVlc3QsXG4gIEFkbWluR2V0VXNlcm5hbWVWZXJpZmljYXRpb25BdWRpdExvZ3NSZXNwb25zZSxcbiAgQWRtaW5HZXRWZXJpZmllZFVzZXJzUmVzcG9uc2UsXG4gIEFkbWluR3JhbnRWZXJpZmljYXRpb25CYWRnZVJlcXVlc3QsXG4gIEFkbWluR3JhbnRWZXJpZmljYXRpb25CYWRnZVJlc3BvbnNlLFxuICBBZG1pblBpblBvc3RSZXF1ZXN0LFxuICBBZG1pblJlbW92ZU5pbFBvc3RzUmVxdWVzdCxcbiAgQWRtaW5SZW1vdmVWZXJpZmljYXRpb25CYWRnZVJlcXVlc3QsXG4gIEFkbWluUmVtb3ZlVmVyaWZpY2F0aW9uQmFkZ2VSZXNwb25zZSxcbiAgQWRtaW5VcGRhdGVHbG9iYWxGZWVkUmVxdWVzdCxcbiAgQWRtaW5VcGRhdGVIb3RGZWVkQWxnb3JpdGhtUmVxdWVzdCxcbiAgQWRtaW5VcGRhdGVIb3RGZWVkUG9zdE11bHRpcGxpZXJSZXF1ZXN0LFxuICBBZG1pblVwZGF0ZUhvdEZlZWRVc2VyTXVsdGlwbGllclJlcXVlc3QsXG4gIEFkbWluVXBkYXRlTkZURHJvcFJlcXVlc3QsXG4gIEFkbWluVXBkYXRlTkZURHJvcFJlc3BvbnNlLFxuICBBZG1pblVwZGF0ZVVzZXJHbG9iYWxNZXRhZGF0YVJlcXVlc3QsXG4gIEJsb2NrUHVibGljS2V5UmVxdWVzdCxcbiAgQmxvY2tQdWJsaWNLZXlSZXNwb25zZSxcbiAgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlLFxuICBEZWxldGVQSUlSZXF1ZXN0LFxuICBHZXRCdXlEZVNvRmVlQmFzaXNQb2ludHNSZXNwb25zZSxcbiAgR2V0R2xvYmFsUGFyYW1zUmVzcG9uc2UsXG4gIEdldFVTRENlbnRzVG9EZVNvRXhjaGFuZ2VSYXRlUmVzcG9uc2UsXG4gIEdldFVzZXJHbG9iYWxNZXRhZGF0YVJlcXVlc3QsXG4gIEdldFVzZXJHbG9iYWxNZXRhZGF0YVJlc3BvbnNlLFxuICBHZXRXeXJlV2FsbGV0T3JkZXJGb3JQdWJsaWNLZXlSZXF1ZXN0LFxuICBHZXRXeXJlV2FsbGV0T3JkZXJGb3JQdWJsaWNLZXlSZXNwb25zZSxcbiAgSG90RmVlZFBhZ2VSZXF1ZXN0LFxuICBIb3RGZWVkUGFnZVJlc3BvbnNlLFxuICBOb2RlQ29udHJvbFJlcXVlc3QsXG4gIE5vZGVDb250cm9sUmVzcG9uc2UsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBSZXNlbmRWZXJpZnlFbWFpbFJlcXVlc3QsXG4gIFNldEJ1eURlU29GZWVCYXNpc1BvaW50c1JlcXVlc3QsXG4gIFNldEJ1eURlU29GZWVCYXNpc1BvaW50c1Jlc3BvbnNlLFxuICBTZXROb3RpZmljYXRpb25NZXRhZGF0YVJlcXVlc3QsXG4gIFNldFVTRENlbnRzVG9EZVNvRXhjaGFuZ2VSYXRlUmVxdWVzdCxcbiAgU2V0VVNEQ2VudHNUb0RlU29FeGNoYW5nZVJhdGVSZXNwb25zZSxcbiAgU3dhcElkZW50aXR5UmVxdWVzdCxcbiAgU3dhcElkZW50aXR5UmVzcG9uc2UsXG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEsXG4gIFVwZGF0ZUdsb2JhbFBhcmFtc1JlcXVlc3QsXG4gIFVwZGF0ZUdsb2JhbFBhcmFtc1Jlc3BvbnNlLFxuICBVcGRhdGVVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LFxuICBVcGxvYWRJbWFnZVJlcXVlc3QsXG4gIFVwbG9hZEltYWdlUmVzcG9uc2UsXG4gIFVwbG9hZFZpZGVvUmVxdWVzdCxcbiAgVXBsb2FkVmlkZW9WMlJlc3BvbnNlLFxuICBWZXJpZnlFbWFpbFJlcXVlc3QsXG4gIFdhbGxldE9yZGVyUXVvdGF0aW9uUmVxdWVzdCxcbiAgV2FsbGV0T3JkZXJSZXNlcnZhdGlvblJlcXVlc3QsXG4gIFd5cmVXYWxsZXRPcmRlclF1b3RhdGlvblBheWxvYWQsXG4gIFd5cmVXYWxsZXRPcmRlclJlc2VydmF0aW9uUGF5bG9hZCxcbn0gZnJvbSAnLi9iYWNrZW5kLXR5cGVzJztcbmltcG9ydCB7IGFwaSwgY2xlYW5VUkwsIG1lZGlhLCBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzIH0gZnJvbSAnLi9kYXRhJztcbmltcG9ydCB7XG4gIGVuY29kZVVURjhUb0J5dGVzLFxuICBpZGVudGl0eSxcbiAgVHJhbnNhY3Rpb25FeHRyYURhdGFLVixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YVVwZGF0ZUdsb2JhbFBhcmFtcyxcbiAgdXZhcmludDY0VG9CdWYsXG59IGZyb20gJy4vaWRlbnRpdHknO1xuaW1wb3J0IHsgY29uc3RydWN0QmFsYW5jZU1vZGVsVHgsIGhhbmRsZVNpZ25BbmRTdWJtaXQgfSBmcm9tICcuL2ludGVybmFsJztcbmltcG9ydCB7IENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHggfSBmcm9tICcuL3R5cGVzJztcbmNvbnN0IGp3dFBvc3QgPSBhc3luYyAoXG4gIGVuZHBvaW50OiBzdHJpbmcsXG4gIHBhcmFtczogYW55ID0ge30sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKSA9PiB7XG4gIGNvbnN0IGlzQWRtaW5SZXF1ZXN0ID0gZW5kcG9pbnQuaW5jbHVkZXMoJ2FwaS92MC9hZG1pbicpO1xuICBsZXQgQWRtaW5QdWJsaWNLZXkgPSAnJztcblxuICBpZiAoaXNBZG1pblJlcXVlc3QpIHtcbiAgICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSBpZGVudGl0eS5zbmFwc2hvdCgpO1xuXG4gICAgaWYgKCFjdXJyZW50VXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaXNzdWUgYW4gYWRtaW4gcmVxdWVzdCB3aXRob3V0IGEgbG9nZ2VkIGluIHVzZXInKTtcbiAgICB9XG5cbiAgICBBZG1pblB1YmxpY0tleSA9IGN1cnJlbnRVc2VyLnB1YmxpY0tleTtcbiAgfVxuXG4gIGNvbnN0IHBvc3RQYXJhbXMgPSB7XG4gICAgLi4ucGFyYW1zLFxuICAgIC4uLihpc0FkbWluUmVxdWVzdCAmJiB7IEFkbWluUHVibGljS2V5IH0pLFxuICAgIEpXVDogcGFyYW1zLkpXVCA/PyAoYXdhaXQgaWRlbnRpdHkuand0KCkpLFxuICB9O1xuXG4gIGlmIChvcHRpb25zPy5icm9hZGNhc3QpIHtcbiAgICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChlbmRwb2ludCwgcG9zdFBhcmFtcywgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gYXBpLnBvc3QoXG4gICAgb3B0aW9ucz8ubm9kZVVSSSA/IGNsZWFuVVJMKG9wdGlvbnMubm9kZVVSSSwgZW5kcG9pbnQpIDogZW5kcG9pbnQsXG4gICAgcG9zdFBhcmFtc1xuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2FwaS91c2VyLWVuZHBvaW50cyNnZXQtdXNlci1nbG9iYWwtbWV0YWRhdGEtZW1haWwtYW5kLXBob25lLW51bWJlclxuICovXG5leHBvcnQgY29uc3QgZ2V0VXNlckdsb2JhbE1ldGFkYXRhID0gYXN5bmMgKFxuICBwYXJhbXM6IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgR2V0VXNlckdsb2JhbE1ldGFkYXRhUmVxdWVzdCxcbiAgICAnVXNlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICA+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8R2V0VXNlckdsb2JhbE1ldGFkYXRhUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9nZXQtdXNlci1nbG9iYWwtbWV0YWRhdGEnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2FwaS91c2VyLWVuZHBvaW50cyN1cGRhdGUtdXNlci1nbG9iYWwtbWV0YWRhdGEtZW1haWwtYW5kLXN0YXRlLW9mLW1lc3NhZ2VzLXJlYWRcbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlVXNlckdsb2JhbE1ldGFkYXRhUGFyYW1zID0gUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgVXBkYXRlVXNlckdsb2JhbE1ldGFkYXRhUmVxdWVzdCxcbiAgJ1VzZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbj47XG5leHBvcnQgY29uc3QgdXBkYXRlVXNlckdsb2JhbE1ldGFkYXRhID0gYXN5bmMgKFxuICBwYXJhbXM6IFVwZGF0ZVVzZXJHbG9iYWxNZXRhZGF0YVBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC91cGRhdGUtdXNlci1nbG9iYWwtbWV0YWRhdGEnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2FwaS91c2VyLWVuZHBvaW50cyNkZWxldGUtcGlpLXBlcnNvbmFsLWlkZW50aWZpYWJsZS1pbmZvcm1hdGlvblxuICovXG5leHBvcnQgY29uc3QgZGVsZXRlUElJID0gYXN5bmMgKFxuICBwYXJhbXM6IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8RGVsZXRlUElJUmVxdWVzdCwgJ1B1YmxpY0tleUJhc2U1OENoZWNrJz4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTx1bmRlZmluZWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9kZWxldGUtcGlpJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9hcGkvdXNlci1lbmRwb2ludHMjYmxvY2stcHVibGljLWtleVxuICovXG5leHBvcnQgdHlwZSBCbG9ja1B1YmxpY0tleVBhcmFtcyA9IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gIEJsb2NrUHVibGljS2V5UmVxdWVzdCxcbiAgJ0Jsb2NrUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ1B1YmxpY0tleUJhc2U1OENoZWNrJ1xuPjtcbmV4cG9ydCBjb25zdCBibG9ja1B1YmxpY0tleSA9IGFzeW5jIChcbiAgcGFyYW1zOiBCbG9ja1B1YmxpY0tleVBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEJsb2NrUHVibGljS2V5UmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9ibG9jay1wdWJsaWMta2V5JywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9hcGkvbm90aWZpY2F0aW9uLWVuZHBvaW50cyNzZXQtbm90aWZpY2F0aW9uLW1ldGFkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBzZXROb3RpZmljYXRpb25NZXRhZGF0YSA9IGFzeW5jIChcbiAgcGFyYW1zOiBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIFNldE5vdGlmaWNhdGlvbk1ldGFkYXRhUmVxdWVzdCxcbiAgICB8ICdQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICB8ICdMYXN0U2VlbkluZGV4J1xuICAgIHwgJ0xhc3RVbnJlYWROb3RpZmljYXRpb25JbmRleCdcbiAgICB8ICdVbnJlYWROb3RpZmljYXRpb25zJ1xuICA+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbikgPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL3NldC1ub3RpZmljYXRpb24tbWV0YWRhdGEnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQWRtaW4gZW5kcG9pbnRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvYXBpL2FkbWluLWVuZHBvaW50cyNnZXQtdmVyaWZpZWQtdXNlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkbWluR2V0VmVyaWZpZWRVc2VycyA9IChcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEFkbWluR2V0VmVyaWZpZWRVc2Vyc1Jlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vZ2V0LXZlcmlmaWVkLXVzZXJzJywge30sIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2FwaS9hZG1pbi1lbmRwb2ludHMjZ2V0LXVzZXJuYW1lLXZlcmlmaWNhdGlvbi1hdWRpdC1sb2dzXG4gKi9cbmV4cG9ydCBjb25zdCBhZG1pbkdldFVzZXJuYW1lVmVyaWZpY2F0aW9uQXVkaXRMb2cgPSAoXG4gIHBhcmFtczogQWRtaW5HZXRVc2VybmFtZVZlcmlmaWNhdGlvbkF1ZGl0TG9nc1JlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBZG1pbkdldFVzZXJuYW1lVmVyaWZpY2F0aW9uQXVkaXRMb2dzUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgJ2FwaS92MC9hZG1pbi9nZXQtdXNlcm5hbWUtdmVyaWZpY2F0aW9uLWF1ZGl0LWxvZycsXG4gICAgcGFyYW1zLFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pbk5vZGVDb250cm9sID0gKFxuICBwYXJhbXM6IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgT21pdDxOb2RlQ29udHJvbFJlcXVlc3QsICdKV1QnIHwgJ0FkbWluUHVibGljS2V5Jz4sXG4gICAgJ0FkZHJlc3MnIHwgJ09wZXJhdGlvblR5cGUnXG4gID4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxOb2RlQ29udHJvbFJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vbm9kZS1jb250cm9sJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pbkdyYW50VmVyaWZpY2F0aW9uQmFkZ2UgPSAoXG4gIHBhcmFtczogT21pdDxBZG1pbkdyYW50VmVyaWZpY2F0aW9uQmFkZ2VSZXF1ZXN0LCAnQWRtaW5QdWJsaWNLZXknPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEFkbWluR3JhbnRWZXJpZmljYXRpb25CYWRnZVJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vZ3JhbnQtdmVyaWZpY2F0aW9uLWJhZGdlJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pblJlbW92ZVZlcmlmaWNhdGlvbkJhZGdlID0gKFxuICBwYXJhbXM6IE9taXQ8QWRtaW5SZW1vdmVWZXJpZmljYXRpb25CYWRnZVJlcXVlc3QsICdBZG1pblB1YmxpY0tleSc+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5SZW1vdmVWZXJpZmljYXRpb25CYWRnZVJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vcmVtb3ZlLXZlcmlmaWNhdGlvbi1iYWRnZScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRVc2VyQWRtaW5EYXRhID0gKFxuICBwYXJhbXM6IEFkbWluR2V0VXNlckFkbWluRGF0YVJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBZG1pbkdldFVzZXJBZG1pbkRhdGFSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC11c2VyLWFkbWluLWRhdGEnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0VXNlckdsb2JhbE1ldGFkYXRhID0gKFxuICBwYXJhbXM6IEFkbWluR2V0VXNlckdsb2JhbE1ldGFkYXRhUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEFkbWluR2V0VXNlckdsb2JhbE1ldGFkYXRhUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9nZXQtdXNlci1nbG9iYWwtbWV0YWRhdGEnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluVXBkYXRlVXNlckdsb2JhbE1ldGFkYXRhID0gKFxuICBwYXJhbXM6IE9taXQ8QWRtaW5VcGRhdGVVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LCAnQWRtaW5QdWJsaWNLZXknPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi91cGRhdGUtdXNlci1nbG9iYWwtbWV0YWRhdGEnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0QWxsVXNlckdsb2JhbE1ldGFkYXRhID0gKFxuICBwYXJhbXM6IEFkbWluR2V0QWxsVXNlckdsb2JhbE1ldGFkYXRhUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEFkbWluR2V0VXNlckdsb2JhbE1ldGFkYXRhUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9nZXQtYWxsLXVzZXItZ2xvYmFsLW1ldGFkYXRhJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pblBpblBvc3QgPSAoXG4gIHBhcmFtczogQWRtaW5QaW5Qb3N0UmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9waW4tcG9zdCcsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5VcGRhdGVHbG9iYWxGZWVkID0gKFxuICBwYXJhbXM6IEFkbWluVXBkYXRlR2xvYmFsRmVlZFJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vdXBkYXRlLWdsb2JhbC1mZWVkJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pblJlbW92ZU5pbFBvc3RzID0gKFxuICBwYXJhbXM6IEFkbWluUmVtb3ZlTmlsUG9zdHNSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL3JlbW92ZS1uaWwtcG9zdHMnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluUmVwcm9jZXNzQml0Y29pbkJsb2NrID0gKFxuICBibG9ja0hhc2hPckJsb2NrSGVpZ2h0OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKSA9PiB7XG4gIHJldHVybiBqd3RQb3N0KFxuICAgIGBhcGkvdjAvYWRtaW4vcmVwcm9jZXNzLWJpdGNvaW4tYmxvY2svJHtibG9ja0hhc2hPckJsb2NrSGVpZ2h0fWAsXG4gICAge30sXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0TWVtcG9vbFN0YXRzID0gKFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HZXRNZW1wb29sU3RhdHNSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC1tZW1wb29sLXN0YXRzJywge30sIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluU3dhcElkZW50aXR5ID0gYXN5bmMgKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8U3dhcElkZW50aXR5UmVxdWVzdD4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFN3YXBJZGVudGl0eVJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL3N3YXAtaWRlbnRpdHknLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluU2V0VVNEQ2VudHNUb0RFU09SZXNlcnZlRXhjaGFuZ2VSYXRlID0gKFxuICBwYXJhbXM6IE9taXQ8U2V0VVNEQ2VudHNUb0RlU29FeGNoYW5nZVJhdGVSZXF1ZXN0LCAnQWRtaW5QdWJsaWNLZXknPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFNldFVTRENlbnRzVG9EZVNvRXhjaGFuZ2VSYXRlUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgJ2FwaS92MC9hZG1pbi9zZXQtdXNkLWNlbnRzLXRvLWRlc28tcmVzZXJ2ZS1leGNoYW5nZS1yYXRlJyxcbiAgICBwYXJhbXMsXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuLy8gTm90IGEgand0IHJlcXVlc3QsIGJ1dCBpdCdzIGFuIGFkbWluIGVuZHBvaW50IHNvIGl0J3MgaGVyZS4uLlxuZXhwb3J0IGNvbnN0IGFkbWluR2V0VVNEQ2VudHNUb0RFU09SZXNlcnZlRXhjaGFuZ2VSYXRlID0gKFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8R2V0VVNEQ2VudHNUb0RlU29FeGNoYW5nZVJhdGVSZXNwb25zZT4gPT4ge1xuICBjb25zdCBlbmRwb2ludCA9ICdhcGkvdjAvYWRtaW4vZ2V0LXVzZC1jZW50cy10by1kZXNvLXJlc2VydmUtZXhjaGFuZ2UtcmF0ZSc7XG4gIHJldHVybiBhcGkuZ2V0KFxuICAgIG9wdGlvbnM/Lm5vZGVVUkkgPyBjbGVhblVSTChvcHRpb25zLm5vZGVVUkksIGVuZHBvaW50KSA6IGVuZHBvaW50XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5TZXRCdXlEZXNvRmVlQmFzaXNQb2ludHMgPSAoXG4gIHBhcmFtczogT21pdDxTZXRCdXlEZVNvRmVlQmFzaXNQb2ludHNSZXF1ZXN0LCAnQWRtaW5QdWJsaWNLZXknPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFNldEJ1eURlU29GZWVCYXNpc1BvaW50c1Jlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vc2V0LWJ1eS1kZXNvLWZlZS1iYXNpcy1wb2ludHMnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0QnV5RGVzb0ZlZUJhc2lzUG9pbnRzID0gKFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8R2V0QnV5RGVTb0ZlZUJhc2lzUG9pbnRzUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgZW5kcG9pbnQgPSAnYXBpL3YwL2FkbWluL2dldC1idXktZGVzby1mZWUtYmFzaXMtcG9pbnRzJztcbiAgcmV0dXJuIGFwaS5nZXQoXG4gICAgb3B0aW9ucz8ubm9kZVVSSSA/IGNsZWFuVVJMKG9wdGlvbnMubm9kZVVSSSwgZW5kcG9pbnQpIDogZW5kcG9pbnRcbiAgKTtcbn07XG5cbmV4cG9ydCB0eXBlIEFkbWluVXBkYXRlR2xvYmFsUGFyYW1zUmVxdWVzdFBhcmFtcyA9XG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gICAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICAgIFVwZGF0ZUdsb2JhbFBhcmFtc1JlcXVlc3QsXG4gICAgICB8ICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdVU0RDZW50c1BlckJpdGNvaW4nXG4gICAgICB8ICdDcmVhdGVQcm9maWxlRmVlTmFub3MnXG4gICAgICB8ICdNYXhDb3BpZXNQZXJORlQnXG4gICAgICB8ICdDcmVhdGVORlRGZWVOYW5vcydcbiAgICAgIHwgJ01pbmltdW1OZXR3b3JrRmVlTmFub3NQZXJLQidcbiAgICA+XG4gID47XG5cbmV4cG9ydCBjb25zdCBhZG1pblVwZGF0ZUdsb2JhbFBhcmFtcyA9IGFzeW5jIChcbiAgcGFyYW1zOiBBZG1pblVwZGF0ZUdsb2JhbFBhcmFtc1JlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFVwZGF0ZUdsb2JhbFBhcmFtc1Jlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2FkbWluL3VwZGF0ZS1nbG9iYWwtcGFyYW1zJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0QWRtaW5VcGRhdGVHbG9iYWxQYXJhbXNUcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0QWRtaW5VcGRhdGVHbG9iYWxQYXJhbXNUcmFuc2FjdGlvbiA9IGFzeW5jIChcbiAgcGFyYW1zOiBBZG1pblVwZGF0ZUdsb2JhbFBhcmFtc1JlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFVcGRhdGVHbG9iYWxQYXJhbXMoKTtcbiAgY29uc3QgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzOiBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWW10gPSBbXTtcbiAgaWYgKHBhcmFtcy5VU0RDZW50c1BlckJpdGNvaW4gPj0gMCkge1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoXG4gICAgICAgIGVuY29kZVVURjhUb0J5dGVzKCdVU0RDZW50c1BlckJpdGNvaW4nKSxcbiAgICAgICAgdXZhcmludDY0VG9CdWYocGFyYW1zLlVTRENlbnRzUGVyQml0Y29pbilcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGlmIChwYXJhbXMuTWluaW11bU5ldHdvcmtGZWVOYW5vc1BlcktCID49IDApIHtcbiAgICBjb25zZW5zdXNFeHRyYURhdGFLVnMucHVzaChcbiAgICAgIG5ldyBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWKFxuICAgICAgICBlbmNvZGVVVEY4VG9CeXRlcygnTWluTmV0d29ya0ZlZU5hbm9zUGVyS0InKSxcbiAgICAgICAgdXZhcmludDY0VG9CdWYocGFyYW1zLk1pbmltdW1OZXR3b3JrRmVlTmFub3NQZXJLQilcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGlmIChwYXJhbXMuQ3JlYXRlUHJvZmlsZUZlZU5hbm9zID49IDApIHtcbiAgICBjb25zZW5zdXNFeHRyYURhdGFLVnMucHVzaChcbiAgICAgIG5ldyBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWKFxuICAgICAgICBlbmNvZGVVVEY4VG9CeXRlcygnQ3JlYXRlUHJvZmlsZUZlZU5hbm9zJyksXG4gICAgICAgIHV2YXJpbnQ2NFRvQnVmKHBhcmFtcy5DcmVhdGVQcm9maWxlRmVlTmFub3MpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBpZiAocGFyYW1zLkNyZWF0ZU5GVEZlZU5hbm9zID49IDApIHtcbiAgICBjb25zZW5zdXNFeHRyYURhdGFLVnMucHVzaChcbiAgICAgIG5ldyBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWKFxuICAgICAgICBlbmNvZGVVVEY4VG9CeXRlcygnQ3JlYXRlTkZURmVlTmFub3MnKSxcbiAgICAgICAgdXZhcmludDY0VG9CdWYocGFyYW1zLkNyZWF0ZU5GVEZlZU5hbm9zKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgaWYgKHBhcmFtcy5NYXhDb3BpZXNQZXJORlQgPj0gMCkge1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoXG4gICAgICAgIGVuY29kZVVURjhUb0J5dGVzKCdNYXhDb3BpZXNQZXJORlQnKSxcbiAgICAgICAgdXZhcmludDY0VG9CdWYocGFyYW1zLk1heENvcGllc1Blck5GVClcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChwYXJhbXMuVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrLCBtZXRhZGF0YSwge1xuICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICBDb25zZW5zdXNFeHRyYURhdGFLVnM6IGNvbnNlbnN1c0V4dHJhRGF0YUtWcyxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRHbG9iYWxQYXJhbXMgPSAoXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxHZXRHbG9iYWxQYXJhbXNSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC1nbG9iYWwtcGFyYW1zJywge30sIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0TkZURHJvcCA9IChcbiAgcGFyYW1zOiBBZG1pbkdldE5GVERyb3BSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HZXRORlREcm9wUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9nZXQtbmZ0LWRyb3AnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluVXBkYXRlTkZURHJvcCA9IChcbiAgcGFyYW1zOiBBZG1pblVwZGF0ZU5GVERyb3BSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5VcGRhdGVORlREcm9wUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJy9hcGkvdjAvYWRtaW4vdXBkYXRlLW5mdC1kcm9wJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pbkdldFVuZmlsdGVyZWRIb3RGZWVkID0gKFxuICBwYXJhbXM6IFBhcnRpYWw8SG90RmVlZFBhZ2VSZXF1ZXN0PixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEhvdEZlZWRQYWdlUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9nZXQtdW5maWx0ZXJlZC1ob3QtZmVlZCcsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRIb3RGZWVkQWxnb3JpdGhtID0gKFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HZXRIb3RGZWVkQWxnb3JpdGhtUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9nZXQtaG90LWZlZWQtYWxnb3JpdGhtJywge30sIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluVXBkYXRlSG90RmVlZEFsZ29yaXRobSA9IChcbiAgcGFyYW1zOiBBZG1pblVwZGF0ZUhvdEZlZWRBbGdvcml0aG1SZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL3VwZGF0ZS1ob3QtZmVlZC1hbGdvcml0aG0nLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluVXBkYXRlSG90RmVlZFVzZXJNdWx0aXBsaWVyID0gKFxuICBwYXJhbXM6IEFkbWluVXBkYXRlSG90RmVlZFVzZXJNdWx0aXBsaWVyUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgJ2FwaS92MC9hZG1pbi91cGRhdGUtaG90LWZlZWQtdXNlci1tdWx0aXBsaWVyJyxcbiAgICBwYXJhbXMsXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluVXBkYXRlSG90RmVlZFBvc3RNdWx0aXBsaWVyID0gKFxuICBwYXJhbXM6IEFkbWluVXBkYXRlSG90RmVlZFBvc3RNdWx0aXBsaWVyUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgJ2FwaS92MC9hZG1pbi91cGRhdGUtaG90LWZlZWQtcG9zdC1tdWx0aXBsaWVyJyxcbiAgICBwYXJhbXMsXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0SG90RmVlZFVzZXJNdWx0aXBsaWVyID0gKFxuICBwYXJhbXM6IEFkbWluR2V0SG90RmVlZFVzZXJNdWx0aXBsaWVyUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEFkbWluR2V0SG90RmVlZFVzZXJNdWx0aXBsaWVyUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9nZXQtaG90LWZlZWQtdXNlci1tdWx0aXBsaWVyJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pbkdldFd5cmVXYWxsZXRPcmRlcnNGb3JVc2VyID0gKFxuICBwYXJhbXM6XG4gICAgfCBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgICBPbWl0PEdldFd5cmVXYWxsZXRPcmRlckZvclB1YmxpY0tleVJlcXVlc3QsICdBZG1pblB1YmxpY0tleSc+LFxuICAgICAgICAnUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICA+XG4gICAgfCBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgICBPbWl0PEdldFd5cmVXYWxsZXRPcmRlckZvclB1YmxpY0tleVJlcXVlc3QsICdBZG1pblB1YmxpY0tleSc+LFxuICAgICAgICAnVXNlcm5hbWUnXG4gICAgICA+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8R2V0V3lyZVdhbGxldE9yZGVyRm9yUHVibGljS2V5UmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgJ2FwaS92MC9hZG1pbi9nZXQtd3lyZS13YWxsZXQtb3JkZXJzLWZvci1wdWJsaWMta2V5JyxcbiAgICBwYXJhbXMsXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0V3lyZVdhbGxldE9yZGVyUXVvdGF0aW9uID0gKFxuICBwYXJhbXM6IFdhbGxldE9yZGVyUXVvdGF0aW9uUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFd5cmVXYWxsZXRPcmRlclF1b3RhdGlvblBheWxvYWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgJ2FwaS92MC9hZG1pbi9nZXQtd3lyZS13YWxsZXQtb3JkZXItcXVvdGF0aW9uJyxcbiAgICBwYXJhbXMsXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0V3lyZVdhbGxldE9yZGVyUmVzZXJ2YXRpb24gPSAoXG4gIHBhcmFtczogV2FsbGV0T3JkZXJSZXNlcnZhdGlvblJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxXeXJlV2FsbGV0T3JkZXJSZXNlcnZhdGlvblBheWxvYWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgJ2FwaS92MC9hZG1pbi9nZXQtd3lyZS13YWxsZXQtb3JkZXItcmVzZXJ2YXRpb24nLFxuICAgIHBhcmFtcyxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZW5kVmVyaWZ5RW1haWwgPSAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxSZXNlbmRWZXJpZnlFbWFpbFJlcXVlc3QsICdQdWJsaWNLZXknPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9yZXNlbmQtdmVyaWZ5LWVtYWlsJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2ZXJpZnlFbWFpbCA9IChcbiAgcGFyYW1zOiBWZXJpZnlFbWFpbFJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGVuZHBvaW50ID0gJ2FwaS92MC92ZXJpZnktZW1haWwnO1xuICByZXR1cm4gYXBpLnBvc3QoXG4gICAgb3B0aW9ucz8ubm9kZVVSSSA/IGNsZWFuVVJMKG9wdGlvbnMubm9kZVVSSSwgZW5kcG9pbnQpIDogZW5kcG9pbnQsXG4gICAgcGFyYW1zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBsb2FkSW1hZ2UgPSBhc3luYyAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBVcGxvYWRJbWFnZVJlcXVlc3QsXG4gICAgJ2ZpbGUnIHwgJ1VzZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFVwbG9hZEltYWdlUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgSldUID0gcGFyYW1zLkpXVCA/PyAoYXdhaXQgaWRlbnRpdHkuand0KCkpO1xuICBjb25zdCBlbmRwb2ludCA9ICdhcGkvdjAvdXBsb2FkLWltYWdlJztcblxuICByZXR1cm4gYXBpLnBvc3QoXG4gICAgb3B0aW9ucz8ubm9kZVVSSSA/IGNsZWFuVVJMKG9wdGlvbnMubm9kZVVSSSwgZW5kcG9pbnQpIDogZW5kcG9pbnQsXG4gICAgeyBKV1QsIC4uLnBhcmFtcyB9LFxuICAgIHsgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBsb2FkVmlkZW8gPSBhc3luYyAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBVcGxvYWRWaWRlb1JlcXVlc3QsXG4gICAgJ1VzZXJQdWJsaWNLZXlCYXNlNThDaGVjaycgfCAnZmlsZSdcbiAgPlxuKTogUHJvbWlzZTxVcGxvYWRWaWRlb1YyUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgSldUID0gcGFyYW1zLkpXVCA/PyAoYXdhaXQgaWRlbnRpdHkuand0KCkpO1xuICBjb25zdCBlbmRwb2ludCA9ICdhcGkvdjAvdXBsb2FkLXZpZGVvJztcbiAgcmV0dXJuIG1lZGlhLnBvc3QoXG4gICAgZW5kcG9pbnQsXG4gICAgeyBKV1QsIC4uLnBhcmFtcyB9LFxuICAgIHsgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICk7XG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXJlcXVlc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2p3dC1yZXF1ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFrRUEsT0FBTyxFQUE2QixHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHFDQUFxQyxFQUNyQyxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLGNBQWMsR0FDZixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUUsTUFBTSxPQUFPLEdBQUcsQ0FDZCxRQUFnQixFQUNoQixTQUFjLEVBQUUsRUFDaEIsT0FBd0IsRUFDeEIsRUFBRTs7SUFDRixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUV4QixJQUFJLGNBQWMsRUFBRTtRQUNsQixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFbEQsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7U0FDM0U7UUFFRCxjQUFjLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztLQUN4QztJQUVELE1BQU0sVUFBVSxpREFDWCxNQUFNLEdBQ04sQ0FBQyxjQUFjLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxLQUN6QyxHQUFHLEVBQUUsTUFBQSxNQUFNLENBQUMsR0FBRyxtQ0FBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQzFDLENBQUM7SUFFRixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxTQUFTLEVBQUU7UUFDdEIs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RSxDQUN2QyxDQUFDO0FBQ0osQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZG1pbkdldEFsbFVzZXJHbG9iYWxNZXRhZGF0YVJlcXVlc3QsXG4gIEFkbWluR2V0SG90RmVlZEFsZ29yaXRobVJlc3BvbnNlLFxuICBBZG1pbkdldEhvdEZlZWRVc2VyTXVsdGlwbGllclJlcXVlc3QsXG4gIEFkbWluR2V0SG90RmVlZFVzZXJNdWx0aXBsaWVyUmVzcG9uc2UsXG4gIEFkbWluR2V0TWVtcG9vbFN0YXRzUmVzcG9uc2UsXG4gIEFkbWluR2V0TkZURHJvcFJlcXVlc3QsXG4gIEFkbWluR2V0TkZURHJvcFJlc3BvbnNlLFxuICBBZG1pbkdldFVzZXJBZG1pbkRhdGFSZXF1ZXN0LFxuICBBZG1pbkdldFVzZXJBZG1pbkRhdGFSZXNwb25zZSxcbiAgQWRtaW5HZXRVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LFxuICBBZG1pbkdldFVzZXJHbG9iYWxNZXRhZGF0YVJlc3BvbnNlLFxuICBBZG1pbkdldFVzZXJuYW1lVmVyaWZpY2F0aW9uQXVkaXRMb2dzUmVxdWVzdCxcbiAgQWRtaW5HZXRVc2VybmFtZVZlcmlmaWNhdGlvbkF1ZGl0TG9nc1Jlc3BvbnNlLFxuICBBZG1pbkdldFZlcmlmaWVkVXNlcnNSZXNwb25zZSxcbiAgQWRtaW5HcmFudFZlcmlmaWNhdGlvbkJhZGdlUmVxdWVzdCxcbiAgQWRtaW5HcmFudFZlcmlmaWNhdGlvbkJhZGdlUmVzcG9uc2UsXG4gIEFkbWluUGluUG9zdFJlcXVlc3QsXG4gIEFkbWluUmVtb3ZlTmlsUG9zdHNSZXF1ZXN0LFxuICBBZG1pblJlbW92ZVZlcmlmaWNhdGlvbkJhZGdlUmVxdWVzdCxcbiAgQWRtaW5SZW1vdmVWZXJpZmljYXRpb25CYWRnZVJlc3BvbnNlLFxuICBBZG1pblVwZGF0ZUdsb2JhbEZlZWRSZXF1ZXN0LFxuICBBZG1pblVwZGF0ZUhvdEZlZWRBbGdvcml0aG1SZXF1ZXN0LFxuICBBZG1pblVwZGF0ZUhvdEZlZWRQb3N0TXVsdGlwbGllclJlcXVlc3QsXG4gIEFkbWluVXBkYXRlSG90RmVlZFVzZXJNdWx0aXBsaWVyUmVxdWVzdCxcbiAgQWRtaW5VcGRhdGVORlREcm9wUmVxdWVzdCxcbiAgQWRtaW5VcGRhdGVORlREcm9wUmVzcG9uc2UsXG4gIEFkbWluVXBkYXRlVXNlckdsb2JhbE1ldGFkYXRhUmVxdWVzdCxcbiAgQmxvY2tQdWJsaWNLZXlSZXF1ZXN0LFxuICBCbG9ja1B1YmxpY0tleVJlc3BvbnNlLFxuICBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIERlbGV0ZVBJSVJlcXVlc3QsXG4gIEdldEJ1eURlU29GZWVCYXNpc1BvaW50c1Jlc3BvbnNlLFxuICBHZXRHbG9iYWxQYXJhbXNSZXNwb25zZSxcbiAgR2V0VVNEQ2VudHNUb0RlU29FeGNoYW5nZVJhdGVSZXNwb25zZSxcbiAgR2V0VXNlckdsb2JhbE1ldGFkYXRhUmVxdWVzdCxcbiAgR2V0VXNlckdsb2JhbE1ldGFkYXRhUmVzcG9uc2UsXG4gIEdldFd5cmVXYWxsZXRPcmRlckZvclB1YmxpY0tleVJlcXVlc3QsXG4gIEdldFd5cmVXYWxsZXRPcmRlckZvclB1YmxpY0tleVJlc3BvbnNlLFxuICBIb3RGZWVkUGFnZVJlcXVlc3QsXG4gIEhvdEZlZWRQYWdlUmVzcG9uc2UsXG4gIE5vZGVDb250cm9sUmVxdWVzdCxcbiAgTm9kZUNvbnRyb2xSZXNwb25zZSxcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFJlc2VuZFZlcmlmeUVtYWlsUmVxdWVzdCxcbiAgU2V0QnV5RGVTb0ZlZUJhc2lzUG9pbnRzUmVxdWVzdCxcbiAgU2V0QnV5RGVTb0ZlZUJhc2lzUG9pbnRzUmVzcG9uc2UsXG4gIFNldE5vdGlmaWNhdGlvbk1ldGFkYXRhUmVxdWVzdCxcbiAgU2V0VVNEQ2VudHNUb0RlU29FeGNoYW5nZVJhdGVSZXF1ZXN0LFxuICBTZXRVU0RDZW50c1RvRGVTb0V4Y2hhbmdlUmF0ZVJlc3BvbnNlLFxuICBTd2FwSWRlbnRpdHlSZXF1ZXN0LFxuICBTd2FwSWRlbnRpdHlSZXNwb25zZSxcbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YSxcbiAgVXBkYXRlR2xvYmFsUGFyYW1zUmVxdWVzdCxcbiAgVXBkYXRlR2xvYmFsUGFyYW1zUmVzcG9uc2UsXG4gIFVwZGF0ZVVzZXJHbG9iYWxNZXRhZGF0YVJlcXVlc3QsXG4gIFVwbG9hZEltYWdlUmVxdWVzdCxcbiAgVXBsb2FkSW1hZ2VSZXNwb25zZSxcbiAgVXBsb2FkVmlkZW9SZXF1ZXN0LFxuICBVcGxvYWRWaWRlb1YyUmVzcG9uc2UsXG4gIFZlcmlmeUVtYWlsUmVxdWVzdCxcbiAgV2FsbGV0T3JkZXJRdW90YXRpb25SZXF1ZXN0LFxuICBXYWxsZXRPcmRlclJlc2VydmF0aW9uUmVxdWVzdCxcbiAgV3lyZVdhbGxldE9yZGVyUXVvdGF0aW9uUGF5bG9hZCxcbiAgV3lyZVdhbGxldE9yZGVyUmVzZXJ2YXRpb25QYXlsb2FkLFxufSBmcm9tICcuL2JhY2tlbmQtdHlwZXMnO1xuaW1wb3J0IHsgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkcywgYXBpLCBjbGVhblVSTCwgbWVkaWEgfSBmcm9tICcuL2RhdGEnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb25FeHRyYURhdGFLVixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YVVwZGF0ZUdsb2JhbFBhcmFtcyxcbiAgZW5jb2RlVVRGOFRvQnl0ZXMsXG4gIGlkZW50aXR5LFxuICB1dmFyaW50NjRUb0J1Zixcbn0gZnJvbSAnLi9pZGVudGl0eSc7XG5pbXBvcnQgeyBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeCwgaGFuZGxlU2lnbkFuZFN1Ym1pdCB9IGZyb20gJy4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeCB9IGZyb20gJy4vdHlwZXMnO1xuY29uc3Qgand0UG9zdCA9IGFzeW5jIChcbiAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgcGFyYW1zOiBhbnkgPSB7fSxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pID0+IHtcbiAgY29uc3QgaXNBZG1pblJlcXVlc3QgPSBlbmRwb2ludC5pbmNsdWRlcygnYXBpL3YwL2FkbWluJyk7XG4gIGxldCBBZG1pblB1YmxpY0tleSA9ICcnO1xuXG4gIGlmIChpc0FkbWluUmVxdWVzdCkge1xuICAgIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IGF3YWl0IGlkZW50aXR5LnNuYXBzaG90KCk7XG5cbiAgICBpZiAoIWN1cnJlbnRVc2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpc3N1ZSBhbiBhZG1pbiByZXF1ZXN0IHdpdGhvdXQgYSBsb2dnZWQgaW4gdXNlcicpO1xuICAgIH1cblxuICAgIEFkbWluUHVibGljS2V5ID0gY3VycmVudFVzZXIucHVibGljS2V5O1xuICB9XG5cbiAgY29uc3QgcG9zdFBhcmFtcyA9IHtcbiAgICAuLi5wYXJhbXMsXG4gICAgLi4uKGlzQWRtaW5SZXF1ZXN0ICYmIHsgQWRtaW5QdWJsaWNLZXkgfSksXG4gICAgSldUOiBwYXJhbXMuSldUID8/IChhd2FpdCBpZGVudGl0eS5qd3QoKSksXG4gIH07XG5cbiAgaWYgKG9wdGlvbnM/LmJyb2FkY2FzdCkge1xuICAgIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KGVuZHBvaW50LCBwb3N0UGFyYW1zLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBhcGkucG9zdChcbiAgICBvcHRpb25zPy5ub2RlVVJJID8gY2xlYW5VUkwob3B0aW9ucy5ub2RlVVJJLCBlbmRwb2ludCkgOiBlbmRwb2ludCxcbiAgICBwb3N0UGFyYW1zXG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvYXBpL3VzZXItZW5kcG9pbnRzI2dldC11c2VyLWdsb2JhbC1tZXRhZGF0YS1lbWFpbC1hbmQtcGhvbmUtbnVtYmVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRVc2VyR2xvYmFsTWV0YWRhdGEgPSBhc3luYyAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBHZXRVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LFxuICAgICdVc2VyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gID4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxHZXRVc2VyR2xvYmFsTWV0YWRhdGFSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2dldC11c2VyLWdsb2JhbC1tZXRhZGF0YScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvYXBpL3VzZXItZW5kcG9pbnRzI3VwZGF0ZS11c2VyLWdsb2JhbC1tZXRhZGF0YS1lbWFpbC1hbmQtc3RhdGUtb2YtbWVzc2FnZXMtcmVhZFxuICovXG5leHBvcnQgdHlwZSBVcGRhdGVVc2VyR2xvYmFsTWV0YWRhdGFQYXJhbXMgPSBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICBVcGRhdGVVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LFxuICAnVXNlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuPjtcbmV4cG9ydCBjb25zdCB1cGRhdGVVc2VyR2xvYmFsTWV0YWRhdGEgPSBhc3luYyAoXG4gIHBhcmFtczogVXBkYXRlVXNlckdsb2JhbE1ldGFkYXRhUGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbikgPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL3VwZGF0ZS11c2VyLWdsb2JhbC1tZXRhZGF0YScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvYXBpL3VzZXItZW5kcG9pbnRzI2RlbGV0ZS1waWktcGVyc29uYWwtaWRlbnRpZmlhYmxlLWluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBkZWxldGVQSUkgPSBhc3luYyAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxEZWxldGVQSUlSZXF1ZXN0LCAnUHVibGljS2V5QmFzZTU4Q2hlY2snPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHVuZGVmaW5lZD4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2RlbGV0ZS1waWknLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2FwaS91c2VyLWVuZHBvaW50cyNibG9jay1wdWJsaWMta2V5XG4gKi9cbmV4cG9ydCB0eXBlIEJsb2NrUHVibGljS2V5UGFyYW1zID0gUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgQmxvY2tQdWJsaWNLZXlSZXF1ZXN0LFxuICAnQmxvY2tQdWJsaWNLZXlCYXNlNThDaGVjaycgfCAnUHVibGljS2V5QmFzZTU4Q2hlY2snXG4+O1xuZXhwb3J0IGNvbnN0IGJsb2NrUHVibGljS2V5ID0gYXN5bmMgKFxuICBwYXJhbXM6IEJsb2NrUHVibGljS2V5UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QmxvY2tQdWJsaWNLZXlSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2Jsb2NrLXB1YmxpYy1rZXknLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2FwaS9ub3RpZmljYXRpb24tZW5kcG9pbnRzI3NldC1ub3RpZmljYXRpb24tbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE5vdGlmaWNhdGlvbk1ldGFkYXRhID0gYXN5bmMgKFxuICBwYXJhbXM6IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgU2V0Tm90aWZpY2F0aW9uTWV0YWRhdGFSZXF1ZXN0LFxuICAgIHwgJ1B1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ0xhc3RTZWVuSW5kZXgnXG4gICAgfCAnTGFzdFVucmVhZE5vdGlmaWNhdGlvbkluZGV4J1xuICAgIHwgJ1VucmVhZE5vdGlmaWNhdGlvbnMnXG4gID4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKSA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvc2V0LW5vdGlmaWNhdGlvbi1tZXRhZGF0YScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBBZG1pbiBlbmRwb2ludHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9hcGkvYWRtaW4tZW5kcG9pbnRzI2dldC12ZXJpZmllZC11c2Vyc1xuICovXG5leHBvcnQgY29uc3QgYWRtaW5HZXRWZXJpZmllZFVzZXJzID0gKFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HZXRWZXJpZmllZFVzZXJzUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9nZXQtdmVyaWZpZWQtdXNlcnMnLCB7fSwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvYXBpL2FkbWluLWVuZHBvaW50cyNnZXQtdXNlcm5hbWUtdmVyaWZpY2F0aW9uLWF1ZGl0LWxvZ3NcbiAqL1xuZXhwb3J0IGNvbnN0IGFkbWluR2V0VXNlcm5hbWVWZXJpZmljYXRpb25BdWRpdExvZyA9IChcbiAgcGFyYW1zOiBBZG1pbkdldFVzZXJuYW1lVmVyaWZpY2F0aW9uQXVkaXRMb2dzUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEFkbWluR2V0VXNlcm5hbWVWZXJpZmljYXRpb25BdWRpdExvZ3NSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdChcbiAgICAnYXBpL3YwL2FkbWluL2dldC11c2VybmFtZS12ZXJpZmljYXRpb24tYXVkaXQtbG9nJyxcbiAgICBwYXJhbXMsXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluTm9kZUNvbnRyb2wgPSAoXG4gIHBhcmFtczogUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBPbWl0PE5vZGVDb250cm9sUmVxdWVzdCwgJ0pXVCcgfCAnQWRtaW5QdWJsaWNLZXknPixcbiAgICAnQWRkcmVzcycgfCAnT3BlcmF0aW9uVHlwZSdcbiAgPixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPE5vZGVDb250cm9sUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9ub2RlLWNvbnRyb2wnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR3JhbnRWZXJpZmljYXRpb25CYWRnZSA9IChcbiAgcGFyYW1zOiBPbWl0PEFkbWluR3JhbnRWZXJpZmljYXRpb25CYWRnZVJlcXVlc3QsICdBZG1pblB1YmxpY0tleSc+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HcmFudFZlcmlmaWNhdGlvbkJhZGdlUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9ncmFudC12ZXJpZmljYXRpb24tYmFkZ2UnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluUmVtb3ZlVmVyaWZpY2F0aW9uQmFkZ2UgPSAoXG4gIHBhcmFtczogT21pdDxBZG1pblJlbW92ZVZlcmlmaWNhdGlvbkJhZGdlUmVxdWVzdCwgJ0FkbWluUHVibGljS2V5Jz4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBZG1pblJlbW92ZVZlcmlmaWNhdGlvbkJhZGdlUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9yZW1vdmUtdmVyaWZpY2F0aW9uLWJhZGdlJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pbkdldFVzZXJBZG1pbkRhdGEgPSAoXG4gIHBhcmFtczogQWRtaW5HZXRVc2VyQWRtaW5EYXRhUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEFkbWluR2V0VXNlckFkbWluRGF0YVJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vZ2V0LXVzZXItYWRtaW4tZGF0YScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRVc2VyR2xvYmFsTWV0YWRhdGEgPSAoXG4gIHBhcmFtczogQWRtaW5HZXRVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HZXRVc2VyR2xvYmFsTWV0YWRhdGFSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC11c2VyLWdsb2JhbC1tZXRhZGF0YScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5VcGRhdGVVc2VyR2xvYmFsTWV0YWRhdGEgPSAoXG4gIHBhcmFtczogT21pdDxBZG1pblVwZGF0ZVVzZXJHbG9iYWxNZXRhZGF0YVJlcXVlc3QsICdBZG1pblB1YmxpY0tleSc+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL3VwZGF0ZS11c2VyLWdsb2JhbC1tZXRhZGF0YScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRBbGxVc2VyR2xvYmFsTWV0YWRhdGEgPSAoXG4gIHBhcmFtczogQWRtaW5HZXRBbGxVc2VyR2xvYmFsTWV0YWRhdGFSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HZXRVc2VyR2xvYmFsTWV0YWRhdGFSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC1hbGwtdXNlci1nbG9iYWwtbWV0YWRhdGEnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluUGluUG9zdCA9IChcbiAgcGFyYW1zOiBBZG1pblBpblBvc3RSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL3Bpbi1wb3N0JywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pblVwZGF0ZUdsb2JhbEZlZWQgPSAoXG4gIHBhcmFtczogQWRtaW5VcGRhdGVHbG9iYWxGZWVkUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi91cGRhdGUtZ2xvYmFsLWZlZWQnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluUmVtb3ZlTmlsUG9zdHMgPSAoXG4gIHBhcmFtczogQWRtaW5SZW1vdmVOaWxQb3N0c1JlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vcmVtb3ZlLW5pbC1wb3N0cycsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5SZXByb2Nlc3NCaXRjb2luQmxvY2sgPSAoXG4gIGJsb2NrSGFzaE9yQmxvY2tIZWlnaHQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoXG4gICAgYGFwaS92MC9hZG1pbi9yZXByb2Nlc3MtYml0Y29pbi1ibG9jay8ke2Jsb2NrSGFzaE9yQmxvY2tIZWlnaHR9YCxcbiAgICB7fSxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRNZW1wb29sU3RhdHMgPSAoXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBZG1pbkdldE1lbXBvb2xTdGF0c1Jlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vZ2V0LW1lbXBvb2wtc3RhdHMnLCB7fSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5Td2FwSWRlbnRpdHkgPSBhc3luYyAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxTd2FwSWRlbnRpdHlSZXF1ZXN0PixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8U3dhcElkZW50aXR5UmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vc3dhcC1pZGVudGl0eScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5TZXRVU0RDZW50c1RvREVTT1Jlc2VydmVFeGNoYW5nZVJhdGUgPSAoXG4gIHBhcmFtczogT21pdDxTZXRVU0RDZW50c1RvRGVTb0V4Y2hhbmdlUmF0ZVJlcXVlc3QsICdBZG1pblB1YmxpY0tleSc+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8U2V0VVNEQ2VudHNUb0RlU29FeGNoYW5nZVJhdGVSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdChcbiAgICAnYXBpL3YwL2FkbWluL3NldC11c2QtY2VudHMtdG8tZGVzby1yZXNlcnZlLWV4Y2hhbmdlLXJhdGUnLFxuICAgIHBhcmFtcyxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG4vLyBOb3QgYSBqd3QgcmVxdWVzdCwgYnV0IGl0J3MgYW4gYWRtaW4gZW5kcG9pbnQgc28gaXQncyBoZXJlLi4uXG5leHBvcnQgY29uc3QgYWRtaW5HZXRVU0RDZW50c1RvREVTT1Jlc2VydmVFeGNoYW5nZVJhdGUgPSAoXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxHZXRVU0RDZW50c1RvRGVTb0V4Y2hhbmdlUmF0ZVJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IGVuZHBvaW50ID0gJ2FwaS92MC9hZG1pbi9nZXQtdXNkLWNlbnRzLXRvLWRlc28tcmVzZXJ2ZS1leGNoYW5nZS1yYXRlJztcbiAgcmV0dXJuIGFwaS5nZXQoXG4gICAgb3B0aW9ucz8ubm9kZVVSSSA/IGNsZWFuVVJMKG9wdGlvbnMubm9kZVVSSSwgZW5kcG9pbnQpIDogZW5kcG9pbnRcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pblNldEJ1eURlc29GZWVCYXNpc1BvaW50cyA9IChcbiAgcGFyYW1zOiBPbWl0PFNldEJ1eURlU29GZWVCYXNpc1BvaW50c1JlcXVlc3QsICdBZG1pblB1YmxpY0tleSc+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8U2V0QnV5RGVTb0ZlZUJhc2lzUG9pbnRzUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGp3dFBvc3QoJ2FwaS92MC9hZG1pbi9zZXQtYnV5LWRlc28tZmVlLWJhc2lzLXBvaW50cycsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRCdXlEZXNvRmVlQmFzaXNQb2ludHMgPSAoXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxHZXRCdXlEZVNvRmVlQmFzaXNQb2ludHNSZXNwb25zZT4gPT4ge1xuICBjb25zdCBlbmRwb2ludCA9ICdhcGkvdjAvYWRtaW4vZ2V0LWJ1eS1kZXNvLWZlZS1iYXNpcy1wb2ludHMnO1xuICByZXR1cm4gYXBpLmdldChcbiAgICBvcHRpb25zPy5ub2RlVVJJID8gY2xlYW5VUkwob3B0aW9ucy5ub2RlVVJJLCBlbmRwb2ludCkgOiBlbmRwb2ludFxuICApO1xufTtcblxuZXhwb3J0IHR5cGUgQWRtaW5VcGRhdGVHbG9iYWxQYXJhbXNSZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgVXBkYXRlR2xvYmFsUGFyYW1zUmVxdWVzdCxcbiAgICAgIHwgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ1VTRENlbnRzUGVyQml0Y29pbidcbiAgICAgIHwgJ0NyZWF0ZVByb2ZpbGVGZWVOYW5vcydcbiAgICAgIHwgJ01heENvcGllc1Blck5GVCdcbiAgICAgIHwgJ0NyZWF0ZU5GVEZlZU5hbm9zJ1xuICAgICAgfCAnTWluaW11bU5ldHdvcmtGZWVOYW5vc1BlcktCJ1xuICAgID5cbiAgPjtcblxuZXhwb3J0IGNvbnN0IGFkbWluVXBkYXRlR2xvYmFsUGFyYW1zID0gYXN5bmMgKFxuICBwYXJhbXM6IEFkbWluVXBkYXRlR2xvYmFsUGFyYW1zUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8VXBkYXRlR2xvYmFsUGFyYW1zUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvYWRtaW4vdXBkYXRlLWdsb2JhbC1wYXJhbXMnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RBZG1pblVwZGF0ZUdsb2JhbFBhcmFtc1RyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RBZG1pblVwZGF0ZUdsb2JhbFBhcmFtc1RyYW5zYWN0aW9uID0gYXN5bmMgKFxuICBwYXJhbXM6IEFkbWluVXBkYXRlR2xvYmFsUGFyYW1zUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YVVwZGF0ZUdsb2JhbFBhcmFtcygpO1xuICBjb25zdCBjb25zZW5zdXNFeHRyYURhdGFLVnM6IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1ZbXSA9IFtdO1xuICBpZiAocGFyYW1zLlVTRENlbnRzUGVyQml0Y29pbiA+PSAwKSB7XG4gICAgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzLnB1c2goXG4gICAgICBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGFLVihcbiAgICAgICAgZW5jb2RlVVRGOFRvQnl0ZXMoJ1VTRENlbnRzUGVyQml0Y29pbicpLFxuICAgICAgICB1dmFyaW50NjRUb0J1ZihwYXJhbXMuVVNEQ2VudHNQZXJCaXRjb2luKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgaWYgKHBhcmFtcy5NaW5pbXVtTmV0d29ya0ZlZU5hbm9zUGVyS0IgPj0gMCkge1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoXG4gICAgICAgIGVuY29kZVVURjhUb0J5dGVzKCdNaW5OZXR3b3JrRmVlTmFub3NQZXJLQicpLFxuICAgICAgICB1dmFyaW50NjRUb0J1ZihwYXJhbXMuTWluaW11bU5ldHdvcmtGZWVOYW5vc1BlcktCKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgaWYgKHBhcmFtcy5DcmVhdGVQcm9maWxlRmVlTmFub3MgPj0gMCkge1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoXG4gICAgICAgIGVuY29kZVVURjhUb0J5dGVzKCdDcmVhdGVQcm9maWxlRmVlTmFub3MnKSxcbiAgICAgICAgdXZhcmludDY0VG9CdWYocGFyYW1zLkNyZWF0ZVByb2ZpbGVGZWVOYW5vcylcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGlmIChwYXJhbXMuQ3JlYXRlTkZURmVlTmFub3MgPj0gMCkge1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoXG4gICAgICAgIGVuY29kZVVURjhUb0J5dGVzKCdDcmVhdGVORlRGZWVOYW5vcycpLFxuICAgICAgICB1dmFyaW50NjRUb0J1ZihwYXJhbXMuQ3JlYXRlTkZURmVlTmFub3MpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBpZiAocGFyYW1zLk1heENvcGllc1Blck5GVCA+PSAwKSB7XG4gICAgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzLnB1c2goXG4gICAgICBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGFLVihcbiAgICAgICAgZW5jb2RlVVRGOFRvQnl0ZXMoJ01heENvcGllc1Blck5GVCcpLFxuICAgICAgICB1dmFyaW50NjRUb0J1ZihwYXJhbXMuTWF4Q29waWVzUGVyTkZUKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssIG1ldGFkYXRhLCB7XG4gICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIENvbnNlbnN1c0V4dHJhRGF0YUtWczogY29uc2Vuc3VzRXh0cmFEYXRhS1ZzLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pbkdldEdsb2JhbFBhcmFtcyA9IChcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPEdldEdsb2JhbFBhcmFtc1Jlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vZ2V0LWdsb2JhbC1wYXJhbXMnLCB7fSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRORlREcm9wID0gKFxuICBwYXJhbXM6IEFkbWluR2V0TkZURHJvcFJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBZG1pbkdldE5GVERyb3BSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC1uZnQtZHJvcCcsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5VcGRhdGVORlREcm9wID0gKFxuICBwYXJhbXM6IEFkbWluVXBkYXRlTkZURHJvcFJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBZG1pblVwZGF0ZU5GVERyb3BSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnL2FwaS92MC9hZG1pbi91cGRhdGUtbmZ0LWRyb3AnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0VW5maWx0ZXJlZEhvdEZlZWQgPSAoXG4gIHBhcmFtczogUGFydGlhbDxIb3RGZWVkUGFnZVJlcXVlc3Q+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8SG90RmVlZFBhZ2VSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC11bmZpbHRlcmVkLWhvdC1mZWVkJywgcGFyYW1zLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZG1pbkdldEhvdEZlZWRBbGdvcml0aG0gPSAoXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxBZG1pbkdldEhvdEZlZWRBbGdvcml0aG1SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC1ob3QtZmVlZC1hbGdvcml0aG0nLCB7fSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5VcGRhdGVIb3RGZWVkQWxnb3JpdGhtID0gKFxuICBwYXJhbXM6IEFkbWluVXBkYXRlSG90RmVlZEFsZ29yaXRobVJlcXVlc3QsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHJldHVybiBqd3RQb3N0KCdhcGkvdjAvYWRtaW4vdXBkYXRlLWhvdC1mZWVkLWFsZ29yaXRobScsIHBhcmFtcywgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5VcGRhdGVIb3RGZWVkVXNlck11bHRpcGxpZXIgPSAoXG4gIHBhcmFtczogQWRtaW5VcGRhdGVIb3RGZWVkVXNlck11bHRpcGxpZXJSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gand0UG9zdChcbiAgICAnYXBpL3YwL2FkbWluL3VwZGF0ZS1ob3QtZmVlZC11c2VyLW11bHRpcGxpZXInLFxuICAgIHBhcmFtcyxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5VcGRhdGVIb3RGZWVkUG9zdE11bHRpcGxpZXIgPSAoXG4gIHBhcmFtczogQWRtaW5VcGRhdGVIb3RGZWVkUG9zdE11bHRpcGxpZXJSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gand0UG9zdChcbiAgICAnYXBpL3YwL2FkbWluL3VwZGF0ZS1ob3QtZmVlZC1wb3N0LW11bHRpcGxpZXInLFxuICAgIHBhcmFtcyxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRIb3RGZWVkVXNlck11bHRpcGxpZXIgPSAoXG4gIHBhcmFtczogQWRtaW5HZXRIb3RGZWVkVXNlck11bHRpcGxpZXJSZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8QWRtaW5HZXRIb3RGZWVkVXNlck11bHRpcGxpZXJSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL2FkbWluL2dldC1ob3QtZmVlZC11c2VyLW11bHRpcGxpZXInLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkbWluR2V0V3lyZVdhbGxldE9yZGVyc0ZvclVzZXIgPSAoXG4gIHBhcmFtczpcbiAgICB8IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICAgIE9taXQ8R2V0V3lyZVdhbGxldE9yZGVyRm9yUHVibGljS2V5UmVxdWVzdCwgJ0FkbWluUHVibGljS2V5Jz4sXG4gICAgICAgICdQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgID5cbiAgICB8IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICAgIE9taXQ8R2V0V3lyZVdhbGxldE9yZGVyRm9yUHVibGljS2V5UmVxdWVzdCwgJ0FkbWluUHVibGljS2V5Jz4sXG4gICAgICAgICdVc2VybmFtZSdcbiAgICAgID4sXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxHZXRXeXJlV2FsbGV0T3JkZXJGb3JQdWJsaWNLZXlSZXNwb25zZT4gPT4ge1xuICByZXR1cm4gand0UG9zdChcbiAgICAnYXBpL3YwL2FkbWluL2dldC13eXJlLXdhbGxldC1vcmRlcnMtZm9yLXB1YmxpYy1rZXknLFxuICAgIHBhcmFtcyxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRXeXJlV2FsbGV0T3JkZXJRdW90YXRpb24gPSAoXG4gIHBhcmFtczogV2FsbGV0T3JkZXJRdW90YXRpb25SZXF1ZXN0LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8V3lyZVdhbGxldE9yZGVyUXVvdGF0aW9uUGF5bG9hZD4gPT4ge1xuICByZXR1cm4gand0UG9zdChcbiAgICAnYXBpL3YwL2FkbWluL2dldC13eXJlLXdhbGxldC1vcmRlci1xdW90YXRpb24nLFxuICAgIHBhcmFtcyxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRtaW5HZXRXeXJlV2FsbGV0T3JkZXJSZXNlcnZhdGlvbiA9IChcbiAgcGFyYW1zOiBXYWxsZXRPcmRlclJlc2VydmF0aW9uUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFd5cmVXYWxsZXRPcmRlclJlc2VydmF0aW9uUGF5bG9hZD4gPT4ge1xuICByZXR1cm4gand0UG9zdChcbiAgICAnYXBpL3YwL2FkbWluL2dldC13eXJlLXdhbGxldC1vcmRlci1yZXNlcnZhdGlvbicsXG4gICAgcGFyYW1zLFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNlbmRWZXJpZnlFbWFpbCA9IChcbiAgcGFyYW1zOiBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFJlc2VuZFZlcmlmeUVtYWlsUmVxdWVzdCwgJ1B1YmxpY0tleSc+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICByZXR1cm4gand0UG9zdCgnYXBpL3YwL3Jlc2VuZC12ZXJpZnktZW1haWwnLCBwYXJhbXMsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHZlcmlmeUVtYWlsID0gKFxuICBwYXJhbXM6IFZlcmlmeUVtYWlsUmVxdWVzdCxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgZW5kcG9pbnQgPSAnYXBpL3YwL3ZlcmlmeS1lbWFpbCc7XG4gIHJldHVybiBhcGkucG9zdChcbiAgICBvcHRpb25zPy5ub2RlVVJJID8gY2xlYW5VUkwob3B0aW9ucy5ub2RlVVJJLCBlbmRwb2ludCkgOiBlbmRwb2ludCxcbiAgICBwYXJhbXNcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGxvYWRJbWFnZSA9IGFzeW5jIChcbiAgcGFyYW1zOiBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIFVwbG9hZEltYWdlUmVxdWVzdCxcbiAgICAnZmlsZScgfCAnVXNlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICA+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8VXBsb2FkSW1hZ2VSZXNwb25zZT4gPT4ge1xuICBjb25zdCBKV1QgPSBwYXJhbXMuSldUID8/IChhd2FpdCBpZGVudGl0eS5qd3QoKSk7XG4gIGNvbnN0IGVuZHBvaW50ID0gJ2FwaS92MC91cGxvYWQtaW1hZ2UnO1xuXG4gIHJldHVybiBhcGkucG9zdChcbiAgICBvcHRpb25zPy5ub2RlVVJJID8gY2xlYW5VUkwob3B0aW9ucy5ub2RlVVJJLCBlbmRwb2ludCkgOiBlbmRwb2ludCxcbiAgICB7IEpXVCwgLi4ucGFyYW1zIH0sXG4gICAgeyBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGxvYWRWaWRlbyA9IGFzeW5jIChcbiAgcGFyYW1zOiBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIFVwbG9hZFZpZGVvUmVxdWVzdCxcbiAgICAnVXNlclB1YmxpY0tleUJhc2U1OENoZWNrJyB8ICdmaWxlJ1xuICA+XG4pOiBQcm9taXNlPFVwbG9hZFZpZGVvVjJSZXNwb25zZT4gPT4ge1xuICBjb25zdCBKV1QgPSBwYXJhbXMuSldUID8/IChhd2FpdCBpZGVudGl0eS5qd3QoKSk7XG4gIGNvbnN0IGVuZHBvaW50ID0gJ2FwaS92MC91cGxvYWQtdmlkZW8nO1xuICByZXR1cm4gbWVkaWEucG9zdChcbiAgICBlbmRwb2ludCxcbiAgICB7IEpXVCwgLi4ucGFyYW1zIH0sXG4gICAgeyBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgKTtcbn07XG4iXX0=
import { AddAccessGroupMembersRequest, AddAccessGroupMembersResponse, ConstructedTransactionResponse, CreateAccessGroupRequest, CreateAccessGroupResponse, RequestOptions, TxRequestWithOptionalFeesAndExtraData } from '../backend-types';
import { PartialWithRequiredFields } from '../data';
import { ConstructedAndSubmittedTx } from '../types';
import { ConstructedAndSubmittedTx, TxRequestOptions } from '../types';
export declare const constructCreateAccessGroupTransaction: (params: CreateAccessGroupRequestParams) => Promise<ConstructedTransactionResponse>;
/**

@@ -8,4 +9,3 @@ * https://docs.deso.org/deso-backend/construct-transactions/access-groups-api#create-access-group

export type CreateAccessGroupRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<CreateAccessGroupRequest, 'AccessGroupOwnerPublicKeyBase58Check' | 'AccessGroupKeyName' | 'AccessGroupPublicKeyBase58Check'>>;
export declare const createAccessGroup: (params: CreateAccessGroupRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<CreateAccessGroupResponse>>;
export declare const constructCreateAccessGroupTransaction: (params: CreateAccessGroupRequestParams) => Promise<ConstructedTransactionResponse>;
export declare const createAccessGroup: (params: CreateAccessGroupRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<CreateAccessGroupResponse>>;
/**

@@ -20,3 +20,3 @@ * https://docs.deso.org/deso-backend/construct-transactions/access-groups-api#update-access-group

*/
export declare const addAccessGroupMembers: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AddAccessGroupMembersResponse>>;
export declare const addAccessGroupMembers: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AddAccessGroupMembersResponse>>;
export declare const constructAddAccessGroupMembersTransaction: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>) => Promise<ConstructedTransactionResponse>;

@@ -26,3 +26,3 @@ /**

*/
export declare const removeAccessGroupMembers: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AddAccessGroupMembersResponse>>;
export declare const removeAccessGroupMembers: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AddAccessGroupMembersResponse>>;
export declare const constructRemoveAccessGroupMembersTransaction: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>) => Promise<ConstructedTransactionResponse>;

@@ -32,3 +32,3 @@ /**

*/
export declare const updateAccessGroupMembers: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AddAccessGroupMembersResponse>>;
export declare const updateAccessGroupMembers: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AddAccessGroupMembersResponse>>;
export declare const constructUpdateAccessGroupMembersTransaction: (params: TxRequestWithOptionalFeesAndExtraData<AddAccessGroupMembersRequest>) => Promise<ConstructedTransactionResponse>;

@@ -1,7 +0,14 @@

import { AccessGroupMemberRecord, bs58PublicKeyToCompressedBytes, encodeUTF8ToBytes, TransactionExtraData, TransactionMetadataAccessGroup, TransactionMetadataAccessGroupMembers, } from '../identity';
import { constructBalanceModelTx, convertExtraData, handleSignAndSubmit, } from '../internal';
export const createAccessGroup = (params, options) => {
return handleSignAndSubmit('api/v0/create-access-group', params, Object.assign(Object.assign({}, options), { constructionFunction: constructCreateAccessGroupTransaction }));
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
export const constructCreateAccessGroupTransaction = (params) => {
import { AccessGroupMemberRecord, TransactionExtraData, TransactionMetadataAccessGroup, TransactionMetadataAccessGroupMembers, bs58PublicKeyToCompressedBytes, encodeUTF8ToBytes, } from '../identity';
import { guardTxPermission } from '../identity/permissions-utils';
import { constructBalanceModelTx, convertExtraData, getTxWithFeeNanos, handleSignAndSubmit, sumTransactionFees, } from '../internal';
const buildAccessGroupMetadata = (params) => {
const metadata = new TransactionMetadataAccessGroup();

@@ -12,3 +19,6 @@ metadata.accessGroupPublicKey = bs58PublicKeyToCompressedBytes(params.AccessGroupPublicKeyBase58Check);

metadata.accessGroupKeyName = encodeUTF8ToBytes(params.AccessGroupKeyName);
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructCreateAccessGroupTransaction = (params) => {
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, buildAccessGroupMetadata(params), {
ExtraData: params.ExtraData,

@@ -19,2 +29,38 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
export const createAccessGroup = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
const txWithFee = getTxWithFeeNanos(params.AccessGroupOwnerPublicKeyBase58Check, buildAccessGroupMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
// NOTE: This is more permissive than we actually need it to be, but I
// couldn't get it to work when specifying the AccessGroupKeyName and
// AccessGroupOwnerPublicKeyBase58Check. If anyone complains, we can
// revisit it, but this is not a terribly sensitive permission to grant.
AccessGroupLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_a = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _a !== void 0 ? _a : 1,
},
],
AccessGroupMemberLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_b = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _b !== void 0 ? _b : 1,
},
],
});
}
return handleSignAndSubmit('api/v0/create-access-group', params, Object.assign(Object.assign({}, options), { constructionFunction: constructCreateAccessGroupTransaction }));
});
export const updateAccessGroup = (params, options) => {

@@ -38,6 +84,39 @@ return handleSignAndSubmit('api/v0/update-access-group', params, Object.assign(Object.assign({}, options), { constructionFunction: constructUpdateAccessGroupTransaction }));

*/
export const addAccessGroupMembers = (params, options) => {
export const addAccessGroupMembers = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _c, _d;
const txWithFee = getTxWithFeeNanos(params.AccessGroupOwnerPublicKeyBase58Check, buildAddAccessGroupMemberMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
// NOTE: This is more permissive than we actually need it to be, but I
// couldn't get it to work when specifying the AccessGroupKeyName and
// AccessGroupOwnerPublicKeyBase58Check. If anyone complains, we can
// revisit it, but this is not a terribly sensitive permission to grant.
AccessGroupLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_c = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _c !== void 0 ? _c : 1,
},
],
AccessGroupMemberLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_d = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _d !== void 0 ? _d : 1,
},
],
});
}
return handleSignAndSubmit('api/v0/add-access-group-members', params, Object.assign(Object.assign({}, options), { constructionFunction: constructAddAccessGroupMembersTransaction }));
};
export const constructAddAccessGroupMembersTransaction = (params) => {
});
const buildAddAccessGroupMemberMetadata = (params) => {
const metadata = new TransactionMetadataAccessGroupMembers();

@@ -56,3 +135,6 @@ metadata.accessGroupOwnerPublicKey = bs58PublicKeyToCompressedBytes(params.AccessGroupOwnerPublicKeyBase58Check);

});
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructAddAccessGroupMembersTransaction = (params) => {
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, buildAddAccessGroupMemberMetadata(params), {
ExtraData: params.ExtraData,

@@ -66,6 +148,39 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

*/
export const removeAccessGroupMembers = (params, options) => {
export const removeAccessGroupMembers = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _e, _f;
const txWithFee = getTxWithFeeNanos(params.AccessGroupOwnerPublicKeyBase58Check, buildRemoveAccessGroupMemberMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
// NOTE: This is more permissive than we actually need it to be, but I
// couldn't get it to work when specifying the AccessGroupKeyName and
// AccessGroupOwnerPublicKeyBase58Check. If anyone complains, we can
// revisit it, but this is not a terribly sensitive permission to grant.
AccessGroupLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_e = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _e !== void 0 ? _e : 1,
},
],
AccessGroupMemberLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_f = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _f !== void 0 ? _f : 1,
},
],
});
}
return handleSignAndSubmit('api/v0/remove-access-group-members', params, Object.assign(Object.assign({}, options), { constructionFunction: constructRemoveAccessGroupMembersTransaction }));
};
export const constructRemoveAccessGroupMembersTransaction = (params) => {
});
const buildRemoveAccessGroupMemberMetadata = (params) => {
const metadata = new TransactionMetadataAccessGroupMembers();

@@ -84,3 +199,6 @@ metadata.accessGroupOwnerPublicKey = bs58PublicKeyToCompressedBytes(params.AccessGroupOwnerPublicKeyBase58Check);

});
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructRemoveAccessGroupMembersTransaction = (params) => {
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, buildRemoveAccessGroupMemberMetadata(params), {
ExtraData: params.ExtraData,

@@ -94,6 +212,39 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

*/
export const updateAccessGroupMembers = (params, options) => {
export const updateAccessGroupMembers = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _g, _h;
const txWithFee = getTxWithFeeNanos(params.AccessGroupOwnerPublicKeyBase58Check, buildUpdateAccessGroupMembersMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
// NOTE: This is more permissive than we actually need it to be, but I
// couldn't get it to work when specifying the AccessGroupKeyName and
// AccessGroupOwnerPublicKeyBase58Check. If anyone complains, we can
// revisit it, but this is not a terribly sensitive permission to grant.
AccessGroupLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_g = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _g !== void 0 ? _g : 1,
},
],
AccessGroupMemberLimitMap: [
{
AccessGroupOwnerPublicKeyBase58Check: '',
ScopeType: 'Any',
AccessGroupKeyName: '',
OperationType: 'Any',
OpCount: (_h = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _h !== void 0 ? _h : 1,
},
],
});
}
return handleSignAndSubmit('api/v0/update-access-group-members', params, Object.assign(Object.assign({}, options), { constructionFunction: constructUpdateAccessGroupMembersTransaction }));
};
export const constructUpdateAccessGroupMembersTransaction = (params) => {
});
const buildUpdateAccessGroupMembersMetadata = (params) => {
const metadata = new TransactionMetadataAccessGroupMembers();

@@ -112,3 +263,6 @@ metadata.accessGroupOwnerPublicKey = bs58PublicKeyToCompressedBytes(params.AccessGroupOwnerPublicKeyBase58Check);

});
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructUpdateAccessGroupMembersTransaction = (params) => {
return constructBalanceModelTx(params.AccessGroupOwnerPublicKeyBase58Check, buildUpdateAccessGroupMembersMetadata(params), {
ExtraData: params.ExtraData,

@@ -119,2 +273,2 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWdyb3Vwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbnMvYWNjZXNzLWdyb3Vwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5QixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLDhCQUE4QixFQUM5QixxQ0FBcUMsR0FDdEMsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBY3JCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLE1BQXNDLEVBQ3RDLE9BQXdCLEVBQ3VDLEVBQUU7SUFDakUsT0FBTyxtQkFBbUIsQ0FBQyw0QkFBNEIsRUFBRSxNQUFNLGtDQUMxRCxPQUFPLEtBQ1Ysb0JBQW9CLEVBQUUscUNBQXFDLElBQzNELENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxDQUNuRCxNQUFzQyxFQUNHLEVBQUU7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO0lBQ3RELFFBQVEsQ0FBQyxvQkFBb0IsR0FBRyw4QkFBOEIsQ0FDNUQsTUFBTSxDQUFDLCtCQUErQixDQUN2QyxDQUFDO0lBQ0YsUUFBUSxDQUFDLHlCQUF5QixHQUFHLDhCQUE4QixDQUNqRSxNQUFNLENBQUMsb0NBQW9DLENBQzVDLENBQUM7SUFDRixRQUFRLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzRSxPQUFPLHVCQUF1QixDQUM1QixNQUFNLENBQUMsb0NBQW9DLEVBQzNDLFFBQVEsRUFDUjtRQUNFLFNBQVMsRUFBRSxNQUFNLENB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aUJBQWlCLENBQy9ELE1BQU0sQ0FBQyx3QkFBd0IsQ0FDaEMsQ0FBQztRQUNGLG9CQUFvQixDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FDbkQsTUFBTSxDQUFDLFlBQVksQ0FDcEIsQ0FBQztRQUNGLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDLENBQ0YsQ0FBQztJQUNGLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQyxvQ0FBb0MsRUFDM0MsUUFBUSxFQUNSO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1JlcXVlc3QsXG4gIEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1Jlc3BvbnNlLFxuICBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIENyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdCxcbiAgQ3JlYXRlQWNjZXNzR3JvdXBSZXNwb25zZSxcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEsXG59IGZyb20gJy4uL2JhY2tlbmQtdHlwZXMnO1xuaW1wb3J0IHsgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkcyB9IGZyb20gJy4uL2RhdGEnO1xuaW1wb3J0IHtcbiAgQWNjZXNzR3JvdXBNZW1iZXJSZWNvcmQsXG4gIGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyxcbiAgZW5jb2RlVVRGOFRvQnl0ZXMsXG4gIFRyYW5zYWN0aW9uRXh0cmFEYXRhLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXNzR3JvdXAsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFBY2Nlc3NHcm91cE1lbWJlcnMsXG59IGZyb20gJy4uL2lkZW50aXR5JztcbmltcG9ydCB7XG4gIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4LFxuICBjb252ZXJ0RXh0cmFEYXRhLFxuICBoYW5kbGVTaWduQW5kU3VibWl0LFxufSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4IH0gZnJvbSAnLi4vdHlwZXMnO1xuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvYWNjZXNzLWdyb3Vwcy1hcGkjY3JlYXRlLWFjY2Vzcy1ncm91cFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVBY2Nlc3NHcm91cFJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBDcmVhdGVBY2Nlc3NHcm91cFJlcXVlc3QsXG4gICAgICB8ICdBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdBY2Nlc3NHcm91cEtleU5hbWUnXG4gICAgICB8ICdBY2Nlc3NHcm91cFB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgID5cbiAgPjtcbmV4cG9ydCBjb25zdCBjcmVhdGVBY2Nlc3NHcm91cCA9IChcbiAgcGFyYW1zOiBDcmVhdGVBY2Nlc3NHcm91cFJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PENyZWF0ZUFjY2Vzc0dyb3VwUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvY3JlYXRlLWFjY2Vzcy1ncm91cCcsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdENyZWF0ZUFjY2Vzc0dyb3VwVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdENyZWF0ZUFjY2Vzc0dyb3VwVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogQ3JlYXRlQWNjZXNzR3JvdXBSZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXNzR3JvdXAoKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBPd25lclB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwT3BlcmF0aW9uVHlwZSA9IDI7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwS2V5TmFtZSA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5BY2Nlc3NHcm91cEtleU5hbWUpO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBtZXRhZGF0YSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2FjY2Vzcy1ncm91cHMtYXBpI3VwZGF0ZS1hY2Nlc3MtZ3JvdXBcbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlQWNjZXNzR3JvdXBSZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgQ3JlYXRlQWNjZXNzR3JvdXBSZXF1ZXN0LFxuICAgICAgfCAnQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQWNjZXNzR3JvdXBLZXlOYW1lJ1xuICAgICAgfCAnQWNjZXNzR3JvdXBQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICA+XG4gID47XG5leHBvcnQgY29uc3QgdXBkYXRlQWNjZXNzR3JvdXAgPSAoXG4gIHBhcmFtczogVXBkYXRlQWNjZXNzR3JvdXBSZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxDcmVhdGVBY2Nlc3NHcm91cFJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3VwZGF0ZS1hY2Nlc3MtZ3JvdXAnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RVcGRhdGVBY2Nlc3NHcm91cFRyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RVcGRhdGVBY2Nlc3NHcm91cFRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IFVwZGF0ZUFjY2Vzc0dyb3VwUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2Vzc0dyb3VwKCk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cFB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE9wZXJhdGlvblR5cGUgPSAzO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cEtleU5hbWUgPSBlbmNvZGVVVEY4VG9CeXRlcyhwYXJhbXMuQWNjZXNzR3JvdXBLZXlOYW1lKTtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgbWV0YWRhdGEsXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9hY2Nlc3MtZ3JvdXBzLWFwaSNhZGQtYWNjZXNzLWdyb3VwLW1lbWJlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFjY2Vzc0dyb3VwTWVtYmVycyA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1JlcXVlc3Q+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9hZGQtYWNjZXNzLWdyb3VwLW1lbWJlcnMnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RBZGRBY2Nlc3NHcm91cE1lbWJlcnNUcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0QWRkQWNjZXNzR3JvdXBNZW1iZXJzVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXF1ZXN0PlxuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2Vzc0dyb3VwTWVtYmVycygpO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE93bmVyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBNZW1iZXJPcGVyYXRpb25UeXBlID0gMjtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBLZXlOYW1lID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFjY2Vzc0dyb3VwS2V5TmFtZSk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwTWVtYmVyc0xpc3QgPSBwYXJhbXMuQWNjZXNzR3JvdXBNZW1iZXJMaXN0Lm1hcChcbiAgICAobWVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXdBY2Nlc3NHcm91cE1lbWJlciA9IG5ldyBBY2Nlc3NHcm91cE1lbWJlclJlY29yZCgpO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuYWNjZXNzR3JvdXBNZW1iZXJQdWJsaWNLZXkgPVxuICAgICAgICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgICAgICAgbWVtYmVyLkFjY2Vzc0dyb3VwTWVtYmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgICAgICAgKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmFjY2Vzc0dyb3VwTWVtYmVyS2V5TmFtZSA9IGVuY29kZVVURjhUb0J5dGVzKFxuICAgICAgICBtZW1iZXIuQWNjZXNzR3JvdXBNZW1iZXJLZXlOYW1lXG4gICAgICApO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuZW5jcnlwdGVkS2V5ID0gZW5jb2RlVVRGOFRvQnl0ZXMoXG4gICAgICAgIG1lbWJlci5FbmNyeXB0ZWRLZXlcbiAgICAgICk7XG4gICAgICBuZXdBY2Nlc3NHcm91cE1lbWJlci5leHRyYURhdGEgPSBjb252ZXJ0RXh0cmFEYXRhKG1lbWJlci5FeHRyYURhdGEpO1xuICAgICAgcmV0dXJuIG5ld0FjY2Vzc0dyb3VwTWVtYmVyO1xuICAgIH1cbiAgKTtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgbWV0YWRhdGEsXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9hY2Nlc3MtZ3JvdXBzLWFwaSNyZW1vdmUtYWNjZXNzLWdyb3VwLW1lbWJlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFjY2Vzc0dyb3VwTWVtYmVycyA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1JlcXVlc3Q+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9yZW1vdmUtYWNjZXNzLWdyb3VwLW1lbWJlcnMnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RSZW1vdmVBY2Nlc3NHcm91cE1lbWJlcnNUcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0UmVtb3ZlQWNjZXNzR3JvdXBNZW1iZXJzVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXF1ZXN0PlxuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2Vzc0dyb3VwTWVtYmVycygpO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE93bmVyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBNZW1iZXJPcGVyYXRpb25UeXBlID0gMztcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBLZXlOYW1lID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFjY2Vzc0dyb3VwS2V5TmFtZSk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwTWVtYmVyc0xpc3QgPSBwYXJhbXMuQWNjZXNzR3JvdXBNZW1iZXJMaXN0Lm1hcChcbiAgICAobWVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXdBY2Nlc3NHcm91cE1lbWJlciA9IG5ldyBBY2Nlc3NHcm91cE1lbWJlclJlY29yZCgpO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuYWNjZXNzR3JvdXBNZW1iZXJQdWJsaWNLZXkgPVxuICAgICAgICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgICAgICAgbWVtYmVyLkFjY2Vzc0dyb3VwTWVtYmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgICAgICAgKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmFjY2Vzc0dyb3VwTWVtYmVyS2V5TmFtZSA9IGVuY29kZVVURjhUb0J5dGVzKFxuICAgICAgICBwYXJhbXMuQWNjZXNzR3JvdXBLZXlOYW1lXG4gICAgICApO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuZW5jcnlwdGVkS2V5ID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICBuZXdBY2Nlc3NHcm91cE1lbWJlci5leHRyYURhdGEgPSBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGEoKTtcbiAgICAgIHJldHVybiBuZXdBY2Nlc3NHcm91cE1lbWJlcjtcbiAgICB9XG4gICk7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIG1ldGFkYXRhLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvYWNjZXNzLWdyb3Vwcy1hcGkjdXBkYXRlLWFjY2Vzcy1ncm91cC1tZW1iZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2Nlc3NHcm91cE1lbWJlcnMgPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXF1ZXN0PixcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8QWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvdXBkYXRlLWFjY2Vzcy1ncm91cC1tZW1iZXJzJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0VXBkYXRlQWNjZXNzR3JvdXBNZW1iZXJzVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFVwZGF0ZUFjY2Vzc0dyb3VwTWVtYmVyc1RyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8QWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVxdWVzdD5cbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFBY2Nlc3NHcm91cE1lbWJlcnMoKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBPd25lclB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwTWVtYmVyT3BlcmF0aW9uVHlwZSA9IDQ7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwS2V5TmFtZSA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5BY2Nlc3NHcm91cEtleU5hbWUpO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE1lbWJlcnNMaXN0ID0gcGFyYW1zLkFjY2Vzc0dyb3VwTWVtYmVyTGlzdC5tYXAoXG4gICAgKG1lbWJlcikgPT4ge1xuICAgICAgY29uc3QgbmV3QWNjZXNzR3JvdXBNZW1iZXIgPSBuZXcgQWNjZXNzR3JvdXBNZW1iZXJSZWNvcmQoKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmFjY2Vzc0dyb3VwTWVtYmVyUHVibGljS2V5ID1cbiAgICAgICAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgICAgICAgIG1lbWJlci5BY2Nlc3NHcm91cE1lbWJlclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICAgICAgICk7XG4gICAgICBuZXdBY2Nlc3NHcm91cE1lbWJlci5hY2Nlc3NHcm91cE1lbWJlcktleU5hbWUgPSBlbmNvZGVVVEY4VG9CeXRlcyhcbiAgICAgICAgbWVtYmVyLkFjY2Vzc0dyb3VwTWVtYmVyS2V5TmFtZVxuICAgICAgKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmVuY3J5cHRlZEtleSA9IGVuY29kZVVURjhUb0J5dGVzKFxuICAgICAgICBtZW1iZXIuRW5jcnlwdGVkS2V5XG4gICAgICApO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuZXh0cmFEYXRhID0gY29udmVydEV4dHJhRGF0YShtZW1iZXIuRXh0cmFEYXRhKTtcbiAgICAgIHJldHVybiBuZXdBY2Nlc3NHcm91cE1lbWJlcjtcbiAgICB9XG4gICk7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIG1ldGFkYXRhLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWdyb3Vwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbnMvYWNjZXNzLWdyb3Vwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQiw4QkFBOEIsRUFDOUIscUNBQXFDLEVBQ3JDLDhCQUE4QixFQUM5QixpQkFBaUIsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixrQkFBa0IsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFHckIsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQXNDLEVBQUUsRUFBRTtJQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFJLDhCQUE4QixFQUFFLENBQUM7SUFDdEQsUUFBUSxDQUFDLG9CQUFvQixHQUFHLDhCQUE4QixDQUM1RCxNQUFNLENBQUMsK0JBQStCLENBQ3ZDLENBQUM7SUFDRixRQUFRLENBQUMseUJBQXlCLEdBQUcsOEJBQThCLENBQ2pFLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FDNUMsQ0FBQztJQUNGLFFBQVEsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQUM7SUFDdEMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLENBQ25ELE1BQXNDLEVBQ0csRUFBRTtJQUMzQyxPQUFPLHVCQUF1QixDQUM1QixNQUFNLENBQUMsb0NBQW9DLEVBQzNDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUNoQztRQUNFLFNBQVMsRUFB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QkFBOEIsQ0FDNUIsTUFBTSxDQUFDLHFDQUFxQyxDQUM3QyxDQUFDO1FBQ0osb0JBQW9CLENBQUMsd0JBQXdCLEdBQUcsaUJBQWlCLENBQy9ELE1BQU0sQ0FBQyx3QkFBd0IsQ0FDaEMsQ0FBQztRQUNGLG9CQUFvQixDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FDbkQsTUFBTSxDQUFDLFlBQVksQ0FDcEIsQ0FBQztRQUNGLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDLENBQ0YsQ0FBQztJQUNGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDRDQUE0QyxHQUFHLENBQzFELE1BQTJFLEVBQ2xDLEVBQUU7SUFDM0MsT0FBTyx1QkFBdUIsQ0FDNUIsTUFBTSxDQUFDLG9DQUFvQyxFQUMzQyxxQ0FBcUMsQ0FBQyxNQUFNLENBQUMsRUFDN0M7UUFDRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVxdWVzdCxcbiAgQWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVzcG9uc2UsXG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgQ3JlYXRlQWNjZXNzR3JvdXBSZXF1ZXN0LFxuICBDcmVhdGVBY2Nlc3NHcm91cFJlc3BvbnNlLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzIH0gZnJvbSAnLi4vZGF0YSc7XG5pbXBvcnQge1xuICBBY2Nlc3NHcm91cE1lbWJlclJlY29yZCxcbiAgVHJhbnNhY3Rpb25FeHRyYURhdGEsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFBY2Nlc3NHcm91cCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2Vzc0dyb3VwTWVtYmVycyxcbiAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzLFxuICBlbmNvZGVVVEY4VG9CeXRlcyxcbn0gZnJvbSAnLi4vaWRlbnRpdHknO1xuaW1wb3J0IHsgZ3VhcmRUeFBlcm1pc3Npb24gfSBmcm9tICcuLi9pZGVudGl0eS9wZXJtaXNzaW9ucy11dGlscyc7XG5pbXBvcnQge1xuICBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeCxcbiAgY29udmVydEV4dHJhRGF0YSxcbiAgZ2V0VHhXaXRoRmVlTmFub3MsXG4gIGhhbmRsZVNpZ25BbmRTdWJtaXQsXG4gIHN1bVRyYW5zYWN0aW9uRmVlcyxcbn0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeCwgVHhSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgYnVpbGRBY2Nlc3NHcm91cE1ldGFkYXRhID0gKHBhcmFtczogQ3JlYXRlQWNjZXNzR3JvdXBSZXF1ZXN0UGFyYW1zKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFBY2Nlc3NHcm91cCgpO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cFB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE93bmVyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBPcGVyYXRpb25UeXBlID0gMjtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBLZXlOYW1lID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFjY2Vzc0dyb3VwS2V5TmFtZSk7XG4gIHJldHVybiBtZXRhZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RDcmVhdGVBY2Nlc3NHcm91cFRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IENyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRBY2Nlc3NHcm91cE1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9hY2Nlc3MtZ3JvdXBzLWFwaSNjcmVhdGUtYWNjZXNzLWdyb3VwXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdFBhcmFtcyA9XG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gICAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICAgIENyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdCxcbiAgICAgIHwgJ0FjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ0FjY2Vzc0dyb3VwS2V5TmFtZSdcbiAgICAgIHwgJ0FjY2Vzc0dyb3VwUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjY2Vzc0dyb3VwID0gYXN5bmMgKFxuICBwYXJhbXM6IENyZWF0ZUFjY2Vzc0dyb3VwUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxDcmVhdGVBY2Nlc3NHcm91cFJlc3BvbnNlPj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQWNjZXNzR3JvdXBNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xuXG4gIGlmIChvcHRpb25zPy5jaGVja1Blcm1pc3Npb25zICE9PSBmYWxzZSkge1xuICAgIGF3YWl0IGd1YXJkVHhQZXJtaXNzaW9uKHtcbiAgICAgIEdsb2JhbERFU09MaW1pdDpcbiAgICAgICAgdHhXaXRoRmVlLmZlZU5hbm9zICsgc3VtVHJhbnNhY3Rpb25GZWVzKHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMpLFxuICAgICAgLy8gTk9URTogVGhpcyBpcyBtb3JlIHBlcm1pc3NpdmUgdGhhbiB3ZSBhY3R1YWxseSBuZWVkIGl0IHRvIGJlLCBidXQgSVxuICAgICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgd2hlbiBzcGVjaWZ5aW5nIHRoZSBBY2Nlc3NHcm91cEtleU5hbWUgYW5kXG4gICAgICAvLyBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2suIElmIGFueW9uZSBjb21wbGFpbnMsIHdlIGNhblxuICAgICAgLy8gcmV2aXNpdCBpdCwgYnV0IHRoaXMgaXMgbm90IGEgdGVycmlibHkgc2Vuc2l0aXZlIHBlcm1pc3Npb24gdG8gZ3JhbnQuXG4gICAgICBBY2Nlc3NHcm91cExpbWl0TWFwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2s6ICcnLFxuICAgICAgICAgIFNjb3BlVHlwZTogJ0FueScsXG4gICAgICAgICAgQWNjZXNzR3JvdXBLZXlOYW1lOiAnJyxcbiAgICAgICAgICBPcGVyYXRpb25UeXBlOiAnQW55JyxcbiAgICAgICAgICBPcENvdW50OiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBBY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2s6ICcnLFxuICAgICAgICAgIFNjb3BlVHlwZTogJ0FueScsXG4gICAgICAgICAgQWNjZXNzR3JvdXBLZXlOYW1lOiAnJyxcbiAgICAgICAgICBPcGVyYXRpb25UeXBlOiAnQW55JyxcbiAgICAgICAgICBPcENvdW50OiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2NyZWF0ZS1hY2Nlc3MtZ3JvdXAnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RDcmVhdGVBY2Nlc3NHcm91cFRyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2FjY2Vzcy1ncm91cHMtYXBpI3VwZGF0ZS1hY2Nlc3MtZ3JvdXBcbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlQWNjZXNzR3JvdXBSZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgQ3JlYXRlQWNjZXNzR3JvdXBSZXF1ZXN0LFxuICAgICAgfCAnQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQWNjZXNzR3JvdXBLZXlOYW1lJ1xuICAgICAgfCAnQWNjZXNzR3JvdXBQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICA+XG4gID47XG5leHBvcnQgY29uc3QgdXBkYXRlQWNjZXNzR3JvdXAgPSAoXG4gIHBhcmFtczogVXBkYXRlQWNjZXNzR3JvdXBSZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxDcmVhdGVBY2Nlc3NHcm91cFJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3VwZGF0ZS1hY2Nlc3MtZ3JvdXAnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RVcGRhdGVBY2Nlc3NHcm91cFRyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RVcGRhdGVBY2Nlc3NHcm91cFRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IFVwZGF0ZUFjY2Vzc0dyb3VwUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2Vzc0dyb3VwKCk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cFB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE9wZXJhdGlvblR5cGUgPSAzO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cEtleU5hbWUgPSBlbmNvZGVVVEY4VG9CeXRlcyhwYXJhbXMuQWNjZXNzR3JvdXBLZXlOYW1lKTtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgbWV0YWRhdGEsXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9hY2Nlc3MtZ3JvdXBzLWFwaSNhZGQtYWNjZXNzLWdyb3VwLW1lbWJlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFjY2Vzc0dyb3VwTWVtYmVycyA9IGFzeW5jIChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1JlcXVlc3Q+LFxuICBvcHRpb25zPzogVHhSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1Jlc3BvbnNlPj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQWRkQWNjZXNzR3JvdXBNZW1iZXJNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xuXG4gIGlmIChvcHRpb25zPy5jaGVja1Blcm1pc3Npb25zICE9PSBmYWxzZSkge1xuICAgIGF3YWl0IGd1YXJkVHhQZXJtaXNzaW9uKHtcbiAgICAgIEdsb2JhbERFU09MaW1pdDpcbiAgICAgICAgdHhXaXRoRmVlLmZlZU5hbm9zICsgc3VtVHJhbnNhY3Rpb25GZWVzKHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMpLFxuICAgICAgLy8gTk9URTogVGhpcyBpcyBtb3JlIHBlcm1pc3NpdmUgdGhhbiB3ZSBhY3R1YWxseSBuZWVkIGl0IHRvIGJlLCBidXQgSVxuICAgICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgd2hlbiBzcGVjaWZ5aW5nIHRoZSBBY2Nlc3NHcm91cEtleU5hbWUgYW5kXG4gICAgICAvLyBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2suIElmIGFueW9uZSBjb21wbGFpbnMsIHdlIGNhblxuICAgICAgLy8gcmV2aXNpdCBpdCwgYnV0IHRoaXMgaXMgbm90IGEgdGVycmlibHkgc2Vuc2l0aXZlIHBlcm1pc3Npb24gdG8gZ3JhbnQuXG4gICAgICBBY2Nlc3NHcm91cExpbWl0TWFwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2s6ICcnLFxuICAgICAgICAgIFNjb3BlVHlwZTogJ0FueScsXG4gICAgICAgICAgQWNjZXNzR3JvdXBLZXlOYW1lOiAnJyxcbiAgICAgICAgICBPcGVyYXRpb25UeXBlOiAnQW55JyxcbiAgICAgICAgICBPcENvdW50OiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBBY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2s6ICcnLFxuICAgICAgICAgIFNjb3BlVHlwZTogJ0FueScsXG4gICAgICAgICAgQWNjZXNzR3JvdXBLZXlOYW1lOiAnJyxcbiAgICAgICAgICBPcGVyYXRpb25UeXBlOiAnQW55JyxcbiAgICAgICAgICBPcENvdW50OiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2FkZC1hY2Nlc3MtZ3JvdXAtbWVtYmVycycsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1RyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkQWRkQWNjZXNzR3JvdXBNZW1iZXJNZXRhZGF0YSA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1JlcXVlc3Q+XG4pID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2Vzc0dyb3VwTWVtYmVycygpO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE93bmVyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBNZW1iZXJPcGVyYXRpb25UeXBlID0gMjtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBLZXlOYW1lID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFjY2Vzc0dyb3VwS2V5TmFtZSk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwTWVtYmVyc0xpc3QgPSBwYXJhbXMuQWNjZXNzR3JvdXBNZW1iZXJMaXN0Lm1hcChcbiAgICAobWVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXdBY2Nlc3NHcm91cE1lbWJlciA9IG5ldyBBY2Nlc3NHcm91cE1lbWJlclJlY29yZCgpO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuYWNjZXNzR3JvdXBNZW1iZXJQdWJsaWNLZXkgPVxuICAgICAgICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgICAgICAgbWVtYmVyLkFjY2Vzc0dyb3VwTWVtYmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgICAgICAgKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmFjY2Vzc0dyb3VwTWVtYmVyS2V5TmFtZSA9IGVuY29kZVVURjhUb0J5dGVzKFxuICAgICAgICBtZW1iZXIuQWNjZXNzR3JvdXBNZW1iZXJLZXlOYW1lXG4gICAgICApO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuZW5jcnlwdGVkS2V5ID0gZW5jb2RlVVRGOFRvQnl0ZXMoXG4gICAgICAgIG1lbWJlci5FbmNyeXB0ZWRLZXlcbiAgICAgICk7XG4gICAgICBuZXdBY2Nlc3NHcm91cE1lbWJlci5leHRyYURhdGEgPSBjb252ZXJ0RXh0cmFEYXRhKG1lbWJlci5FeHRyYURhdGEpO1xuICAgICAgcmV0dXJuIG5ld0FjY2Vzc0dyb3VwTWVtYmVyO1xuICAgIH1cbiAgKTtcbiAgcmV0dXJuIG1ldGFkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1RyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8QWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVxdWVzdD5cbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQWRkQWNjZXNzR3JvdXBNZW1iZXJNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvYWNjZXNzLWdyb3Vwcy1hcGkjcmVtb3ZlLWFjY2Vzcy1ncm91cC1tZW1iZXJzXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBY2Nlc3NHcm91cE1lbWJlcnMgPSBhc3luYyAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXF1ZXN0PixcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXNwb25zZT4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZFJlbW92ZUFjY2Vzc0dyb3VwTWVtYmVyTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgbW9yZSBwZXJtaXNzaXZlIHRoYW4gd2UgYWN0dWFsbHkgbmVlZCBpdCB0byBiZSwgYnV0IElcbiAgICAgIC8vIGNvdWxkbid0IGdldCBpdCB0byB3b3JrIHdoZW4gc3BlY2lmeWluZyB0aGUgQWNjZXNzR3JvdXBLZXlOYW1lIGFuZFxuICAgICAgLy8gQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrLiBJZiBhbnlvbmUgY29tcGxhaW5zLCB3ZSBjYW5cbiAgICAgIC8vIHJldmlzaXQgaXQsIGJ1dCB0aGlzIGlzIG5vdCBhIHRlcnJpYmx5IHNlbnNpdGl2ZSBwZXJtaXNzaW9uIHRvIGdyYW50LlxuICAgICAgQWNjZXNzR3JvdXBMaW1pdE1hcDogW1xuICAgICAgICB7XG4gICAgICAgICAgQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrOiAnJyxcbiAgICAgICAgICBTY29wZVR5cGU6ICdBbnknLFxuICAgICAgICAgIEFjY2Vzc0dyb3VwS2V5TmFtZTogJycsXG4gICAgICAgICAgT3BlcmF0aW9uVHlwZTogJ0FueScsXG4gICAgICAgICAgT3BDb3VudDogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgQWNjZXNzR3JvdXBNZW1iZXJMaW1pdE1hcDogW1xuICAgICAgICB7XG4gICAgICAgICAgQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrOiAnJyxcbiAgICAgICAgICBTY29wZVR5cGU6ICdBbnknLFxuICAgICAgICAgIEFjY2Vzc0dyb3VwS2V5TmFtZTogJycsXG4gICAgICAgICAgT3BlcmF0aW9uVHlwZTogJ0FueScsXG4gICAgICAgICAgT3BDb3VudDogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvcmVtb3ZlLWFjY2Vzcy1ncm91cC1tZW1iZXJzJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0UmVtb3ZlQWNjZXNzR3JvdXBNZW1iZXJzVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuY29uc3QgYnVpbGRSZW1vdmVBY2Nlc3NHcm91cE1lbWJlck1ldGFkYXRhID0gKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8QWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVxdWVzdD5cbikgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQWNjZXNzR3JvdXBNZW1iZXJzKCk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE1lbWJlck9wZXJhdGlvblR5cGUgPSAzO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cEtleU5hbWUgPSBlbmNvZGVVVEY4VG9CeXRlcyhwYXJhbXMuQWNjZXNzR3JvdXBLZXlOYW1lKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBNZW1iZXJzTGlzdCA9IHBhcmFtcy5BY2Nlc3NHcm91cE1lbWJlckxpc3QubWFwKFxuICAgIChtZW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld0FjY2Vzc0dyb3VwTWVtYmVyID0gbmV3IEFjY2Vzc0dyb3VwTWVtYmVyUmVjb3JkKCk7XG4gICAgICBuZXdBY2Nlc3NHcm91cE1lbWJlci5hY2Nlc3NHcm91cE1lbWJlclB1YmxpY0tleSA9XG4gICAgICAgIGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICAgICAgICBtZW1iZXIuQWNjZXNzR3JvdXBNZW1iZXJQdWJsaWNLZXlCYXNlNThDaGVja1xuICAgICAgICApO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuYWNjZXNzR3JvdXBNZW1iZXJLZXlOYW1lID0gZW5jb2RlVVRGOFRvQnl0ZXMoXG4gICAgICAgIHBhcmFtcy5BY2Nlc3NHcm91cEtleU5hbWVcbiAgICAgICk7XG4gICAgICBuZXdBY2Nlc3NHcm91cE1lbWJlci5lbmNyeXB0ZWRLZXkgPSBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmV4dHJhRGF0YSA9IG5ldyBUcmFuc2FjdGlvbkV4dHJhRGF0YSgpO1xuICAgICAgcmV0dXJuIG5ld0FjY2Vzc0dyb3VwTWVtYmVyO1xuICAgIH1cbiAgKTtcbiAgcmV0dXJuIG1ldGFkYXRhO1xufTtcbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RSZW1vdmVBY2Nlc3NHcm91cE1lbWJlcnNUcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1JlcXVlc3Q+XG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZFJlbW92ZUFjY2Vzc0dyb3VwTWVtYmVyTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2FjY2Vzcy1ncm91cHMtYXBpI3VwZGF0ZS1hY2Nlc3MtZ3JvdXAtbWVtYmVyc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjZXNzR3JvdXBNZW1iZXJzID0gYXN5bmMgKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8QWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVxdWVzdD4sXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8QWRkQWNjZXNzR3JvdXBNZW1iZXJzUmVzcG9uc2U+PiA9PiB7XG4gIGNvbnN0IHR4V2l0aEZlZSA9IGdldFR4V2l0aEZlZU5hbm9zKFxuICAgIHBhcmFtcy5BY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRVcGRhdGVBY2Nlc3NHcm91cE1lbWJlcnNNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xuXG4gIGlmIChvcHRpb25zPy5jaGVja1Blcm1pc3Npb25zICE9PSBmYWxzZSkge1xuICAgIGF3YWl0IGd1YXJkVHhQZXJtaXNzaW9uKHtcbiAgICAgIEdsb2JhbERFU09MaW1pdDpcbiAgICAgICAgdHhXaXRoRmVlLmZlZU5hbm9zICsgc3VtVHJhbnNhY3Rpb25GZWVzKHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMpLFxuICAgICAgLy8gTk9URTogVGhpcyBpcyBtb3JlIHBlcm1pc3NpdmUgdGhhbiB3ZSBhY3R1YWxseSBuZWVkIGl0IHRvIGJlLCBidXQgSVxuICAgICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgd2hlbiBzcGVjaWZ5aW5nIHRoZSBBY2Nlc3NHcm91cEtleU5hbWUgYW5kXG4gICAgICAvLyBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2suIElmIGFueW9uZSBjb21wbGFpbnMsIHdlIGNhblxuICAgICAgLy8gcmV2aXNpdCBpdCwgYnV0IHRoaXMgaXMgbm90IGEgdGVycmlibHkgc2Vuc2l0aXZlIHBlcm1pc3Npb24gdG8gZ3JhbnQuXG4gICAgICBBY2Nlc3NHcm91cExpbWl0TWFwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2s6ICcnLFxuICAgICAgICAgIFNjb3BlVHlwZTogJ0FueScsXG4gICAgICAgICAgQWNjZXNzR3JvdXBLZXlOYW1lOiAnJyxcbiAgICAgICAgICBPcGVyYXRpb25UeXBlOiAnQW55JyxcbiAgICAgICAgICBPcENvdW50OiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBBY2Nlc3NHcm91cE1lbWJlckxpbWl0TWFwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY2Nlc3NHcm91cE93bmVyUHVibGljS2V5QmFzZTU4Q2hlY2s6ICcnLFxuICAgICAgICAgIFNjb3BlVHlwZTogJ0FueScsXG4gICAgICAgICAgQWNjZXNzR3JvdXBLZXlOYW1lOiAnJyxcbiAgICAgICAgICBPcGVyYXRpb25UeXBlOiAnQW55JyxcbiAgICAgICAgICBPcENvdW50OiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3VwZGF0ZS1hY2Nlc3MtZ3JvdXAtbWVtYmVycycsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdFVwZGF0ZUFjY2Vzc0dyb3VwTWVtYmVyc1RyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkVXBkYXRlQWNjZXNzR3JvdXBNZW1iZXJzTWV0YWRhdGEgPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxBZGRBY2Nlc3NHcm91cE1lbWJlcnNSZXF1ZXN0PlxuKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFBY2Nlc3NHcm91cE1lbWJlcnMoKTtcbiAgbWV0YWRhdGEuYWNjZXNzR3JvdXBPd25lclB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQWNjZXNzR3JvdXBPd25lclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwTWVtYmVyT3BlcmF0aW9uVHlwZSA9IDQ7XG4gIG1ldGFkYXRhLmFjY2Vzc0dyb3VwS2V5TmFtZSA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5BY2Nlc3NHcm91cEtleU5hbWUpO1xuICBtZXRhZGF0YS5hY2Nlc3NHcm91cE1lbWJlcnNMaXN0ID0gcGFyYW1zLkFjY2Vzc0dyb3VwTWVtYmVyTGlzdC5tYXAoXG4gICAgKG1lbWJlcikgPT4ge1xuICAgICAgY29uc3QgbmV3QWNjZXNzR3JvdXBNZW1iZXIgPSBuZXcgQWNjZXNzR3JvdXBNZW1iZXJSZWNvcmQoKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmFjY2Vzc0dyb3VwTWVtYmVyUHVibGljS2V5ID1cbiAgICAgICAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgICAgICAgIG1lbWJlci5BY2Nlc3NHcm91cE1lbWJlclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICAgICAgICk7XG4gICAgICBuZXdBY2Nlc3NHcm91cE1lbWJlci5hY2Nlc3NHcm91cE1lbWJlcktleU5hbWUgPSBlbmNvZGVVVEY4VG9CeXRlcyhcbiAgICAgICAgbWVtYmVyLkFjY2Vzc0dyb3VwTWVtYmVyS2V5TmFtZVxuICAgICAgKTtcbiAgICAgIG5ld0FjY2Vzc0dyb3VwTWVtYmVyLmVuY3J5cHRlZEtleSA9IGVuY29kZVVURjhUb0J5dGVzKFxuICAgICAgICBtZW1iZXIuRW5jcnlwdGVkS2V5XG4gICAgICApO1xuICAgICAgbmV3QWNjZXNzR3JvdXBNZW1iZXIuZXh0cmFEYXRhID0gY29udmVydEV4dHJhRGF0YShtZW1iZXIuRXh0cmFEYXRhKTtcbiAgICAgIHJldHVybiBuZXdBY2Nlc3NHcm91cE1lbWJlcjtcbiAgICB9XG4gICk7XG4gIHJldHVybiBtZXRhZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RVcGRhdGVBY2Nlc3NHcm91cE1lbWJlcnNUcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPEFkZEFjY2Vzc0dyb3VwTWVtYmVyc1JlcXVlc3Q+XG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLkFjY2Vzc0dyb3VwT3duZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZFVwZGF0ZUFjY2Vzc0dyb3VwTWVtYmVyc01ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuIl19
import { AssociationTxnResponse, ConstructedTransactionResponse, CreatePostAssociationRequest, CreateUserAssociationRequest, DeleteAssociationRequest, RequestOptions, TxRequestWithOptionalFeesAndExtraData } from '../backend-types';
import { PartialWithRequiredFields } from '../data';
import { ConstructedAndSubmittedTx } from '../types';
import { ConstructedAndSubmittedTx, TxRequestOptions } from '../types';
/**

@@ -8,3 +8,3 @@ * https://docs.deso.org/deso-backend/construct-transactions/associations-transactions-api#create-user-association

export type CreateUserAssociationRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<CreateUserAssociationRequest, 'TargetUserPublicKeyBase58Check' | 'TransactorPublicKeyBase58Check' | 'AssociationType' | 'AssociationValue'>>;
export declare const createUserAssociation: (params: CreateUserAssociationRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AssociationTxnResponse>>;
export declare const createUserAssociation: (params: CreateUserAssociationRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AssociationTxnResponse>>;
export declare const constructCreateUserAssociationTransaction: (params: CreateUserAssociationRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -15,3 +15,3 @@ /**

export type DeleteUserAssociationRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<DeleteAssociationRequest, 'TransactorPublicKeyBase58Check' | 'AssociationID'>>;
export declare const deleteUserAssociation: (params: DeleteUserAssociationRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AssociationTxnResponse>>;
export declare const deleteUserAssociation: (params: DeleteUserAssociationRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AssociationTxnResponse>>;
export declare const constructDeleteUserAssociationTransaction: (params: DeleteUserAssociationRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -22,3 +22,3 @@ /**

export type CreatePostAssociationRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<CreatePostAssociationRequest, 'PostHashHex' | 'TransactorPublicKeyBase58Check' | 'AssociationType' | 'AssociationValue'>>;
export declare const createPostAssociation: (params: CreatePostAssociationRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AssociationTxnResponse>>;
export declare const createPostAssociation: (params: CreatePostAssociationRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AssociationTxnResponse>>;
export declare const constructCreatePostAssociationTransaction: (params: CreatePostAssociationRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -25,0 +25,0 @@ /**

@@ -0,8 +1,50 @@

var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { hexToBytes } from '@noble/hashes/utils';
import { bs58PublicKeyToCompressedBytes, encodeUTF8ToBytes, TransactionMetadataCreatePostAssociation, TransactionMetadataCreateUserAssociation, TransactionMetadataDeletePostAssociation, TransactionMetadataDeleteUserAssociation, } from '../identity';
import { constructBalanceModelTx, handleSignAndSubmit } from '../internal';
export const createUserAssociation = (params, options) => {
import { TransactionMetadataCreatePostAssociation, TransactionMetadataCreateUserAssociation, TransactionMetadataDeletePostAssociation, TransactionMetadataDeleteUserAssociation, bs58PublicKeyToCompressedBytes, encodeUTF8ToBytes, } from '../identity';
import { guardTxPermission } from '../identity/permissions-utils';
import { constructBalanceModelTx, getTxWithFeeNanos, handleSignAndSubmit, sumTransactionFees, } from '../internal';
export const createUserAssociation = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b, _c, _d;
const txWithFee = getTxWithFeeNanos(params.TransactorPublicKeyBase58Check, buildCreateUserAssociationMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
AssociationLimitMap: [
{
AssociationClass: 'User',
AssociationType: params.AssociationType,
AppScopeType: params.AppPublicKeyBase58Check ? 'Scoped' : 'Any',
AppPublicKeyBase58Check: (_a = params.AppPublicKeyBase58Check) !== null && _a !== void 0 ? _a : '',
AssociationOperation: 'Create',
OpCount: (_b = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _b !== void 0 ? _b : 1,
},
// NOTE: This is a bit weird, but we don't have AppPublicKeyBase58Check
// or AssociationType in the delete params, so we just ask for delete
// permission at the same time the association is created.
{
AssociationClass: 'User',
AssociationType: params.AssociationType,
AppScopeType: params.AppPublicKeyBase58Check ? 'Scoped' : 'Any',
AppPublicKeyBase58Check: (_c = params.AppPublicKeyBase58Check) !== null && _c !== void 0 ? _c : '',
AssociationOperation: 'Delete',
OpCount: (_d = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _d !== void 0 ? _d : 1,
},
],
});
}
return handleSignAndSubmit('api/v0/user-associations/create', params, Object.assign(Object.assign({}, options), { constructionFunction: constructCreateUserAssociationTransaction }));
};
export const constructCreateUserAssociationTransaction = (params) => {
});
const buildCreateUserAssociationMetadata = (params) => {
const metadata = new TransactionMetadataCreateUserAssociation();

@@ -13,3 +55,6 @@ metadata.appPublicKey = bs58PublicKeyToCompressedBytes(params.AppPublicKeyBase58Check || '');

metadata.targetUserPublicKey = bs58PublicKeyToCompressedBytes(params.TargetUserPublicKeyBase58Check);
return constructBalanceModelTx(params.TransactorPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructCreateUserAssociationTransaction = (params) => {
return constructBalanceModelTx(params.TransactorPublicKeyBase58Check, buildCreateUserAssociationMetadata(params), {
ExtraData: params.ExtraData,

@@ -20,9 +65,12 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
export const deleteUserAssociation = (params, options) => {
export const deleteUserAssociation = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
return handleSignAndSubmit('api/v0/user-associations/delete', params, Object.assign(Object.assign({}, options), { constructionFunction: constructDeleteUserAssociationTransaction }));
});
const buildDeleteUserAssociationMetadata = (params) => {
const metadata = new TransactionMetadataDeleteUserAssociation();
metadata.associationID = encodeUTF8ToBytes(params.AssociationID);
return metadata;
};
export const constructDeleteUserAssociationTransaction = (params) => {
const metadata = new TransactionMetadataDeleteUserAssociation();
metadata.associationID = encodeUTF8ToBytes(params.AssociationID);
return constructBalanceModelTx(params.TransactorPublicKeyBase58Check, metadata, {
return constructBalanceModelTx(params.TransactorPublicKeyBase58Check, buildDeleteUserAssociationMetadata(params), {
ExtraData: params.ExtraData,

@@ -33,6 +81,38 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
export const createPostAssociation = (params, options) => {
export const createPostAssociation = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _e, _f, _g, _h;
const txWithFee = getTxWithFeeNanos(params.TransactorPublicKeyBase58Check, buildCreatePostAssociationMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
AssociationLimitMap: [
{
AssociationClass: 'Post',
AssociationType: params.AssociationType,
AppScopeType: params.AppPublicKeyBase58Check ? 'Scoped' : 'Any',
AppPublicKeyBase58Check: (_e = params.AppPublicKeyBase58Check) !== null && _e !== void 0 ? _e : '',
AssociationOperation: 'Create',
OpCount: (_f = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _f !== void 0 ? _f : 1,
},
// NOTE: This is a bit weird, but we don't have AppPublicKeyBase58Check
// or AssociationType in the delete params, so we just ask for delete
// permission at the same time the association is created.
{
AssociationClass: 'Post',
AssociationType: params.AssociationType,
AppScopeType: params.AppPublicKeyBase58Check ? 'Scoped' : 'Any',
AppPublicKeyBase58Check: (_g = params.AppPublicKeyBase58Check) !== null && _g !== void 0 ? _g : '',
AssociationOperation: 'Delete',
OpCount: (_h = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _h !== void 0 ? _h : 1,
},
],
});
}
return handleSignAndSubmit('api/v0/post-associations/create', params, Object.assign(Object.assign({}, options), { constructionFunction: constructCreatePostAssociationTransaction }));
};
export const constructCreatePostAssociationTransaction = (params) => {
});
const buildCreatePostAssociationMetadata = (params) => {
const metadata = new TransactionMetadataCreatePostAssociation();

@@ -43,3 +123,6 @@ metadata.appPublicKey = bs58PublicKeyToCompressedBytes(params.AppPublicKeyBase58Check || '');

metadata.postHash = hexToBytes(params.PostHashHex);
return constructBalanceModelTx(params.TransactorPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructCreatePostAssociationTransaction = (params) => {
return constructBalanceModelTx(params.TransactorPublicKeyBase58Check, buildCreatePostAssociationMetadata(params), {
ExtraData: params.ExtraData,

@@ -62,2 +145,2 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzb2NpYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9ucy9hc3NvY2lhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBV2pELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsaUJBQWlCLEVBQ2pCLHdDQUF3QyxFQUN4Qyx3Q0FBd0MsRUFDeEMsd0NBQXdDLEVBQ3hDLHdDQUF3QyxHQUN6QyxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFnQjNFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLE1BQTBDLEVBQzFDLE9BQXdCLEVBQ29DLEVBQUU7SUFDOUQsT0FBTyxtQkFBbUIsQ0FBQyxpQ0FBaUMsRUFBRSxNQUFNLGtDQUMvRCxPQUFPLEtBQ1Ysb0JBQW9CLEVBQUUseUNBQXlDLElBQy9ELENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5Q0FBeUMsR0FBRyxDQUN2RCxNQUEwQyxFQUNELEVBQUU7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSx3Q0FBd0MsRUFBRSxDQUFDO0lBQ2hFLFFBQVEsQ0FBQyxZQUFZLEdBQUcsOEJBQThCLENBQ3BELE1BQU0sQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQ3JDLENBQUM7SUFDRixRQUFRLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyRSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsUUFBUSxDQUFDLG1CQUFtQixHQUFHLDhCQUE4QixDQUMzRCxNQUFNLENBQUMsOEJBQThCLENBQ3RDLENBQUM7SUFDRixPQUFPLHVCQUF1QixD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LENBQUMsU0FBUztRQUMzQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1FBQ2pELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtLQUN4QyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoZXhUb0J5dGVzIH0gZnJvbSAnQG5vYmxlL2hhc2hlcy91dGlscyc7XG5pbXBvcnQge1xuICBBc3NvY2lhdGlvblR4blJlc3BvbnNlLFxuICBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIENyZWF0ZVBvc3RBc3NvY2lhdGlvblJlcXVlc3QsXG4gIENyZWF0ZVVzZXJBc3NvY2lhdGlvblJlcXVlc3QsXG4gIERlbGV0ZUFzc29jaWF0aW9uUmVxdWVzdCxcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEsXG59IGZyb20gJy4uL2JhY2tlbmQtdHlwZXMnO1xuaW1wb3J0IHsgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkcyB9IGZyb20gJy4uL2RhdGEnO1xuaW1wb3J0IHtcbiAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzLFxuICBlbmNvZGVVVEY4VG9CeXRlcyxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0ZVBvc3RBc3NvY2lhdGlvbixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0ZVVzZXJBc3NvY2lhdGlvbixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YURlbGV0ZVBvc3RBc3NvY2lhdGlvbixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YURlbGV0ZVVzZXJBc3NvY2lhdGlvbixcbn0gZnJvbSAnLi4vaWRlbnRpdHknO1xuaW1wb3J0IHsgY29uc3RydWN0QmFsYW5jZU1vZGVsVHgsIGhhbmRsZVNpZ25BbmRTdWJtaXQgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4IH0gZnJvbSAnLi4vdHlwZXMnO1xuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvYXNzb2NpYXRpb25zLXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLXVzZXItYXNzb2NpYXRpb25cbiAqL1xuXG5leHBvcnQgdHlwZSBDcmVhdGVVc2VyQXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgQ3JlYXRlVXNlckFzc29jaWF0aW9uUmVxdWVzdCxcbiAgICAgIHwgJ1RhcmdldFVzZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ1RyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ0Fzc29jaWF0aW9uVHlwZSdcbiAgICAgIHwgJ0Fzc29jaWF0aW9uVmFsdWUnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVVzZXJBc3NvY2lhdGlvbiA9IChcbiAgcGFyYW1zOiBDcmVhdGVVc2VyQXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxBc3NvY2lhdGlvblR4blJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3VzZXItYXNzb2NpYXRpb25zL2NyZWF0ZScsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdENyZWF0ZVVzZXJBc3NvY2lhdGlvblRyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RDcmVhdGVVc2VyQXNzb2NpYXRpb25UcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBDcmVhdGVVc2VyQXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRlVXNlckFzc29jaWF0aW9uKCk7XG4gIG1ldGFkYXRhLmFwcFB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgfHwgJydcbiAgKTtcbiAgbWV0YWRhdGEuYXNzb2NpYXRpb25UeXBlID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFzc29jaWF0aW9uVHlwZSk7XG4gIG1ldGFkYXRhLmFzc29jaWF0aW9uVmFsdWUgPSBlbmNvZGVVVEY4VG9CeXRlcyhwYXJhbXMuQXNzb2NpYXRpb25WYWx1ZSk7XG4gIG1ldGFkYXRhLnRhcmdldFVzZXJQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLlRhcmdldFVzZXJQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlRyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBtZXRhZGF0YSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2Fzc29jaWF0aW9ucy10cmFuc2FjdGlvbnMtYXBpI2RlbGV0ZS11c2VyLWFzc29jaWF0aW9uXG4gKi9cblxuZXhwb3J0IHR5cGUgRGVsZXRlVXNlckFzc29jaWF0aW9uUmVxdWVzdFBhcmFtcyA9XG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gICAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICAgIERlbGV0ZUFzc29jaWF0aW9uUmVxdWVzdCxcbiAgICAgICdUcmFuc2FjdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ0Fzc29jaWF0aW9uSUQnXG4gICAgPlxuICA+O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlckFzc29jaWF0aW9uID0gKFxuICBwYXJhbXM6IERlbGV0ZVVzZXJBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PEFzc29jaWF0aW9uVHhuUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvdXNlci1hc3NvY2lhdGlvbnMvZGVsZXRlJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0RGVsZXRlVXNlckFzc29jaWF0aW9uVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdERlbGV0ZVVzZXJBc3NvY2lhdGlvblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IERlbGV0ZVVzZXJBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFEZWxldGVVc2VyQXNzb2NpYXRpb24oKTtcbiAgbWV0YWRhdGEuYXNzb2NpYXRpb25JRCA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5Bc3NvY2lhdGlvbklEKTtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5UcmFuc2FjdG9yUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgbWV0YWRhdGEsXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9hc3NvY2lhdGlvbnMtdHJhbnNhY3Rpb25zLWFwaSNjcmVhdGUtcG9zdC1hc3NvY2lhdGlvblxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVQb3N0QXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgQ3JlYXRlUG9zdEFzc29jaWF0aW9uUmVxdWVzdCxcbiAgICAgIHwgJ1Bvc3RIYXNoSGV4J1xuICAgICAgfCAnVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQXNzb2NpYXRpb25UeXBlJ1xuICAgICAgfCAnQXNzb2NpYXRpb25WYWx1ZSdcbiAgICA+XG4gID47XG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEFzc29jaWF0aW9uID0gKFxuICBwYXJhbXM6IENyZWF0ZVBvc3RBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PEFzc29jaWF0aW9uVHhuUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvcG9zdC1hc3NvY2lhdGlvbnMvY3JlYXRlJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0Q3JlYXRlUG9zdEFzc29jaWF0aW9uVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdENyZWF0ZVBvc3RBc3NvY2lhdGlvblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IENyZWF0ZVBvc3RBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdGVQb3N0QXNzb2NpYXRpb24oKTtcbiAgbWV0YWRhdGEuYXBwUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5BcHBQdWJsaWNLZXlCYXNlNThDaGVjayB8fCAnJ1xuICApO1xuICBtZXRhZGF0YS5hc3NvY2lhdGlvblR5cGUgPSBlbmNvZGVVVEY4VG9CeXRlcyhwYXJhbXMuQXNzb2NpYXRpb25UeXBlKTtcbiAgbWV0YWRhdGEuYXNzb2NpYXRpb25WYWx1ZSA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5Bc3NvY2lhdGlvblZhbHVlKTtcbiAgbWV0YWRhdGEucG9zdEhhc2ggPSBoZXhUb0J5dGVzKHBhcmFtcy5Qb3N0SGFzaEhleCk7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIG1ldGFkYXRhLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvYXNzb2NpYXRpb25zLXRyYW5zYWN0aW9ucy1hcGkjZGVsZXRlLXBvc3QtYXNzb2NpYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgRGVsZXRlUG9zdEFzc29jaWF0aW9uUmVxdWVzdFBhcmFtcyA9XG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gICAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICAgIERlbGV0ZUFzc29jaWF0aW9uUmVxdWVzdCxcbiAgICAgICdUcmFuc2FjdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ0Fzc29jaWF0aW9uSUQnXG4gICAgPlxuICA+O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUG9zdEFzc29jaWF0aW9uID0gKFxuICBwYXJhbXM6IERlbGV0ZVBvc3RBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PEFzc29jaWF0aW9uVHhuUmVzcG9uc2U+PiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvcG9zdC1hc3NvY2lhdGlvbnMvZGVsZXRlJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0RGVsZXRlUG9zdEFzc29jaWF0aW9uVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdERlbGV0ZVBvc3RBc3NvY2lhdGlvblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IERlbGV0ZVBvc3RBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFEZWxldGVQb3N0QXNzb2NpYXRpb24oKTtcbiAgbWV0YWRhdGEuYXNzb2NpYXRpb25JRCA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5Bc3NvY2lhdGlvbklEKTtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5UcmFuc2FjdG9yUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgbWV0YWRhdGEsXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzb2NpYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9ucy9hc3NvY2lhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBV2pELE9BQU8sRUFDTCx3Q0FBd0MsRUFDeEMsd0NBQXdDLEVBQ3hDLHdDQUF3QyxFQUN4Qyx3Q0FBd0MsRUFDeEMsOEJBQThCLEVBQzlCLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBQ25CLE1BQU0sYUFBYSxDQUFDO0FBaUJyQixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxNQUEwQyxFQUMxQyxPQUEwQixFQUNrQyxFQUFFOztJQUM5RCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FDakMsTUFBTSxDQUFDLDhCQUE4QixFQUNyQyxrQ0FBa0MsQ0FBQyxNQUFNLENBQUMsRUFDMUM7UUFDRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FDRixDQUFDO0lBRUYsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxnQkFBZ0IsTUFBSyxLQUFLLEVBQUU7UUFDdkMsTUFBTSxpQkFBaUIsQ0FBQztZQUN0QixlQUFlLEVBQ2IsU0FBUyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ2pFLG1CQUFtQixFQUFFO2dCQUNuQjtvQkFDRSxnQkFBZ0IsRUFBRSxNQUFNO29CQUN4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dkQsTUFBMEMsRUFDRCxFQUFFO0lBQzNDLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQyw4QkFBOEIsRUFDckMsa0NBQWtDLENBQUMsTUFBTSxDQUFDLEVBQzFDO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQWFGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQ25DLE1BQTBDLEVBQzFDLE9BQXdCLEVBQ29DLEVBQUU7SUFDOUQsT0FBTyxtQkFBbUIsQ0FBQyxpQ0FBaUMsRUFBRSxNQUFNLGtDQUMvRCxPQUFPLEtBQ1Ysb0JBQW9CLEVBQUUseUNBQXlDLElBQy9ELENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5Q0FBeUMsR0FBRyxDQUN2RCxNQUEwQyxFQUNELEVBQUU7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSx3Q0FBd0MsRUFBRSxDQUFDO0lBQ2hFLFFBQVEsQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQyw4QkFBOEIsRUFDckMsUUFBUSxFQUNSO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhleFRvQnl0ZXMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7XG4gIEFzc29jaWF0aW9uVHhuUmVzcG9uc2UsXG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgQ3JlYXRlUG9zdEFzc29jaWF0aW9uUmVxdWVzdCxcbiAgQ3JlYXRlVXNlckFzc29jaWF0aW9uUmVxdWVzdCxcbiAgRGVsZXRlQXNzb2NpYXRpb25SZXF1ZXN0LFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzIH0gZnJvbSAnLi4vZGF0YSc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRlUG9zdEFzc29jaWF0aW9uLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRlVXNlckFzc29jaWF0aW9uLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhRGVsZXRlUG9zdEFzc29jaWF0aW9uLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhRGVsZXRlVXNlckFzc29jaWF0aW9uLFxuICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMsXG4gIGVuY29kZVVURjhUb0J5dGVzLFxufSBmcm9tICcuLi9pZGVudGl0eSc7XG5pbXBvcnQgeyBndWFyZFR4UGVybWlzc2lvbiB9IGZyb20gJy4uL2lkZW50aXR5L3Blcm1pc3Npb25zLXV0aWxzJztcbmltcG9ydCB7XG4gIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4LFxuICBnZXRUeFdpdGhGZWVOYW5vcyxcbiAgaGFuZGxlU2lnbkFuZFN1Ym1pdCxcbiAgc3VtVHJhbnNhY3Rpb25GZWVzLFxufSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4LCBUeFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9hc3NvY2lhdGlvbnMtdHJhbnNhY3Rpb25zLWFwaSNjcmVhdGUtdXNlci1hc3NvY2lhdGlvblxuICovXG5cbmV4cG9ydCB0eXBlIENyZWF0ZVVzZXJBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBDcmVhdGVVc2VyQXNzb2NpYXRpb25SZXF1ZXN0LFxuICAgICAgfCAnVGFyZ2V0VXNlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQXNzb2NpYXRpb25UeXBlJ1xuICAgICAgfCAnQXNzb2NpYXRpb25WYWx1ZSdcbiAgICA+XG4gID47XG5leHBvcnQgY29uc3QgY3JlYXRlVXNlckFzc29jaWF0aW9uID0gYXN5bmMgKFxuICBwYXJhbXM6IENyZWF0ZVVzZXJBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8QXNzb2NpYXRpb25UeG5SZXNwb25zZT4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlRyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZENyZWF0ZVVzZXJBc3NvY2lhdGlvbk1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgKyBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBBc3NvY2lhdGlvbkxpbWl0TWFwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBc3NvY2lhdGlvbkNsYXNzOiAnVXNlcicsXG4gICAgICAgICAgQXNzb2NpYXRpb25UeXBlOiBwYXJhbXMuQXNzb2NpYXRpb25UeXBlLFxuICAgICAgICAgIEFwcFNjb3BlVHlwZTogcGFyYW1zLkFwcFB1YmxpY0tleUJhc2U1OENoZWNrID8gJ1Njb3BlZCcgOiAnQW55JyxcbiAgICAgICAgICBBcHBQdWJsaWNLZXlCYXNlNThDaGVjazogcGFyYW1zLkFwcFB1YmxpY0tleUJhc2U1OENoZWNrID8/ICcnLFxuICAgICAgICAgIEFzc29jaWF0aW9uT3BlcmF0aW9uOiAnQ3JlYXRlJyxcbiAgICAgICAgICBPcENvdW50OiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBhIGJpdCB3ZWlyZCwgYnV0IHdlIGRvbid0IGhhdmUgQXBwUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgICAgICAgLy8gb3IgQXNzb2NpYXRpb25UeXBlIGluIHRoZSBkZWxldGUgcGFyYW1zLCBzbyB3ZSBqdXN0IGFzayBmb3IgZGVsZXRlXG4gICAgICAgIC8vIHBlcm1pc3Npb24gYXQgdGhlIHNhbWUgdGltZSB0aGUgYXNzb2NpYXRpb24gaXMgY3JlYXRlZC5cbiAgICAgICAge1xuICAgICAgICAgIEFzc29jaWF0aW9uQ2xhc3M6ICdVc2VyJyxcbiAgICAgICAgICBBc3NvY2lhdGlvblR5cGU6IHBhcmFtcy5Bc3NvY2lhdGlvblR5cGUsXG4gICAgICAgICAgQXBwU2NvcGVUeXBlOiBwYXJhbXMuQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgPyAnU2NvcGVkJyA6ICdBbnknLFxuICAgICAgICAgIEFwcFB1YmxpY0tleUJhc2U1OENoZWNrOiBwYXJhbXMuQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgPz8gJycsXG4gICAgICAgICAgQXNzb2NpYXRpb25PcGVyYXRpb246ICdEZWxldGUnLFxuICAgICAgICAgIE9wQ291bnQ6IG9wdGlvbnM/LnR4TGltaXRDb3VudCA/PyAxLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvdXNlci1hc3NvY2lhdGlvbnMvY3JlYXRlJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0Q3JlYXRlVXNlckFzc29jaWF0aW9uVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuY29uc3QgYnVpbGRDcmVhdGVVc2VyQXNzb2NpYXRpb25NZXRhZGF0YSA9IChcbiAgcGFyYW1zOiBDcmVhdGVVc2VyQXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zXG4pID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0ZVVzZXJBc3NvY2lhdGlvbigpO1xuICBtZXRhZGF0YS5hcHBQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkFwcFB1YmxpY0tleUJhc2U1OENoZWNrIHx8ICcnXG4gICk7XG4gIG1ldGFkYXRhLmFzc29jaWF0aW9uVHlwZSA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5Bc3NvY2lhdGlvblR5cGUpO1xuICBtZXRhZGF0YS5hc3NvY2lhdGlvblZhbHVlID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFzc29jaWF0aW9uVmFsdWUpO1xuICBtZXRhZGF0YS50YXJnZXRVc2VyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5UYXJnZXRVc2VyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0Q3JlYXRlVXNlckFzc29jaWF0aW9uVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogQ3JlYXRlVXNlckFzc29jaWF0aW9uUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5UcmFuc2FjdG9yUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRDcmVhdGVVc2VyQXNzb2NpYXRpb25NZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvYXNzb2NpYXRpb25zLXRyYW5zYWN0aW9ucy1hcGkjZGVsZXRlLXVzZXItYXNzb2NpYXRpb25cbiAqL1xuXG5leHBvcnQgdHlwZSBEZWxldGVVc2VyQXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgRGVsZXRlQXNzb2NpYXRpb25SZXF1ZXN0LFxuICAgICAgJ1RyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjaycgfCAnQXNzb2NpYXRpb25JRCdcbiAgICA+XG4gID47XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyQXNzb2NpYXRpb24gPSBhc3luYyAoXG4gIHBhcmFtczogRGVsZXRlVXNlckFzc29jaWF0aW9uUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxBc3NvY2lhdGlvblR4blJlc3BvbnNlPj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3VzZXItYXNzb2NpYXRpb25zL2RlbGV0ZScsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdERlbGV0ZVVzZXJBc3NvY2lhdGlvblRyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkRGVsZXRlVXNlckFzc29jaWF0aW9uTWV0YWRhdGEgPSAoXG4gIHBhcmFtczogRGVsZXRlUG9zdEFzc29jaWF0aW9uUmVxdWVzdFBhcmFtc1xuKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFEZWxldGVVc2VyQXNzb2NpYXRpb24oKTtcbiAgbWV0YWRhdGEuYXNzb2NpYXRpb25JRCA9IGVuY29kZVVURjhUb0J5dGVzKHBhcmFtcy5Bc3NvY2lhdGlvbklEKTtcbiAgcmV0dXJuIG1ldGFkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdERlbGV0ZVVzZXJBc3NvY2lhdGlvblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IERlbGV0ZVVzZXJBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkRGVsZXRlVXNlckFzc29jaWF0aW9uTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2Fzc29jaWF0aW9ucy10cmFuc2FjdGlvbnMtYXBpI2NyZWF0ZS1wb3N0LWFzc29jaWF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVBvc3RBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBDcmVhdGVQb3N0QXNzb2NpYXRpb25SZXF1ZXN0LFxuICAgICAgfCAnUG9zdEhhc2hIZXgnXG4gICAgICB8ICdUcmFuc2FjdG9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdBc3NvY2lhdGlvblR5cGUnXG4gICAgICB8ICdBc3NvY2lhdGlvblZhbHVlJ1xuICAgID5cbiAgPjtcbmV4cG9ydCBjb25zdCBjcmVhdGVQb3N0QXNzb2NpYXRpb24gPSBhc3luYyAoXG4gIHBhcmFtczogQ3JlYXRlUG9zdEFzc29jaWF0aW9uUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxBc3NvY2lhdGlvblR4blJlc3BvbnNlPj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuVHJhbnNhY3RvclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQ3JlYXRlUG9zdEFzc29jaWF0aW9uTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIEFzc29jaWF0aW9uTGltaXRNYXA6IFtcbiAgICAgICAge1xuICAgICAgICAgIEFzc29jaWF0aW9uQ2xhc3M6ICdQb3N0JyxcbiAgICAgICAgICBBc3NvY2lhdGlvblR5cGU6IHBhcmFtcy5Bc3NvY2lhdGlvblR5cGUsXG4gICAgICAgICAgQXBwU2NvcGVUeXBlOiBwYXJhbXMuQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgPyAnU2NvcGVkJyA6ICdBbnknLFxuICAgICAgICAgIEFwcFB1YmxpY0tleUJhc2U1OENoZWNrOiBwYXJhbXMuQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgPz8gJycsXG4gICAgICAgICAgQXNzb2NpYXRpb25PcGVyYXRpb246ICdDcmVhdGUnLFxuICAgICAgICAgIE9wQ291bnQ6IG9wdGlvbnM/LnR4TGltaXRDb3VudCA/PyAxLFxuICAgICAgICB9LFxuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGEgYml0IHdlaXJkLCBidXQgd2UgZG9uJ3QgaGF2ZSBBcHBQdWJsaWNLZXlCYXNlNThDaGVja1xuICAgICAgICAvLyBvciBBc3NvY2lhdGlvblR5cGUgaW4gdGhlIGRlbGV0ZSBwYXJhbXMsIHNvIHdlIGp1c3QgYXNrIGZvciBkZWxldGVcbiAgICAgICAgLy8gcGVybWlzc2lvbiBhdCB0aGUgc2FtZSB0aW1lIHRoZSBhc3NvY2lhdGlvbiBpcyBjcmVhdGVkLlxuICAgICAgICB7XG4gICAgICAgICAgQXNzb2NpYXRpb25DbGFzczogJ1Bvc3QnLFxuICAgICAgICAgIEFzc29jaWF0aW9uVHlwZTogcGFyYW1zLkFzc29jaWF0aW9uVHlwZSxcbiAgICAgICAgICBBcHBTY29wZVR5cGU6IHBhcmFtcy5BcHBQdWJsaWNLZXlCYXNlNThDaGVjayA/ICdTY29wZWQnIDogJ0FueScsXG4gICAgICAgICAgQXBwUHVibGljS2V5QmFzZTU4Q2hlY2s6IHBhcmFtcy5BcHBQdWJsaWNLZXlCYXNlNThDaGVjayA/PyAnJyxcbiAgICAgICAgICBBc3NvY2lhdGlvbk9wZXJhdGlvbjogJ0RlbGV0ZScsXG4gICAgICAgICAgT3BDb3VudDogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9wb3N0LWFzc29jaWF0aW9ucy9jcmVhdGUnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RDcmVhdGVQb3N0QXNzb2NpYXRpb25UcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5jb25zdCBidWlsZENyZWF0ZVBvc3RBc3NvY2lhdGlvbk1ldGFkYXRhID0gKFxuICBwYXJhbXM6IENyZWF0ZVBvc3RBc3NvY2lhdGlvblJlcXVlc3RQYXJhbXNcbikgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRlUG9zdEFzc29jaWF0aW9uKCk7XG4gIG1ldGFkYXRhLmFwcFB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQXBwUHVibGljS2V5QmFzZTU4Q2hlY2sgfHwgJydcbiAgKTtcbiAgbWV0YWRhdGEuYXNzb2NpYXRpb25UeXBlID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFzc29jaWF0aW9uVHlwZSk7XG4gIG1ldGFkYXRhLmFzc29jaWF0aW9uVmFsdWUgPSBlbmNvZGVVVEY4VG9CeXRlcyhwYXJhbXMuQXNzb2NpYXRpb25WYWx1ZSk7XG4gIG1ldGFkYXRhLnBvc3RIYXNoID0gaGV4VG9CeXRlcyhwYXJhbXMuUG9zdEhhc2hIZXgpO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RDcmVhdGVQb3N0QXNzb2NpYXRpb25UcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBDcmVhdGVQb3N0QXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlRyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZENyZWF0ZVBvc3RBc3NvY2lhdGlvbk1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9hc3NvY2lhdGlvbnMtdHJhbnNhY3Rpb25zLWFwaSNkZWxldGUtcG9zdC1hc3NvY2lhdGlvblxuICovXG5leHBvcnQgdHlwZSBEZWxldGVQb3N0QXNzb2NpYXRpb25SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgRGVsZXRlQXNzb2NpYXRpb25SZXF1ZXN0LFxuICAgICAgJ1RyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjaycgfCAnQXNzb2NpYXRpb25JRCdcbiAgICA+XG4gID47XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQb3N0QXNzb2NpYXRpb24gPSAoXG4gIHBhcmFtczogRGVsZXRlUG9zdEFzc29jaWF0aW9uUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8QXNzb2NpYXRpb25UeG5SZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9wb3N0LWFzc29jaWF0aW9ucy9kZWxldGUnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3REZWxldGVQb3N0QXNzb2NpYXRpb25UcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0RGVsZXRlUG9zdEFzc29jaWF0aW9uVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogRGVsZXRlUG9zdEFzc29jaWF0aW9uUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YURlbGV0ZVBvc3RBc3NvY2lhdGlvbigpO1xuICBtZXRhZGF0YS5hc3NvY2lhdGlvbklEID0gZW5jb2RlVVRGOFRvQnl0ZXMocGFyYW1zLkFzc29jaWF0aW9uSUQpO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlRyYW5zYWN0b3JQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBtZXRhZGF0YSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG4iXX0=
import { BuyOrSellCreatorCoinRequest, BuyOrSellCreatorCoinResponse, ConstructedTransactionResponse, RequestOptions, SendDeSoRequest, SendDeSoResponse, TransferCreatorCoinRequest, TransferCreatorCoinResponse, TxRequestWithOptionalFeesAndExtraData } from '../backend-types';
import { PartialWithRequiredFields } from '../data';
import { ConstructedAndSubmittedTx } from '../types';
import { ConstructedAndSubmittedTx, TxRequestOptions } from '../types';
/**
* https://docs.deso.org/deso-backend/construct-transactions/financial-transactions-api#send-deso
*/
export declare const sendDeso: (params: TxRequestWithOptionalFeesAndExtraData<SendDeSoRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<SendDeSoResponse | ConstructedTransactionResponse>>;
export declare const sendDeso: (params: TxRequestWithOptionalFeesAndExtraData<SendDeSoRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SendDeSoResponse | ConstructedTransactionResponse>>;
export declare const constructSendDeSoTransaction: (params: TxRequestWithOptionalFeesAndExtraData<SendDeSoRequest>) => Promise<ConstructedTransactionResponse>;

@@ -23,3 +23,3 @@ /**

export type TransferCreatorCoinRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<TransferCreatorCoinRequest, 'SenderPublicKeyBase58Check' | 'CreatorPublicKeyBase58Check' | 'ReceiverUsernameOrPublicKeyBase58Check' | 'CreatorCoinToTransferNanos'>>;
export declare const transferCreatorCoin: (params: TransferCreatorCoinRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<TransferCreatorCoinResponse>>;
export declare const constructTransferCreatorCoinTransaction: (params: TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<TransferCreatorCoinRequest, 'SenderPublicKeyBase58Check' | 'CreatorPublicKeyBase58Check' | 'ReceiverUsernameOrPublicKeyBase58Check' | 'CreatorCoinToTransferNanos'>>) => Promise<ConstructedTransactionResponse>;
export declare const transferCreatorCoin: (params: TransferCreatorCoinRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<TransferCreatorCoinResponse>>;
export declare const constructTransferCreatorCoinTransaction: (params: TransferCreatorCoinRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -1,15 +0,60 @@

import { bs58PublicKeyToCompressedBytes, TransactionMetadataBasicTransfer, TransactionMetadataCreatorCoinTransfer, TransactionOutput, } from '../identity';
import { constructBalanceModelTx, handleSignAndSubmit, isMaybeDeSoPublicKey, } from '../internal';
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { TransactionMetadataBasicTransfer, TransactionMetadataCreatorCoinTransfer, TransactionOutput, bs58PublicKeyToCompressedBytes, identity, } from '../identity';
import { guardTxPermission } from '../identity/permissions-utils';
import { constructBalanceModelTx, getTxWithFeeNanos, handleSignAndSubmit, isMaybeDeSoPublicKey, sumTransactionFees, } from '../internal';
/**
* https://docs.deso.org/deso-backend/construct-transactions/financial-transactions-api#send-deso
*/
export const sendDeso = (params, options) => {
export const sendDeso = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b, _c;
const txWithFee = getTxWithFeeNanos(params.SenderPublicKeyBase58Check, new TransactionMetadataBasicTransfer(), {
Outputs: buildSendDeSoOutputs(Object.assign(Object.assign({}, params), {
// NOTE: this is a bit of an odd hack, but bc we are only using this to
// estimate the fee, we can overwrite the recipient to be the sender to
// ensure the value is a valid public key that can be converted to
// bytes. The reason we cannot make an api call to get the true public
// key is because it could cause the derived key re-approval popup to
// get blocked by browser popup blockers.
RecipientPublicKeyOrUsername: params.SenderPublicKeyBase58Check })),
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: params.AmountNanos +
txWithFee.feeNanos +
sumTransactionFees(params.TransactionFees),
TransactionCountLimitMap: {
BASIC_TRANSFER: (_c = (_a = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _a !== void 0 ? _a : (_b = identity.transactionSpendingLimitOptions.TransactionCountLimitMap) === null || _b === void 0 ? void 0 : _b.BASIC_TRANSFER) !== null && _c !== void 0 ? _c : 1,
},
});
}
return handleSignAndSubmit('api/v0/send-deso', params, Object.assign(Object.assign({}, options), { constructionFunction: constructSendDeSoTransaction }));
});
const buildSendDeSoOutputs = (params) => {
const transactionOutput = new TransactionOutput();
transactionOutput.amountNanos = params.AmountNanos;
transactionOutput.publicKey = bs58PublicKeyToCompressedBytes(
// FIXME: this will throw an error if the recipient is a username. We need
// to either fetch the public key and overwrite the username with it or
// throw a more helpful error to consumers explaining that we require the
// public key instead of the username.
params.RecipientPublicKeyOrUsername);
return [transactionOutput];
};
export const constructSendDeSoTransaction = (params) => {
const transactionOutput = new TransactionOutput();
transactionOutput.amountNanos = params.AmountNanos;
transactionOutput.publicKey = bs58PublicKeyToCompressedBytes(params.RecipientPublicKeyOrUsername);
if (!isMaybeDeSoPublicKey(params.RecipientPublicKeyOrUsername)) {
throw new Error('must provide public key, not user name for local construction');
}
return constructBalanceModelTx(params.SenderPublicKeyBase58Check, new TransactionMetadataBasicTransfer(), {
Outputs: [transactionOutput],
Outputs: buildSendDeSoOutputs(params),
ExtraData: params.ExtraData,

@@ -21,9 +66,34 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

export const buyCreatorCoin = (params, options) => {
// TODO: Add tx permission check once local tx construction is implemented.
return handleSignAndSubmit('api/v0/buy-or-sell-creator-coin', Object.assign(Object.assign({}, params), { OperationType: 'buy' }), options);
};
export const sellCreatorCoin = (params, options) => {
// TODO: Add tx permission check once local tx construction is implemented.
return handleSignAndSubmit('api/v0/buy-or-sell-creator-coin', Object.assign(Object.assign({}, params), { OperationType: 'sell' }), options);
};
export const transferCreatorCoin = (params, options) => {
export const transferCreatorCoin = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _d;
const txWithFee = getTxWithFeeNanos(params.SenderPublicKeyBase58Check, buildTransferCreatorCoinMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
CreatorCoinOperationLimitMap: {
[params.CreatorPublicKeyBase58Check]: {
transfer: (_d = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _d !== void 0 ? _d : 1,
},
},
});
}
return handleSignAndSubmit('api/v0/transfer-creator-coin', params, Object.assign(Object.assign({}, options), { constructionFunction: constructTransferCreatorCoinTransaction }));
});
const buildTransferCreatorCoinMetadata = (params) => {
const metadata = new TransactionMetadataCreatorCoinTransfer();
metadata.creatorCoinToTransferNanos = params.CreatorCoinToTransferNanos;
metadata.profilePublicKey = bs58PublicKeyToCompressedBytes(params.CreatorPublicKeyBase58Check);
metadata.receiverPublicKey = bs58PublicKeyToCompressedBytes(params.ReceiverUsernameOrPublicKeyBase58Check);
return metadata;
};

@@ -34,7 +104,3 @@ export const constructTransferCreatorCoinTransaction = (params) => {

}
const metadata = new TransactionMetadataCreatorCoinTransfer();
metadata.creatorCoinToTransferNanos = params.CreatorCoinToTransferNanos;
metadata.profilePublicKey = bs58PublicKeyToCompressedBytes(params.CreatorPublicKeyBase58Check);
metadata.receiverPublicKey = bs58PublicKeyToCompressedBytes(params.ReceiverUsernameOrPublicKeyBase58Check);
return constructBalanceModelTx(params.SenderPublicKeyBase58Check, metadata, {
return constructBalanceModelTx(params.SenderPublicKeyBase58Check, buildTransferCreatorCoinMetadata(params), {
ExtraData: params.ExtraData,

@@ -45,2 +111,2 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9ucy9maW5hbmNpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsT0FBTyxFQUNMLDhCQUE4QixFQUM5QixnQ0FBZ0MsRUFDaEMsc0NBQXNDLEVBQ3RDLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixvQkFBb0IsR0FDckIsTUFBTSxhQUFhLENBQUM7QUFHckI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsTUFBOEQsRUFDOUQsT0FBd0IsRUFHeEIsRUFBRTtJQUNGLE9BQU8sbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxrQ0FDaEQsT0FBTyxLQUNWLG9CQUFvQixFQUFFLDRCQUE0QixJQUNsRCxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FDMUMsTUFBOEQsRUFDckIsRUFBRTtJQUMzQyxNQUFNLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUNsRCxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNuRCxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsOEJBQThCLENBQzFELE1BQU0sQ0FBQyw0QkFBNEIsQ0FDcEMsQ0FBQztJQUNGLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQywwQkFBMEIsRUFDakMsSUFBSSxnQ0FBZ0MsRUFBRSxFQUN0QztRQUNFLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO1FBQzVCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1FBQ2pELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtLQUN4QyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFrQkYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQzVCLE1BQW1DLEVBQ25DLE9BQXdCLEVBS3hCLEVBQUU7SUFDRixPQUFPLG1CQUFtQixDQUN4QixpQ0FBaUMsa0NBRTVCLE1BQU0sS0FDVCxhQUFhLEVBQUUsS0FBSyxLQUV0QixPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQWtCRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsTUFBb0MsRUFDcEMsT0FBd0IsRUFLeEIsRUFBRTtJQUNGLE9BQU8sbUJBQW1CLENBQ3hCLGlDQUFpQyxrQ0FFNUIsTUFBTSxLQUNULGFBQWEsRUFBRSxNQUFNLEtBRXZCLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBZUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsTUFBd0MsRUFDeEMsT0FBd0IsRUFDeUMsRUFBRTtJQUNuRSxPQUFPLG1CQUFtQixDQUFDLDhCQUE4QixFQUFFLE1BQU0sa0NBQzVELE9BQU8sS0FDVixvQkFBb0IsRUFBRSx1Q0FBdUMsSUFDN0QsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLENBQ3JELE1BUUMsRUFDd0MsRUFBRTtJQUMzQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLHNDQUFzQyxDQUFDLEVBQUU7UUFDeEUsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQiwrREFBK0QsQ0FDaEUsQ0FBQztLQUNIO0lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxzQ0FBc0MsRUFBRSxDQUFDO0lBQzlELFFBQVEsQ0FBQywwQkFBMEIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUM7SUFDeEUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLDhCQUE4QixDQUN4RCxNQUFNLENBQUMsMkJBQTJCLENBQ25DLENBQUM7SUFDRixRQUFRLENBQUMsaUJBQWlCLEdBQUcsOEJBQThCLENBQ3pELE1BQU0sQ0FBQyxzQ0FBc0MsQ0FDOUMsQ0FBQztJQUNGLE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLDBCQUEwQixFQUFFLFFBQVEsRUFBRTtRQUMxRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQnV5T3JTZWxsQ3JlYXRvckNvaW5SZXF1ZXN0LFxuICBCdXlPclNlbGxDcmVhdG9yQ29pblJlc3BvbnNlLFxuICBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBTZW5kRGVTb1JlcXVlc3QsXG4gIFNlbmREZVNvUmVzcG9uc2UsXG4gIFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0LFxuICBUcmFuc2ZlckNyZWF0b3JDb2luUmVzcG9uc2UsXG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEsXG59IGZyb20gJy4uL2JhY2tlbmQtdHlwZXMnO1xuaW1wb3J0IHsgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkcyB9IGZyb20gJy4uL2RhdGEnO1xuaW1wb3J0IHtcbiAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhQmFzaWNUcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0b3JDb2luVHJhbnNmZXIsXG4gIFRyYW5zYWN0aW9uT3V0cHV0LFxufSBmcm9tICcuLi9pZGVudGl0eSc7XG5pbXBvcnQge1xuICBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeCxcbiAgaGFuZGxlU2lnbkFuZFN1Ym1pdCxcbiAgaXNNYXliZURlU29QdWJsaWNLZXksXG59IGZyb20gJy4uL2ludGVybmFsJztcbmltcG9ydCB7IENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHggfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2ZpbmFuY2lhbC10cmFuc2FjdGlvbnMtYXBpI3NlbmQtZGVzb1xuICovXG5leHBvcnQgY29uc3Qgc2VuZERlc28gPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxTZW5kRGVTb1JlcXVlc3Q+LFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8U2VuZERlU29SZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT5cbj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3NlbmQtZGVzbycsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdFNlbmREZVNvVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFNlbmREZVNvVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxTZW5kRGVTb1JlcXVlc3Q+XG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dCA9IG5ldyBUcmFuc2FjdGlvbk91dHB1dCgpO1xuICB0cmFuc2FjdGlvbk91dHB1dC5hbW91bnROYW5vcyA9IHBhcmFtcy5BbW91bnROYW5vcztcbiAgdHJhbnNhY3Rpb25PdXRwdXQucHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5SZWNpcGllbnRQdWJsaWNLZXlPclVzZXJuYW1lXG4gICk7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuU2VuZGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFCYXNpY1RyYW5zZmVyKCksXG4gICAge1xuICAgICAgT3V0cHV0czogW3RyYW5zYWN0aW9uT3V0cHV0XSxcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLy8gVE9ETzogQlVZIGNyZWF0b3IgY29pbnMgaXMgaGFyZC4gTmVlZCB0byBtb3ZlIHNvbWVcbi8vIGJpZyBmbG9hdCBtYXRoIGludG8ganMuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9maW5hbmNpYWwtdHJhbnNhY3Rpb25zLWFwaSNidXktb3Itc2VsbC1jcmVhdG9yLWNvaW5cbiAqL1xuZXhwb3J0IHR5cGUgQnV5Q3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zID0gVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBPbWl0PFxuICAgICAgQnV5T3JTZWxsQ3JlYXRvckNvaW5SZXF1ZXN0LFxuICAgICAgJ0NyZWF0b3JDb2luVG9TZWxsTmFub3MnIHwgJ09wZXJhdGlvblR5cGUnXG4gICAgPixcbiAgICB8ICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ0RlU29Ub1NlbGxOYW5vcydcbiAgPlxuPjtcbmV4cG9ydCBjb25zdCBidXlDcmVhdG9yQ29pbiA9IChcbiAgcGFyYW1zOiBCdXlDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxcbiAgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxcbiAgICBCdXlPclNlbGxDcmVhdG9yQ29pblJlc3BvbnNlIHwgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlXG4gID5cbj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2J1eS1vci1zZWxsLWNyZWF0b3ItY29pbicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgT3BlcmF0aW9uVHlwZTogJ2J1eScsXG4gICAgfSxcbiAgICBvcHRpb25zXG4gICk7XG59O1xuXG4vLyBUT0RPOiBTRUxMIGNyZWF0b3IgY29pbnMgaXMgaGFyZC4gTmVlZCB0byBtb3ZlIHNvbWVcbi8vIGJpZyBmbG9hdCBtYXRoIGludG8ganMuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9maW5hbmNpYWwtdHJhbnNhY3Rpb25zLWFwaSNidXktb3Itc2VsbC1jcmVhdG9yLWNvaW5cbiAqL1xuXG5leHBvcnQgdHlwZSBTZWxsQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgT21pdDxCdXlPclNlbGxDcmVhdG9yQ29pblJlcXVlc3QsICdEZXNvVG9TZWxsTmFub3MnIHwgJ09wZXJhdGlvblR5cGUnPixcbiAgICAgIHwgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ0NyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ0NyZWF0b3JDb2luVG9TZWxsTmFub3MnXG4gICAgPlxuICA+O1xuXG5leHBvcnQgY29uc3Qgc2VsbENyZWF0b3JDb2luID0gKFxuICBwYXJhbXM6IFNlbGxDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxcbiAgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxcbiAgICBCdXlPclNlbGxDcmVhdG9yQ29pblJlc3BvbnNlIHwgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlXG4gID5cbj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2J1eS1vci1zZWxsLWNyZWF0b3ItY29pbicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgT3BlcmF0aW9uVHlwZTogJ3NlbGwnLFxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZmluYW5jaWFsLXRyYW5zYWN0aW9ucy1hcGkjdHJhbnNmZXItY3JlYXRvci1jb2luXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3QsXG4gICAgICB8ICdTZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ0NyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ1JlY2VpdmVyVXNlcm5hbWVPclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvckNvaW5Ub1RyYW5zZmVyTmFub3MnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IHRyYW5zZmVyQ3JlYXRvckNvaW4gPSAoXG4gIHBhcmFtczogVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFRyYW5zZmVyQ3JlYXRvckNvaW5SZXNwb25zZT4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC90cmFuc2Zlci1jcmVhdG9yLWNvaW4nLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RUcmFuc2ZlckNyZWF0b3JDb2luVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFRyYW5zZmVyQ3JlYXRvckNvaW5UcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBUcmFuc2ZlckNyZWF0b3JDb2luUmVxdWVzdCxcbiAgICAgIHwgJ1NlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnUmVjZWl2ZXJVc2VybmFtZU9yUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgICB8ICdDcmVhdG9yQ29pblRvVHJhbnNmZXJOYW5vcydcbiAgICA+XG4gID5cbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGlmICghaXNNYXliZURlU29QdWJsaWNLZXkocGFyYW1zLlJlY2VpdmVyVXNlcm5hbWVPclB1YmxpY0tleUJhc2U1OENoZWNrKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICdtdXN0IHByb3ZpZGUgcHVibGljIGtleSwgbm90IHVzZXIgbmFtZSBmb3IgbG9jYWwgY29uc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0b3JDb2luVHJhbnNmZXIoKTtcbiAgbWV0YWRhdGEuY3JlYXRvckNvaW5Ub1RyYW5zZmVyTmFub3MgPSBwYXJhbXMuQ3JlYXRvckNvaW5Ub1RyYW5zZmVyTmFub3M7XG4gIG1ldGFkYXRhLnByb2ZpbGVQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5yZWNlaXZlclB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuUmVjZWl2ZXJVc2VybmFtZU9yUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KHBhcmFtcy5TZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9ucy9maW5hbmNpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUEsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyxzQ0FBc0MsRUFDdEMsaUJBQWlCLEVBQ2pCLDhCQUE4QixFQUM5QixRQUFRLEdBQ1QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFHckI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsTUFBOEQsRUFDOUQsT0FBMEIsRUFHMUIsRUFBRTs7SUFDRixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FDakMsTUFBTSxDQUFDLDBCQUEwQixFQUNqQyxJQUFJLGdDQUFnQyxFQUFFLEVBQ3RDO1FBQ0UsT0FBTyxFQUFFLG9CQUFvQixpQ0FDeEIsTUFBTTtZQUNULHVFQUF1RTtZQUN2RSx1RUFBdUU7WUFDdkUsa0VBQWtFO1lBQ2xFLHNFQUFzRTtZQUN0RSxxRUFBcUU7WUFDckUseUNBQXlDO1lBQ3pDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQywwQkFBMEIsSUFDL0Q7UUFDRixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FDRixDQUFDO0lBRUYsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxnQkFBZ0IsTUFBSyxLQUFLLEVBQUU7UUFDdkMsTUFBTSxpQkFBaUIsQ0FBQztZQUN0QixlQUFlLEVBQ2IsTUFB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QW9CO1FBQ2pELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtLQUN4QyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCdXlPclNlbGxDcmVhdG9yQ29pblJlcXVlc3QsXG4gIEJ1eU9yU2VsbENyZWF0b3JDb2luUmVzcG9uc2UsXG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFNlbmREZVNvUmVxdWVzdCxcbiAgU2VuZERlU29SZXNwb25zZSxcbiAgVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3QsXG4gIFRyYW5zZmVyQ3JlYXRvckNvaW5SZXNwb25zZSxcbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzIH0gZnJvbSAnLi4vZGF0YSc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbk1ldGFkYXRhQmFzaWNUcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0b3JDb2luVHJhbnNmZXIsXG4gIFRyYW5zYWN0aW9uT3V0cHV0LFxuICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMsXG4gIGlkZW50aXR5LFxufSBmcm9tICcuLi9pZGVudGl0eSc7XG5pbXBvcnQgeyBndWFyZFR4UGVybWlzc2lvbiB9IGZyb20gJy4uL2lkZW50aXR5L3Blcm1pc3Npb25zLXV0aWxzJztcbmltcG9ydCB7XG4gIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4LFxuICBnZXRUeFdpdGhGZWVOYW5vcyxcbiAgaGFuZGxlU2lnbkFuZFN1Ym1pdCxcbiAgaXNNYXliZURlU29QdWJsaWNLZXksXG4gIHN1bVRyYW5zYWN0aW9uRmVlcyxcbn0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeCwgVHhSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZmluYW5jaWFsLXRyYW5zYWN0aW9ucy1hcGkjc2VuZC1kZXNvXG4gKi9cbmV4cG9ydCBjb25zdCBzZW5kRGVzbyA9IGFzeW5jIChcbiAgcGFyYW1zOiBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFNlbmREZVNvUmVxdWVzdD4sXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFNlbmREZVNvUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+XG4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQmFzaWNUcmFuc2ZlcigpLFxuICAgIHtcbiAgICAgIE91dHB1dHM6IGJ1aWxkU2VuZERlU29PdXRwdXRzKHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGEgYml0IG9mIGFuIG9kZCBoYWNrLCBidXQgYmMgd2UgYXJlIG9ubHkgdXNpbmcgdGhpcyB0b1xuICAgICAgICAvLyBlc3RpbWF0ZSB0aGUgZmVlLCB3ZSBjYW4gb3ZlcndyaXRlIHRoZSByZWNpcGllbnQgdG8gYmUgdGhlIHNlbmRlciB0b1xuICAgICAgICAvLyBlbnN1cmUgdGhlIHZhbHVlIGlzIGEgdmFsaWQgcHVibGljIGtleSB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG9cbiAgICAgICAgLy8gYnl0ZXMuIFRoZSByZWFzb24gd2UgY2Fubm90IG1ha2UgYW4gYXBpIGNhbGwgdG8gZ2V0IHRoZSB0cnVlIHB1YmxpY1xuICAgICAgICAvLyBrZXkgaXMgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0aGUgZGVyaXZlZCBrZXkgcmUtYXBwcm92YWwgcG9wdXAgdG9cbiAgICAgICAgLy8gZ2V0IGJsb2NrZWQgYnkgYnJvd3NlciBwb3B1cCBibG9ja2Vycy5cbiAgICAgICAgUmVjaXBpZW50UHVibGljS2V5T3JVc2VybmFtZTogcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgICAgfSksXG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHBhcmFtcy5BbW91bnROYW5vcyArXG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArXG4gICAgICAgIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIFRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcDoge1xuICAgICAgICBCQVNJQ19UUkFOU0ZFUjpcbiAgICAgICAgICBvcHRpb25zPy50eExpbWl0Q291bnQgPz9cbiAgICAgICAgICBpZGVudGl0eS50cmFuc2FjdGlvblNwZW5kaW5nTGltaXRPcHRpb25zLlRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcFxuICAgICAgICAgICAgPy5CQVNJQ19UUkFOU0ZFUiA/P1xuICAgICAgICAgIDEsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9zZW5kLWRlc28nLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RTZW5kRGVTb1RyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkU2VuZERlU29PdXRwdXRzID0gKFxuICBwYXJhbXM6IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8U2VuZERlU29SZXF1ZXN0PlxuKSA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uT3V0cHV0ID0gbmV3IFRyYW5zYWN0aW9uT3V0cHV0KCk7XG4gIHRyYW5zYWN0aW9uT3V0cHV0LmFtb3VudE5hbm9zID0gcGFyYW1zLkFtb3VudE5hbm9zO1xuICB0cmFuc2FjdGlvbk91dHB1dC5wdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgLy8gRklYTUU6IHRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcmVjaXBpZW50IGlzIGEgdXNlcm5hbWUuIFdlIG5lZWRcbiAgICAvLyB0byBlaXRoZXIgZmV0Y2ggdGhlIHB1YmxpYyBrZXkgYW5kIG92ZXJ3cml0ZSB0aGUgdXNlcm5hbWUgd2l0aCBpdCBvclxuICAgIC8vIHRocm93IGEgbW9yZSBoZWxwZnVsIGVycm9yIHRvIGNvbnN1bWVycyBleHBsYWluaW5nIHRoYXQgd2UgcmVxdWlyZSB0aGVcbiAgICAvLyBwdWJsaWMga2V5IGluc3RlYWQgb2YgdGhlIHVzZXJuYW1lLlxuICAgIHBhcmFtcy5SZWNpcGllbnRQdWJsaWNLZXlPclVzZXJuYW1lXG4gICk7XG4gIHJldHVybiBbdHJhbnNhY3Rpb25PdXRwdXRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFNlbmREZVNvVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxTZW5kRGVTb1JlcXVlc3Q+XG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5SZWNpcGllbnRQdWJsaWNLZXlPclVzZXJuYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdtdXN0IHByb3ZpZGUgcHVibGljIGtleSwgbm90IHVzZXIgbmFtZSBmb3IgbG9jYWwgY29uc3RydWN0aW9uJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQmFzaWNUcmFuc2ZlcigpLFxuICAgIHtcbiAgICAgIE91dHB1dHM6IGJ1aWxkU2VuZERlU29PdXRwdXRzKHBhcmFtcyksXG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG5cbi8vIFRPRE86IEJVWSBjcmVhdG9yIGNvaW5zIGlzIGhhcmQuIE5lZWQgdG8gbW92ZSBzb21lXG4vLyBiaWcgZmxvYXQgbWF0aCBpbnRvIGpzLlxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZmluYW5jaWFsLXRyYW5zYWN0aW9ucy1hcGkjYnV5LW9yLXNlbGwtY3JlYXRvci1jb2luXG4gKi9cbmV4cG9ydCB0eXBlIEJ1eUNyZWF0b3JDb2luUmVxdWVzdFBhcmFtcyA9IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgT21pdDxcbiAgICAgIEJ1eU9yU2VsbENyZWF0b3JDb2luUmVxdWVzdCxcbiAgICAgICdDcmVhdG9yQ29pblRvU2VsbE5hbm9zJyB8ICdPcGVyYXRpb25UeXBlJ1xuICAgID4sXG4gICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ0NyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICB8ICdEZVNvVG9TZWxsTmFub3MnXG4gID5cbj47XG5leHBvcnQgY29uc3QgYnV5Q3JlYXRvckNvaW4gPSAoXG4gIHBhcmFtczogQnV5Q3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8XG4gICAgQnV5T3JTZWxsQ3JlYXRvckNvaW5SZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZVxuICA+XG4+ID0+IHtcbiAgLy8gVE9ETzogQWRkIHR4IHBlcm1pc3Npb24gY2hlY2sgb25jZSBsb2NhbCB0eCBjb25zdHJ1Y3Rpb24gaXMgaW1wbGVtZW50ZWQuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KFxuICAgICdhcGkvdjAvYnV5LW9yLXNlbGwtY3JlYXRvci1jb2luJyxcbiAgICB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBPcGVyYXRpb25UeXBlOiAnYnV5JyxcbiAgICB9LFxuICAgIG9wdGlvbnNcbiAgKTtcbn07XG5cbi8vIFRPRE86IFNFTEwgY3JlYXRvciBjb2lucyBpcyBoYXJkLiBOZWVkIHRvIG1vdmUgc29tZVxuLy8gYmlnIGZsb2F0IG1hdGggaW50byBqcy5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL2ZpbmFuY2lhbC10cmFuc2FjdGlvbnMtYXBpI2J1eS1vci1zZWxsLWNyZWF0b3ItY29pblxuICovXG5cbmV4cG9ydCB0eXBlIFNlbGxDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBPbWl0PEJ1eU9yU2VsbENyZWF0b3JDb2luUmVxdWVzdCwgJ0Rlc29Ub1NlbGxOYW5vcycgfCAnT3BlcmF0aW9uVHlwZSc+LFxuICAgICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvckNvaW5Ub1NlbGxOYW5vcydcbiAgICA+XG4gID47XG5cbmV4cG9ydCBjb25zdCBzZWxsQ3JlYXRvckNvaW4gPSAoXG4gIHBhcmFtczogU2VsbENyZWF0b3JDb2luUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFxuICAgIEJ1eU9yU2VsbENyZWF0b3JDb2luUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2VcbiAgPlxuPiA9PiB7XG4gIC8vIFRPRE86IEFkZCB0eCBwZXJtaXNzaW9uIGNoZWNrIG9uY2UgbG9jYWwgdHggY29uc3RydWN0aW9uIGlzIGltcGxlbWVudGVkLlxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdChcbiAgICAnYXBpL3YwL2J1eS1vci1zZWxsLWNyZWF0b3ItY29pbicsXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgT3BlcmF0aW9uVHlwZTogJ3NlbGwnLFxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvZmluYW5jaWFsLXRyYW5zYWN0aW9ucy1hcGkjdHJhbnNmZXItY3JlYXRvci1jb2luXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3QsXG4gICAgICB8ICdTZW5kZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ0NyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICAgIHwgJ1JlY2VpdmVyVXNlcm5hbWVPclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgICAgfCAnQ3JlYXRvckNvaW5Ub1RyYW5zZmVyTmFub3MnXG4gICAgPlxuICA+O1xuZXhwb3J0IGNvbnN0IHRyYW5zZmVyQ3JlYXRvckNvaW4gPSBhc3luYyAoXG4gIHBhcmFtczogVHJhbnNmZXJDcmVhdG9yQ29pblJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8VHJhbnNmZXJDcmVhdG9yQ29pblJlc3BvbnNlPj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuU2VuZGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRUcmFuc2ZlckNyZWF0b3JDb2luTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIENyZWF0b3JDb2luT3BlcmF0aW9uTGltaXRNYXA6IHtcbiAgICAgICAgW3BhcmFtcy5DcmVhdG9yUHVibGljS2V5QmFzZTU4Q2hlY2tdOiB7XG4gICAgICAgICAgdHJhbnNmZXI6IG9wdGlvbnM/LnR4TGltaXRDb3VudCA/PyAxLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvdHJhbnNmZXItY3JlYXRvci1jb2luJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0VHJhbnNmZXJDcmVhdG9yQ29pblRyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkVHJhbnNmZXJDcmVhdG9yQ29pbk1ldGFkYXRhID0gKFxuICBwYXJhbXM6IFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zXG4pID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0b3JDb2luVHJhbnNmZXIoKTtcbiAgbWV0YWRhdGEuY3JlYXRvckNvaW5Ub1RyYW5zZmVyTmFub3MgPSBwYXJhbXMuQ3JlYXRvckNvaW5Ub1RyYW5zZmVyTmFub3M7XG4gIG1ldGFkYXRhLnByb2ZpbGVQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLkNyZWF0b3JQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5yZWNlaXZlclB1YmxpY0tleSA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuUmVjZWl2ZXJVc2VybmFtZU9yUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0VHJhbnNmZXJDcmVhdG9yQ29pblRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IFRyYW5zZmVyQ3JlYXRvckNvaW5SZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBpZiAoIWlzTWF5YmVEZVNvUHVibGljS2V5KHBhcmFtcy5SZWNlaXZlclVzZXJuYW1lT3JQdWJsaWNLZXlCYXNlNThDaGVjaykpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAnbXVzdCBwcm92aWRlIHB1YmxpYyBrZXksIG5vdCB1c2VyIG5hbWUgZm9yIGxvY2FsIGNvbnN0cnVjdGlvbidcbiAgICApO1xuICB9XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuU2VuZGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRUcmFuc2ZlckNyZWF0b3JDb2luTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG4iXX0=

@@ -1,4 +0,5 @@

import { AcceptNFTBidRequest, AcceptNFTBidResponse, AcceptNFTTransferRequest, AcceptNFTTransferResponse, BurnNFTRequest, BurnNFTResponse, ConstructedTransactionResponse, CreateNFTBidRequest, CreateNFTBidResponse, CreateNFTRequest, CreateNFTResponse, RequestOptions, TransferNFTRequest, TransferNFTResponse, TxRequestWithOptionalFeesAndExtraData, UpdateNFTRequest, UpdateNFTResponse } from '../backend-types';
import { AcceptNFTBidRequest, AcceptNFTBidResponse, AcceptNFTTransferRequest, AcceptNFTTransferResponse, BurnNFTRequest, BurnNFTResponse, ConstructedTransactionResponse, CreateNFTBidRequest, CreateNFTBidResponse, CreateNFTRequest, CreateNFTResponse, TransferNFTRequest, TransferNFTResponse, TxRequestWithOptionalFeesAndExtraData, UpdateNFTRequest, UpdateNFTResponse } from '../backend-types';
import { PartialWithRequiredFields } from '../data';
import { ConstructedAndSubmittedTx } from '../types';
import { TransactionMetadataAcceptNFTTransfer } from '../identity';
import { ConstructedAndSubmittedTx, TxRequestOptions } from '../types';
/**

@@ -8,3 +9,3 @@ * https://docs.deso.org/deso-backend/construct-transactions/nft-transactions-api#create-nft

export type CreateNFTRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<CreateNFTRequest, 'UpdaterPublicKeyBase58Check' | 'NFTPostHashHex' | 'NumCopies' | 'NFTRoyaltyToCoinBasisPoints' | 'NFTRoyaltyToCreatorBasisPoints' | 'HasUnlockable' | 'IsForSale'>>;
export declare const createNFT: (params: CreateNFTRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<CreateNFTResponse | ConstructedTransactionResponse>>;
export declare const createNFT: (params: CreateNFTRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<CreateNFTResponse | ConstructedTransactionResponse>>;
export declare const constructCreateNFTTransaction: (params: CreateNFTRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -15,3 +16,3 @@ /**

export type UpdateNFTRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<UpdateNFTRequest, 'UpdaterPublicKeyBase58Check' | 'NFTPostHashHex' | 'SerialNumber' | 'MinBidAmountNanos'>>;
export declare const updateNFT: (params: UpdateNFTRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<UpdateNFTResponse | ConstructedTransactionResponse>>;
export declare const updateNFT: (params: UpdateNFTRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<UpdateNFTResponse | ConstructedTransactionResponse>>;
export declare const constructUpdateNFTTransaction: (params: UpdateNFTRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -22,3 +23,3 @@ /**

export type CreateNFTBidRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<CreateNFTBidRequest, 'BidAmountNanos' | 'NFTPostHashHex' | 'SerialNumber' | 'UpdaterPublicKeyBase58Check'>>;
export declare const createNFTBid: (params: CreateNFTBidRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<CreateNFTBidResponse | ConstructedTransactionResponse>>;
export declare const createNFTBid: (params: CreateNFTBidRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<CreateNFTBidResponse | ConstructedTransactionResponse>>;
export declare const constructNFTBidTransaction: (params: CreateNFTBidRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -29,3 +30,3 @@ /**

export type AcceptNFTBidRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<AcceptNFTBidRequest, 'BidAmountNanos' | 'NFTPostHashHex' | 'SerialNumber' | 'UpdaterPublicKeyBase58Check' | 'BidderPublicKeyBase58Check'>>;
export declare const acceptNFTBid: (params: AcceptNFTBidRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AcceptNFTBidResponse | ConstructedTransactionResponse>>;
export declare const acceptNFTBid: (params: AcceptNFTBidRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AcceptNFTBidResponse | ConstructedTransactionResponse>>;
export declare const constructAcceptNFTBidTransaction: (params: AcceptNFTBidRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -36,3 +37,3 @@ /**

export type TransferNFTRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<TransferNFTRequest, 'SenderPublicKeyBase58Check' | 'ReceiverPublicKeyBase58Check' | 'NFTPostHashHex' | 'SerialNumber'>>;
export declare const transferNFT: (params: TransferNFTRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<TransferNFTResponse | ConstructedTransactionResponse>>;
export declare const transferNFT: (params: TransferNFTRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<TransferNFTResponse | ConstructedTransactionResponse>>;
export declare const constructTransferNFT: (params: TransferNFTRequestParams) => Promise<ConstructedTransactionResponse | ConstructedTransactionResponse>;

@@ -43,3 +44,4 @@ /**

export type AcceptNFTTransferRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<AcceptNFTTransferRequest, 'UpdaterPublicKeyBase58Check' | 'NFTPostHashHex' | 'SerialNumber'>>;
export declare const acceptNFTTransfer: (params: AcceptNFTTransferRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<AcceptNFTTransferResponse | ConstructedTransactionResponse>>;
export declare const acceptNFTTransfer: (params: AcceptNFTTransferRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<AcceptNFTTransferResponse | ConstructedTransactionResponse>>;
export declare const buildAcceptNFTTransferMetadata: (params: AcceptNFTTransferRequestParams) => TransactionMetadataAcceptNFTTransfer;
export declare const constructAcceptNFTTransfer: (params: AcceptNFTTransferRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -50,3 +52,3 @@ /**

export type BurnNFTRequestParams = TxRequestWithOptionalFeesAndExtraData<PartialWithRequiredFields<BurnNFTRequest, 'UpdaterPublicKeyBase58Check' | 'NFTPostHashHex' | 'SerialNumber'>>;
export declare const burnNFT: (params: BurnNFTRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<BurnNFTResponse | ConstructedTransactionResponse>>;
export declare const burnNFT: (params: BurnNFTRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<BurnNFTResponse | ConstructedTransactionResponse>>;
export declare const constructBurnNFTTransation: (params: BurnNFTRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -11,8 +11,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {

import { hexToBytes } from '@noble/hashes/utils';
import { bs58PublicKeyToCompressedBytes, concatUint8Arrays, encodeUTF8ToBytes, TransactionExtraDataKV, TransactionMetadataAcceptNFTBid, TransactionMetadataAcceptNFTTransfer, TransactionMetadataBurnNFT, TransactionMetadataCreateNFT, TransactionMetadataNFTBid, TransactionMetadataNFTTransfer, TransactionMetadataUpdateNFT, uvarint64ToBuf, } from '../identity';
import { constructBalanceModelTx, handleSignAndSubmit } from '../internal';
import { TransactionExtraDataKV, TransactionMetadataAcceptNFTBid, TransactionMetadataAcceptNFTTransfer, TransactionMetadataBurnNFT, TransactionMetadataCreateNFT, TransactionMetadataNFTBid, TransactionMetadataNFTTransfer, TransactionMetadataUpdateNFT, bs58PublicKeyToCompressedBytes, concatUint8Arrays, encodeUTF8ToBytes, uvarint64ToBuf, } from '../identity';
import { guardTxPermission } from '../identity/permissions-utils';
import { constructBalanceModelTx, getTxWithFeeNanos, handleSignAndSubmit, sumTransactionFees, } from '../internal';
export const createNFT = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
const txWithFee = getTxWithFeeNanos(params.UpdaterPublicKeyBase58Check, buildCreateNFTMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
ConsensusExtraDataKVs: buildCreateNFTConsensusKVs(params),
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
TransactionCountLimitMap: {
CREATE_NFT: (_a = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _a !== void 0 ? _a : 1,
},
});
}
return handleSignAndSubmit('api/v0/create-nft', params, Object.assign(Object.assign({}, options), { constructionFunction: constructCreateNFTTransaction }));
});
export const constructCreateNFTTransaction = (params) => {
const buildCreateNFTMetadata = (params) => {
const metadata = new TransactionMetadataCreateNFT();

@@ -27,2 +43,5 @@ metadata.hasUnlockable = params.HasUnlockable;

metadata.numCopies = params.NumCopies;
return metadata;
};
const buildCreateNFTConsensusKVs = (params) => {
const consensusExtraDataKVs = [];

@@ -62,5 +81,8 @@ if (params.IsBuyNow && params.BuyNowPriceNanos !== undefined) {

}
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, metadata, {
return consensusExtraDataKVs;
};
export const constructCreateNFTTransaction = (params) => {
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, buildCreateNFTMetadata(params), {
ExtraData: params.ExtraData,
ConsensusExtraDataKVs: consensusExtraDataKVs,
ConsensusExtraDataKVs: buildCreateNFTConsensusKVs(params),
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

@@ -71,5 +93,20 @@ TransactionFees: params.TransactionFees,

export const updateNFT = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _b;
const txWithFee = getTxWithFeeNanos(params.UpdaterPublicKeyBase58Check, buildUpdateNFTMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
ConsensusExtraDataKVs: buildUpdateNFTConsensusKVs(params),
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
TransactionCountLimitMap: {
UPDATE_NFT: (_b = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _b !== void 0 ? _b : 1,
},
});
}
return handleSignAndSubmit('api/v0/update-nft', params, Object.assign(Object.assign({}, options), { constructionFunction: constructUpdateNFTTransaction }));
});
export const constructUpdateNFTTransaction = (params) => {
const buildUpdateNFTMetadata = (params) => {
const metadata = new TransactionMetadataUpdateNFT();

@@ -80,2 +117,5 @@ metadata.isForSale = !!params.IsForSale;

metadata.serialNumber = params.SerialNumber;
return metadata;
};
const buildUpdateNFTConsensusKVs = (params) => {
const consensusExtraDataKVs = [];

@@ -85,13 +125,36 @@ if (params.IsBuyNow && params.BuyNowPriceNanos !== undefined) {

}
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, metadata, {
return consensusExtraDataKVs;
};
export const constructUpdateNFTTransaction = (params) => {
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, buildUpdateNFTMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
ConsensusExtraDataKVs: consensusExtraDataKVs,
ConsensusExtraDataKVs: buildUpdateNFTConsensusKVs(params),
});
};
export const createNFTBid = (params, options) => {
export const createNFTBid = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _c;
const txWithFee = getTxWithFeeNanos(params.UpdaterPublicKeyBase58Check, buildCreateNFTBidMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: params.BidAmountNanos +
txWithFee.feeNanos +
sumTransactionFees(params.TransactionFees),
NFTOperationLimitMap: {
[params.NFTPostHashHex]: {
[params.SerialNumber]: {
nft_bid: (_c = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _c !== void 0 ? _c : 1,
},
},
},
});
}
return handleSignAndSubmit('api/v0/create-nft-bid', params, Object.assign(Object.assign({}, options), { constructionFunction: constructNFTBidTransaction }));
};
export const constructNFTBidTransaction = (params) => {
});
const buildCreateNFTBidMetadata = (params) => {
const metadata = new TransactionMetadataNFTBid();

@@ -101,3 +164,6 @@ metadata.bidAmountNanos = params.BidAmountNanos;

metadata.serialNumber = params.SerialNumber;
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructNFTBidTransaction = (params) => {
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, buildCreateNFTBidMetadata(params), {
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

@@ -108,6 +174,26 @@ ExtraData: params.ExtraData,

};
export const acceptNFTBid = (params, options) => {
export const acceptNFTBid = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _d;
const txWithFee = getTxWithFeeNanos(params.UpdaterPublicKeyBase58Check, buildAcceptNFTBidMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: params.BidAmountNanos +
txWithFee.feeNanos +
sumTransactionFees(params.TransactionFees),
NFTOperationLimitMap: {
[params.NFTPostHashHex]: {
[params.SerialNumber]: {
accept_nft_bid: (_d = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _d !== void 0 ? _d : 1,
},
},
},
});
}
return handleSignAndSubmit('api/v0/accept-nft-bid', params, Object.assign(Object.assign({}, options), { constructionFunction: constructAcceptNFTBidTransaction }));
};
export const constructAcceptNFTBidTransaction = (params) => {
});
const buildAcceptNFTBidMetadata = (params) => {
const metadata = new TransactionMetadataAcceptNFTBid();

@@ -121,3 +207,6 @@ metadata.bidAmountNanos = params.BidAmountNanos;

metadata.serialNumber = params.SerialNumber;
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructAcceptNFTBidTransaction = (params) => {
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, buildAcceptNFTBidMetadata(params), {
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

@@ -128,6 +217,24 @@ ExtraData: params.ExtraData,

};
export const transferNFT = (params, options) => {
export const transferNFT = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _e;
const txWithFee = getTxWithFeeNanos(params.SenderPublicKeyBase58Check, buildTransferNFTMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
NFTOperationLimitMap: {
[params.NFTPostHashHex]: {
[params.SerialNumber]: {
transfer: (_e = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _e !== void 0 ? _e : 1,
},
},
},
});
}
return handleSignAndSubmit('api/v0/transfer-nft', params, Object.assign(Object.assign({}, options), { constructionFunction: constructTransferNFT }));
};
export const constructTransferNFT = (params) => {
});
const buildTransferNFTMetadata = (params) => {
const metadata = new TransactionMetadataNFTTransfer();

@@ -138,3 +245,6 @@ metadata.encryptedUnlockableText = hexToBytes(params.EncryptedUnlockableText || '');

metadata.serialNumber = params.SerialNumber;
return constructBalanceModelTx(params.SenderPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructTransferNFT = (params) => {
return constructBalanceModelTx(params.SenderPublicKeyBase58Check, buildTransferNFTMetadata(params), {
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

@@ -145,10 +255,31 @@ ExtraData: params.ExtraData,

};
export const acceptNFTTransfer = (params, options) => {
export const acceptNFTTransfer = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _f;
const txWithFee = getTxWithFeeNanos(params.UpdaterPublicKeyBase58Check, buildAcceptNFTTransferMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
NFTOperationLimitMap: {
[params.NFTPostHashHex]: {
[params.SerialNumber]: {
accept_nft_transfer: (_f = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _f !== void 0 ? _f : 1,
},
},
},
});
}
return handleSignAndSubmit('api/v0/accept-nft-transfer', params, Object.assign(Object.assign({}, options), { constructionFunction: constructAcceptNFTTransfer }));
};
export const constructAcceptNFTTransfer = (params) => {
});
export const buildAcceptNFTTransferMetadata = (params) => {
const metadata = new TransactionMetadataAcceptNFTTransfer();
metadata.nftPostHash = hexToBytes(params.NFTPostHashHex);
metadata.serialNumber = params.SerialNumber;
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructAcceptNFTTransfer = (params) => {
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, buildAcceptNFTTransferMetadata(params), {
ExtraData: params.ExtraData,

@@ -159,10 +290,31 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
export const burnNFT = (params, options) => {
export const burnNFT = (params, options) => __awaiter(void 0, void 0, void 0, function* () {
var _g;
const txWithFee = getTxWithFeeNanos(params.UpdaterPublicKeyBase58Check, buildBurnNFTMetadata(params), {
ExtraData: params.ExtraData,
MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,
TransactionFees: params.TransactionFees,
});
if ((options === null || options === void 0 ? void 0 : options.checkPermissions) !== false) {
yield guardTxPermission({
GlobalDESOLimit: txWithFee.feeNanos + sumTransactionFees(params.TransactionFees),
NFTOperationLimitMap: {
[params.NFTPostHashHex]: {
[params.SerialNumber]: {
burn: (_g = options === null || options === void 0 ? void 0 : options.txLimitCount) !== null && _g !== void 0 ? _g : 1,
},
},
},
});
}
return handleSignAndSubmit('api/v0/burn-nft', params, Object.assign(Object.assign({}, options), { constructionFunction: constructBurnNFTTransation }));
};
export const constructBurnNFTTransation = (params) => {
});
const buildBurnNFTMetadata = (params) => {
const metadata = new TransactionMetadataBurnNFT();
metadata.nftPostHash = hexToBytes(params.NFTPostHashHex);
metadata.serialNumber = params.SerialNumber;
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, metadata, {
return metadata;
};
export const constructBurnNFTTransation = (params) => {
return constructBalanceModelTx(params.UpdaterPublicKeyBase58Check, buildBurnNFTMetadata(params), {
ExtraData: params.ExtraData,

@@ -173,2 +325,2 @@ MinFeeRateNanosPerKB: params.MinFeeRateNanosPerKB,

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmZ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbnMvbmZ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFxQmpELE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLG9DQUFvQyxFQUNwQywwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6Qiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLGNBQWMsR0FDZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFrQjNFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixNQUE4QixFQUM5QixPQUF3QixFQUd4QixFQUFFO0lBQ0YsT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLGtDQUNqRCxPQUFPLEtBQ1Ysb0JBQW9CLEVBQUUsNkJBQTZCLElBQ25ELENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQzNDLE1BQThCLEVBQ1csRUFBRTtJQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7SUFDcEQsUUFBUSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQzlDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUN0QyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekQsUUFB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LE1BQTRCLEVBQzVCLE9BQXdCLEVBR3hCLEVBQUU7SUFDRixPQUFPLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLE1BQU0sa0NBQy9DLE9BQU8sS0FDVixvQkFBb0IsRUFBRSwwQkFBMEIsSUFDaEQsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQ3hDLE1BQTRCLEVBQ2EsRUFBRTtJQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7SUFDbEQsUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUM1QyxPQUFPLHVCQUF1QixDQUFDLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxRQUFRLEVBQUU7UUFDM0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhleFRvQnl0ZXMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7XG4gIEFjY2VwdE5GVEJpZFJlcXVlc3QsXG4gIEFjY2VwdE5GVEJpZFJlc3BvbnNlLFxuICBBY2NlcHRORlRUcmFuc2ZlclJlcXVlc3QsXG4gIEFjY2VwdE5GVFRyYW5zZmVyUmVzcG9uc2UsXG4gIEJ1cm5ORlRSZXF1ZXN0LFxuICBCdXJuTkZUUmVzcG9uc2UsXG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgQ3JlYXRlTkZUQmlkUmVxdWVzdCxcbiAgQ3JlYXRlTkZUQmlkUmVzcG9uc2UsXG4gIENyZWF0ZU5GVFJlcXVlc3QsXG4gIENyZWF0ZU5GVFJlc3BvbnNlLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgVHJhbnNmZXJORlRSZXF1ZXN0LFxuICBUcmFuc2Zlck5GVFJlc3BvbnNlLFxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhLFxuICBVcGRhdGVORlRSZXF1ZXN0LFxuICBVcGRhdGVORlRSZXNwb25zZSxcbn0gZnJvbSAnLi4vYmFja2VuZC10eXBlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzIH0gZnJvbSAnLi4vZGF0YSc7XG5pbXBvcnQge1xuICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMsXG4gIGNvbmNhdFVpbnQ4QXJyYXlzLFxuICBlbmNvZGVVVEY4VG9CeXRlcyxcbiAgVHJhbnNhY3Rpb25FeHRyYURhdGFLVixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2VwdE5GVEJpZCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2VwdE5GVFRyYW5zZmVyLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhQnVybk5GVCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUNyZWF0ZU5GVCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YU5GVEJpZCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YU5GVFRyYW5zZmVyLFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhVXBkYXRlTkZULFxuICB1dmFyaW50NjRUb0J1Zixcbn0gZnJvbSAnLi4vaWRlbnRpdHknO1xuaW1wb3J0IHsgY29uc3RydWN0QmFsYW5jZU1vZGVsVHgsIGhhbmRsZVNpZ25BbmRTdWJtaXQgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4IH0gZnJvbSAnLi4vdHlwZXMnO1xuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLW5mdFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVORlRSZXF1ZXN0UGFyYW1zID0gVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBDcmVhdGVORlRSZXF1ZXN0LFxuICAgIHwgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICB8ICdORlRQb3N0SGFzaEhleCdcbiAgICB8ICdOdW1Db3BpZXMnXG4gICAgfCAnTkZUUm95YWx0eVRvQ29pbkJhc2lzUG9pbnRzJ1xuICAgIHwgJ05GVFJveWFsdHlUb0NyZWF0b3JCYXNpc1BvaW50cydcbiAgICB8ICdIYXNVbmxvY2thYmxlJ1xuICAgIHwgJ0lzRm9yU2FsZSdcbiAgPlxuPjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5GVCA9IGFzeW5jIChcbiAgcGFyYW1zOiBDcmVhdGVORlRSZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8Q3JlYXRlTkZUUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+XG4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9jcmVhdGUtbmZ0JywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0Q3JlYXRlTkZUVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdENyZWF0ZU5GVFRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IENyZWF0ZU5GVFJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdGVORlQoKTtcbiAgbWV0YWRhdGEuaGFzVW5sb2NrYWJsZSA9IHBhcmFtcy5IYXNVbmxvY2thYmxlO1xuICBtZXRhZGF0YS5pc0ZvclNhbGUgPSBwYXJhbXMuSXNGb3JTYWxlO1xuICBtZXRhZGF0YS5taW5CaWRBbW91bnROYW5vcyA9IHBhcmFtcy5NaW5CaWRBbW91bnROYW5vcyB8fCAwO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEubmZ0Um95YWx0eVRvQ29pbkJhc2lzUG9pbnRzID0gcGFyYW1zLk5GVFJveWFsdHlUb0NvaW5CYXNpc1BvaW50cztcbiAgbWV0YWRhdGEubmZ0Um95YWx0eVRvQ3JlYXRvckJhc2lzUG9pbnRzID1cbiAgICBwYXJhbXMuTkZUUm95YWx0eVRvQ3JlYXRvckJhc2lzUG9pbnRzO1xuICBtZXRhZGF0YS5udW1Db3BpZXMgPSBwYXJhbXMuTnVtQ29waWVzO1xuXG4gIGNvbnN0IGNvbnNlbnN1c0V4dHJhRGF0YUtWczogVHJhbnNhY3Rpb25FeHRyYURhdGFLVltdID0gW107XG4gIGlmIChwYXJhbXMuSXNCdXlOb3cgJiYgcGFyYW1zLkJ1eU5vd1ByaWNlTmFub3MgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoXG4gICAgICAgIGVuY29kZVVURjhUb0J5dGVzKCdCdXlOb3dQcmljZU5hbm9zJyksXG4gICAgICAgIHV2YXJpbnQ2NFRvQnVmKHBhcmFtcy5CdXlOb3dQcmljZU5hbm9zKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIHBhcmFtcy5BZGRpdGlvbmFsREVTT1JveWFsdGllc01hcCAmJlxuICAgIE9iamVjdC5rZXlzKHBhcmFtcy5BZGRpdGlvbmFsREVTT1JveWFsdGllc01hcCkubGVuZ3RoXG4gICkge1xuICAgIGNvbnN0IHJveWFsdHlNYXAgPSBwYXJhbXMuQWRkaXRpb25hbERFU09Sb3lhbHRpZXNNYXA7XG4gICAgbGV0IGJ1ZiA9IHV2YXJpbnQ2NFRvQnVmKE9iamVjdC5rZXlzKHJveWFsdHlNYXApLmxlbmd0aCk7XG4gICAgT2JqZWN0LmtleXMocm95YWx0eU1hcClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgICAuZm9yRWFjaCgocHVibGljS2V5KSA9PiB7XG4gICAgICAgIGJ1ZiA9IGNvbmNhdFVpbnQ4QXJyYXlzKFtcbiAgICAgICAgICBidWYsXG4gICAgICAgICAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKHB1YmxpY0tleSksXG4gICAgICAgICAgdXZhcmludDY0VG9CdWYocm95YWx0eU1hcFtwdWJsaWNLZXldKSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICBjb25zZW5zdXNFeHRyYURhdGFLVnMucHVzaChcbiAgICAgIG5ldyBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWKGVuY29kZVVURjhUb0J5dGVzKCdERVNPUm95YWx0aWVzTWFwJyksIGJ1ZilcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBwYXJhbXMuQWRkaXRpb25hbENvaW5Sb3lhbHRpZXNNYXAgJiZcbiAgICBPYmplY3Qua2V5cyhwYXJhbXMuQWRkaXRpb25hbENvaW5Sb3lhbHRpZXNNYXApLmxlbmd0aFxuICApIHtcbiAgICBjb25zdCByb3lhbHR5TWFwID0gcGFyYW1zLkFkZGl0aW9uYWxDb2luUm95YWx0aWVzTWFwO1xuICAgIGxldCBidWYgPSB1dmFyaW50NjRUb0J1ZihPYmplY3Qua2V5cyhyb3lhbHR5TWFwKS5sZW5ndGgpO1xuICAgIE9iamVjdC5rZXlzKHJveWFsdHlNYXApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKVxuICAgICAgLmZvckVhY2goKHB1YmxpY0tleSkgPT4ge1xuICAgICAgICBidWYgPSBjb25jYXRVaW50OEFycmF5cyhbXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhwdWJsaWNLZXkpLFxuICAgICAgICAgIHV2YXJpbnQ2NFRvQnVmKHJveWFsdHlNYXBbcHVibGljS2V5XSksXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG4gICAgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzLnB1c2goXG4gICAgICBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGFLVihlbmNvZGVVVEY4VG9CeXRlcygnQ29pblJveWFsdGllc01hcCcpLCBidWYpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgQ29uc2Vuc3VzRXh0cmFEYXRhS1ZzOiBjb25zZW5zdXNFeHRyYURhdGFLVnMsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjdXBkYXRlLW5mdFxuICovXG5leHBvcnQgdHlwZSBVcGRhdGVORlRSZXF1ZXN0UGFyYW1zID0gVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBVcGRhdGVORlRSZXF1ZXN0LFxuICAgIHwgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICB8ICdORlRQb3N0SGFzaEhleCdcbiAgICB8ICdTZXJpYWxOdW1iZXInXG4gICAgfCAnTWluQmlkQW1vdW50TmFub3MnXG4gID5cbj47XG5leHBvcnQgY29uc3QgdXBkYXRlTkZUID0gYXN5bmMgKFxuICBwYXJhbXM6IFVwZGF0ZU5GVFJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxcbiAgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxVcGRhdGVORlRSZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT5cbj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3VwZGF0ZS1uZnQnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RVcGRhdGVORlRUcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0VXBkYXRlTkZUVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogVXBkYXRlTkZUUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YVVwZGF0ZU5GVCgpO1xuICBtZXRhZGF0YS5pc0ZvclNhbGUgPSAhIXBhcmFtcy5Jc0ZvclNhbGU7XG4gIG1ldGFkYXRhLm1pbkJpZEFtb3VudE5hbm9zID0gcGFyYW1zLk1pbkJpZEFtb3VudE5hbm9zO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcbiAgY29uc3QgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzOiBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWW10gPSBbXTtcbiAgaWYgKHBhcmFtcy5Jc0J1eU5vdyAmJiBwYXJhbXMuQnV5Tm93UHJpY2VOYW5vcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzLnB1c2goXG4gICAgICBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGFLVihcbiAgICAgICAgZW5jb2RlVVRGOFRvQnl0ZXMoJ0J1eU5vd1ByaWNlTmFub3MnKSxcbiAgICAgICAgdXZhcmludDY0VG9CdWYocGFyYW1zLkJ1eU5vd1ByaWNlTmFub3MpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgQ29uc2Vuc3VzRXh0cmFEYXRhS1ZzOiBjb25zZW5zdXNFeHRyYURhdGFLVnMsXG4gIH0pO1xufTtcbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL25mdC10cmFuc2FjdGlvbnMtYXBpI2NyZWF0ZS1uZnQtYmlkXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZU5GVEJpZFJlcXVlc3RQYXJhbXMgPSBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIENyZWF0ZU5GVEJpZFJlcXVlc3QsXG4gICAgfCAnQmlkQW1vdW50TmFub3MnXG4gICAgfCAnTkZUUG9zdEhhc2hIZXgnXG4gICAgfCAnU2VyaWFsTnVtYmVyJ1xuICAgIHwgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgPlxuPjtcbmV4cG9ydCBjb25zdCBjcmVhdGVORlRCaWQgPSAoXG4gIHBhcmFtczogQ3JlYXRlTkZUQmlkUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFxuICAgIENyZWF0ZU5GVEJpZFJlc3BvbnNlIHwgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlXG4gID5cbj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2NyZWF0ZS1uZnQtYmlkJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0TkZUQmlkVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdE5GVEJpZFRyYW5zYWN0aW9uID0gKFxuICBwYXJhbXM6IENyZWF0ZU5GVEJpZFJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFORlRCaWQoKTtcbiAgbWV0YWRhdGEuYmlkQW1vdW50TmFub3MgPSBwYXJhbXMuQmlkQW1vdW50TmFub3M7XG4gIG1ldGFkYXRhLm5mdFBvc3RIYXNoID0gaGV4VG9CeXRlcyhwYXJhbXMuTkZUUG9zdEhhc2hIZXgpO1xuICBtZXRhZGF0YS5zZXJpYWxOdW1iZXIgPSBwYXJhbXMuU2VyaWFsTnVtYmVyO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjYWNjZXB0LW5mdC1iaWRcbiAqL1xuZXhwb3J0IHR5cGUgQWNjZXB0TkZUQmlkUmVxdWVzdFBhcmFtcyA9IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgQWNjZXB0TkZUQmlkUmVxdWVzdCxcbiAgICB8ICdCaWRBbW91bnROYW5vcydcbiAgICB8ICdORlRQb3N0SGFzaEhleCdcbiAgICB8ICdTZXJpYWxOdW1iZXInXG4gICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ0JpZGRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICA+XG4+O1xuZXhwb3J0IGNvbnN0IGFjY2VwdE5GVEJpZCA9IChcbiAgcGFyYW1zOiBBY2NlcHRORlRCaWRSZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8XG4gICAgQWNjZXB0TkZUQmlkUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2VcbiAgPlxuPiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvYWNjZXB0LW5mdC1iaWQnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RBY2NlcHRORlRCaWRUcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0QWNjZXB0TkZUQmlkVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogQWNjZXB0TkZUQmlkUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2VwdE5GVEJpZCgpO1xuICBtZXRhZGF0YS5iaWRBbW91bnROYW5vcyA9IHBhcmFtcy5CaWRBbW91bnROYW5vcztcbiAgbWV0YWRhdGEuYmlkZGVySW5wdXRzID0gW107XG4gIC8vIFRPRE86IHRoaXMgd29uJ3Qgd29yayBpZiB0aGV5J3ZlIGhhZCB0aGVpciBpZGVudGl0eSBzd2FwcGVkLlxuICBtZXRhZGF0YS5iaWRkZXJQS0lEID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5CaWRkZXJQdWJsaWNLZXlCYXNlNThDaGVja1xuICApO1xuICBtZXRhZGF0YS5lbmNyeXB0ZWRVbmxvY2thYmxlVGV4dCA9IGhleFRvQnl0ZXMoXG4gICAgcGFyYW1zLkVuY3J5cHRlZFVubG9ja2FibGVUZXh0IHx8ICcnXG4gICk7XG4gIG1ldGFkYXRhLm5mdFBvc3RIYXNoID0gaGV4VG9CeXRlcyhwYXJhbXMuTkZUUG9zdEhhc2hIZXgpO1xuICBtZXRhZGF0YS5zZXJpYWxOdW1iZXIgPSBwYXJhbXMuU2VyaWFsTnVtYmVyO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjdHJhbnNmZXItbmZ0XG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZmVyTkZUUmVxdWVzdFBhcmFtcyA9IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgVHJhbnNmZXJORlRSZXF1ZXN0LFxuICAgIHwgJ1NlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ1JlY2VpdmVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnTkZUUG9zdEhhc2hIZXgnXG4gICAgfCAnU2VyaWFsTnVtYmVyJ1xuICA+XG4+O1xuZXhwb3J0IGNvbnN0IHRyYW5zZmVyTkZUID0gKFxuICBwYXJhbXM6IFRyYW5zZmVyTkZUUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFxuICAgIFRyYW5zZmVyTkZUUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2VcbiAgPlxuPiA9PiB7XG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvdHJhbnNmZXItbmZ0JywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0VHJhbnNmZXJORlQsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdFRyYW5zZmVyTkZUID0gKFxuICBwYXJhbXM6IFRyYW5zZmVyTkZUUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YU5GVFRyYW5zZmVyKCk7XG4gIG1ldGFkYXRhLmVuY3J5cHRlZFVubG9ja2FibGVUZXh0ID0gaGV4VG9CeXRlcyhcbiAgICBwYXJhbXMuRW5jcnlwdGVkVW5sb2NrYWJsZVRleHQgfHwgJydcbiAgKTtcbiAgbWV0YWRhdGEubmZ0UG9zdEhhc2ggPSBoZXhUb0J5dGVzKHBhcmFtcy5ORlRQb3N0SGFzaEhleCk7XG4gIG1ldGFkYXRhLnJlY2VpdmVyUHVibGljS2V5ID0gYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKFxuICAgIHBhcmFtcy5SZWNlaXZlclB1YmxpY0tleUJhc2U1OENoZWNrXG4gICk7XG4gIG1ldGFkYXRhLnNlcmlhbE51bWJlciA9IHBhcmFtcy5TZXJpYWxOdW1iZXI7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChwYXJhbXMuU2VuZGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssIG1ldGFkYXRhLCB7XG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICB9KTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL25mdC10cmFuc2FjdGlvbnMtYXBpI2FjY2VwdC1uZnQtdHJhbnNmZXJcbiAqL1xuZXhwb3J0IHR5cGUgQWNjZXB0TkZUVHJhbnNmZXJSZXF1ZXN0UGFyYW1zID1cbiAgVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgICAgQWNjZXB0TkZUVHJhbnNmZXJSZXF1ZXN0LFxuICAgICAgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaycgfCAnTkZUUG9zdEhhc2hIZXgnIHwgJ1NlcmlhbE51bWJlcidcbiAgICA+XG4gID47XG5leHBvcnQgY29uc3QgYWNjZXB0TkZUVHJhbnNmZXIgPSAoXG4gIHBhcmFtczogQWNjZXB0TkZUVHJhbnNmZXJSZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8XG4gICAgQWNjZXB0TkZUVHJhbnNmZXJSZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZVxuICA+XG4+ID0+IHtcbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9hY2NlcHQtbmZ0LXRyYW5zZmVyJywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0QWNjZXB0TkZUVHJhbnNmZXIsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdEFjY2VwdE5GVFRyYW5zZmVyID0gKFxuICBwYXJhbXM6IEFjY2VwdE5GVFRyYW5zZmVyUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YUFjY2VwdE5GVFRyYW5zZmVyKCk7XG4gIG1ldGFkYXRhLm5mdFBvc3RIYXNoID0gaGV4VG9CeXRlcyhwYXJhbXMuTkZUUG9zdEhhc2hIZXgpO1xuICBtZXRhZGF0YS5zZXJpYWxOdW1iZXIgPSBwYXJhbXMuU2VyaWFsTnVtYmVyO1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgocGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaywgbWV0YWRhdGEsIHtcbiAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjYnVybi1uZnRcbiAqL1xuZXhwb3J0IHR5cGUgQnVybk5GVFJlcXVlc3RQYXJhbXMgPSBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIEJ1cm5ORlRSZXF1ZXN0LFxuICAgICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snIHwgJ05GVFBvc3RIYXNoSGV4JyB8ICdTZXJpYWxOdW1iZXInXG4gID5cbj47XG5leHBvcnQgY29uc3QgYnVybk5GVCA9IChcbiAgcGFyYW1zOiBCdXJuTkZUUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PEJ1cm5ORlRSZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT5cbj4gPT4ge1xuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2J1cm4tbmZ0JywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0QnVybk5GVFRyYW5zYXRpb24sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdEJ1cm5ORlRUcmFuc2F0aW9uID0gKFxuICBwYXJhbXM6IEJ1cm5ORlRSZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQnVybk5GVCgpO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssIG1ldGFkYXRhLCB7XG4gICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICB9KTtcbn07XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmZ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbnMvbmZ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFvQmpELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLG9DQUFvQyxFQUNwQywwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6Qiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLDhCQUE4QixFQUM5QixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGNBQWMsR0FDZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBQ25CLE1BQU0sYUFBYSxDQUFDO0FBa0JyQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDdkIsTUFBOEIsRUFDOUIsT0FBMEIsRUFHMUIsRUFBRTs7SUFDRixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FDakMsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsRUFDOUI7UUFDRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7UUFDdkMscUJBQXFCLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxDQUFDO0tBQzFELENBQ0YsQ0FBQztJQUVGLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZ0JBQWdCLE1BQUssS0FBSyxFQUFFO1FBQ3ZDLE1BQU0saUJBQWlCLENBQUM7WUFDdEIsZUFBZSxFQUNiLFNBQVMsQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNqRSx3QkFBd0IsRUFBRTtnQkFDeEIsVUFBVSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksbUNBQUksQ0FBQzthQUN2QztTQUNGLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLGtDQUNqRCxPQUFPLEtBQ1Ysb0JBQW9CLEVBQUUsNkJBQTZCLElBQ25ELENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxNQUE4QixFQUFFLEVBQUU7SUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO0lBQ3BELFFBQVEsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUM5QyxRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDdEMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUM7SUFDM0QsUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsQ0FBQywyQkFBMkIsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUM7SUFDMUUsUUFBUSxDQUFDLDhCQUE4QjtRQUNyQyxNQUFNLENBQUMsOEJBQThCLENBQUM7SUFDeEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBRXRDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxNQUE4QixFQUFFLEVBQUU7SUFDcEUsTUFBTSxxQkFBcUIsR0FBNkIsRUFBRSxDQUFDO0lBQzNELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1FBQzVELHFCQUFxQixDQUFDLElBQUksQ0FDeEIsSUFBSSxzQkFBc0IsQ0FDeEIsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsRUFDckMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN4QyxDQUNGLENBQUM7S0FDSDtJQUNELElBQ0UsTUFBTSxDQUFDLDBCQUEwQjtRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLE1BQU0sRUFDckQ7UUFDQSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUM7UUFDckQsSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNyQixHQUFHLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3RCLEdBQUc7Z0JBQ0gsOEJBQThCLENBQUMsU0FBUyxDQUFDO2dCQUN6QyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3RDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wscUJBQXFCLENBQUMsSUFBSSxDQUN4QixJQUFJLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQ3ZFLENBQUM7S0FDSDtJQUNELElBQ0UsTUFBTSxDQUFDLDBCQUEwQjtRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLE1BQU0sRUFDckQ7UUFDQSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUM7UUFDckQsSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNyQixHQUFHLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3RCLEdBQUc7Z0JBQ0gsOEJBQThCLENBQUMsU0FBUyxDQUFDO2dCQUN6QyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3RDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wscUJBQXFCLENBQUMsSUFBSSxDQUN4QixJQUFJLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQ3ZFLENBQUM7S0FDSDtJQUVELE9BQU8scUJBQXFCLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FDM0MsTUFBOEIsRUFDVyxFQUFFO0lBQzNDLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEVBQzlCO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLHFCQUFxQixFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FBQztRQUN6RCxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1FBQ2pELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtLQUN4QyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFjRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FDdkIsTUFBOEIsRUFDOUIsT0FBMEIsRUFHMUIsRUFBRTs7SUFDRixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FDakMsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsRUFDOUI7UUFDRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7UUFDdkMscUJBQXFCLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxDQUFDO0tBQzFELENBQ0YsQ0FBQztJQUVGLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZ0JBQWdCLE1BQUssS0FBSyxFQUFFO1FBQ3ZDLE1BQU0saUJBQWlCLENBQUM7WUFDdEIsZUFBZSxFQUNiLFNBQVMsQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNqRSx3QkFBd0IsRUFBRTtnQkFDeEIsVUFBVSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksbUNBQUksQ0FBQzthQUN2QztTQUNGLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLGtDQUNqRCxPQUFPLEtBQ1Ysb0JBQW9CLEVBQUUsNkJBQTZCLElBQ25ELENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxNQUE4QixFQUFFLEVBQUU7SUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO0lBQ3BELFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDeEMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RCxRQUFRLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekQsUUFBUSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQzVDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxNQUE4QixFQUFFLEVBQUU7SUFDcEUsTUFBTSxxQkFBcUIsR0FBNkIsRUFBRSxDQUFDO0lBQzNELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1FBQzVELHFCQUFxQixDQUFDLElBQUksQ0FDeEIsSUFBSSxzQkFBc0IsQ0FDeEIsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsRUFDckMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN4QyxDQUNGLENBQUM7S0FDSDtJQUNELE9BQU8scUJBQXFCLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FDM0MsTUFBOEIsRUFDVyxFQUFFO0lBQzNDLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEVBQzlCO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO1FBQ3ZDLHFCQUFxQixFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FBQztLQUMxRCxDQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFjRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDMUIsTUFBaUMsRUFDakMsT0FBMEIsRUFLMUIsRUFBRTs7SUFDRixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FDakMsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFDakM7UUFDRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FDRixDQUFDO0lBRUYsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxnQkFBZ0IsTUFBSyxLQUFLLEVBQUU7UUFDdkMsTUFBTSxpQkFBaUIsQ0FBQztZQUN0QixlQUFlLEVBQ2IsTUFBTSxDQUFDLGNBQWM7Z0JBQ3JCLFNBQVMsQ0FBQyxRQUFRO2dCQUNsQixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQzVDLG9CQUFvQixFQUFFO2dCQUNwQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRTtvQkFDdkIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7d0JBQ3JCLE9BQU8sRUFBRSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLG1DQUFJLENBQUM7cUJBQ3BDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7S0FDSjtJQUVELE9BQU8sbUJBQW1CLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxrQ0FDckQsT0FBTyxLQUNWLG9CQUFvQixFQUFFLDBCQUEwQixJQUNoRCxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHLENBQUMsTUFBaUMsRUFBRSxFQUFFO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUNqRCxRQUFRLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDaEQsUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUU1QyxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN4QyxNQUFpQyxFQUNRLEVBQUU7SUFDM0MsT0FBTyx1QkFBdUIsQ0FDNUIsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFDakM7UUFDRSxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1FBQ2pELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBZUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQzFCLE1BQWlDLEVBQ2pDLE9BQTBCLEVBSzFCLEVBQUU7O0lBQ0YsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQ2pDLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEVBQ2pDO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztJQUVGLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZ0JBQWdCLE1BQUssS0FBSyxFQUFFO1FBQ3ZDLE1BQU0saUJBQWlCLENBQUM7WUFDdEIsZUFBZSxFQUNiLE1BQU0sQ0FBQyxjQUFjO2dCQUNyQixTQUFTLENBQUMsUUFBUTtnQkFDbEIsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUM1QyxvQkFBb0IsRUFBRTtnQkFDcEIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ3ZCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUNyQixjQUFjLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxtQ0FBSSxDQUFDO3FCQUMzQztpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFLE1BQU0sa0NBQ3JELE9BQU8sS0FDVixvQkFBb0IsRUFBRSxnQ0FBZ0MsSUFDdEQsQ0FBQztBQUNMLENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE1BQWlDLEVBQUUsRUFBRTtJQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLCtCQUErQixFQUFFLENBQUM7SUFDdkQsUUFBUSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0lBQ2hELFFBQVEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQzNCLCtEQUErRDtJQUMvRCxRQUFRLENBQUMsVUFBVSxHQUFHLDhCQUE4QixDQUNsRCxNQUFNLENBQUMsMEJBQTBCLENBQ2xDLENBQUM7SUFDRixRQUFRLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxDQUMzQyxNQUFNLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUNyQyxDQUFDO0lBQ0YsUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUU1QyxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxDQUM5QyxNQUFpQyxFQUNRLEVBQUU7SUFDM0MsT0FBTyx1QkFBdUIsQ0FDNUIsTUFBTSxDQUFDLDJCQUEyQixFQUNsQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFDakM7UUFDRSxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1FBQ2pELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBY0YsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQ3pCLE1BQWdDLEVBQ2hDLE9BQTBCLEVBSzFCLEVBQUU7O0lBQ0YsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQ2pDLE1BQU0sQ0FBQywwQkFBMEIsRUFDakMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQ2hDO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztJQUVGLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZ0JBQWdCLE1BQUssS0FBSyxFQUFFO1FBQ3ZDLE1BQU0saUJBQWlCLENBQUM7WUFDdEIsZUFBZSxFQUNiLFNBQVMsQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNqRSxvQkFBb0IsRUFBRTtnQkFDcEIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ3ZCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUNyQixRQUFRLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxtQ0FBSSxDQUFDO3FCQUNyQztpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLE1BQU0sa0NBQ25ELE9BQU8sS0FDVixvQkFBb0IsRUFBRSxvQkFBb0IsSUFDMUMsQ0FBQztBQUNMLENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQWdDLEVBQUUsRUFBRTtJQUNwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLDhCQUE4QixFQUFFLENBQUM7SUFDdEQsUUFBUSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FDM0MsTUFBTSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FDckMsQ0FBQztJQUNGLFFBQVEsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxRQUFRLENBQUMsaUJBQWlCLEdBQUcsOEJBQThCLENBQ3pELE1BQU0sQ0FBQyw0QkFBNEIsQ0FDcEMsQ0FBQztJQUNGLFFBQVEsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUU1QyxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxNQUFnQyxFQUMwQyxFQUFFO0lBQzVFLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQywwQkFBMEIsRUFDakMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQ2hDO1FBQ0Usb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtRQUNqRCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVlGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLE1BQXNDLEVBQ3RDLE9BQTBCLEVBSzFCLEVBQUU7O0lBQ0YsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQ2pDLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMsOEJBQThCLENBQUMsTUFBTSxDQUFDLEVBQ3RDO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztJQUVGLElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZ0JBQWdCLE1BQUssS0FBSyxFQUFFO1FBQ3ZDLE1BQU0saUJBQWlCLENBQUM7WUFDdEIsZUFBZSxFQUNiLFNBQVMsQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNqRSxvQkFBb0IsRUFBRTtnQkFDcEIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ3ZCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUNyQixtQkFBbUIsRUFBRSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLG1DQUFJLENBQUM7cUJBQ2hEO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7S0FDSjtJQUVELE9BQU8sbUJBQW1CLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxrQ0FDMUQsT0FBTyxLQUNWLG9CQUFvQixFQUFFLDBCQUEwQixJQUNoRCxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUM1QyxNQUFzQyxFQUN0QyxFQUFFO0lBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQ0FBb0MsRUFBRSxDQUFDO0lBQzVELFFBQVEsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxRQUFRLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFFNUMsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FDeEMsTUFBc0MsRUFDRyxFQUFFO0lBQzNDLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMsOEJBQThCLENBQUMsTUFBTSxDQUFDLEVBQ3RDO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVdGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUNyQixNQUE0QixFQUM1QixPQUEwQixFQUcxQixFQUFFOztJQUNGLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUNqQyxNQUFNLENBQUMsMkJBQTJCLEVBQ2xDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUM1QjtRQUNFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO1FBQ2pELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtLQUN4QyxDQUNGLENBQUM7SUFFRixJQUFJLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGdCQUFnQixNQUFLLEtBQUssRUFBRTtRQUN2QyxNQUFNLGlCQUFpQixDQUFDO1lBQ3RCLGVBQWUsRUFDYixTQUFTLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDakUsb0JBQW9CLEVBQUU7Z0JBQ3BCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUN2QixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDckIsSUFBSSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksbUNBQUksQ0FBQztxQkFDakM7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLGtDQUMvQyxPQUFPLEtBQ1Ysb0JBQW9CLEVBQUUsMEJBQTBCLElBQ2hELENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUE0QixFQUFFLEVBQUU7SUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO0lBQ2xELFFBQVEsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxRQUFRLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFFNUMsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FDeEMsTUFBNEIsRUFDYSxFQUFFO0lBQzNDLE9BQU8sdUJBQXVCLENBQzVCLE1BQU0sQ0FBQywyQkFBMkIsRUFDbEMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQzVCO1FBQ0UsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7UUFDakQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0tBQ3hDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhleFRvQnl0ZXMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7XG4gIEFjY2VwdE5GVEJpZFJlcXVlc3QsXG4gIEFjY2VwdE5GVEJpZFJlc3BvbnNlLFxuICBBY2NlcHRORlRUcmFuc2ZlclJlcXVlc3QsXG4gIEFjY2VwdE5GVFRyYW5zZmVyUmVzcG9uc2UsXG4gIEJ1cm5ORlRSZXF1ZXN0LFxuICBCdXJuTkZUUmVzcG9uc2UsXG4gIENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSxcbiAgQ3JlYXRlTkZUQmlkUmVxdWVzdCxcbiAgQ3JlYXRlTkZUQmlkUmVzcG9uc2UsXG4gIENyZWF0ZU5GVFJlcXVlc3QsXG4gIENyZWF0ZU5GVFJlc3BvbnNlLFxuICBUcmFuc2Zlck5GVFJlcXVlc3QsXG4gIFRyYW5zZmVyTkZUUmVzcG9uc2UsXG4gIFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGEsXG4gIFVwZGF0ZU5GVFJlcXVlc3QsXG4gIFVwZGF0ZU5GVFJlc3BvbnNlLFxufSBmcm9tICcuLi9iYWNrZW5kLXR5cGVzJztcbmltcG9ydCB7IFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHMgfSBmcm9tICcuLi9kYXRhJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFBY2NlcHRORlRCaWQsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFBY2NlcHRORlRUcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YUJ1cm5ORlQsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFDcmVhdGVORlQsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFORlRCaWQsXG4gIFRyYW5zYWN0aW9uTWV0YWRhdGFORlRUcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YVVwZGF0ZU5GVCxcbiAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzLFxuICBjb25jYXRVaW50OEFycmF5cyxcbiAgZW5jb2RlVVRGOFRvQnl0ZXMsXG4gIHV2YXJpbnQ2NFRvQnVmLFxufSBmcm9tICcuLi9pZGVudGl0eSc7XG5pbXBvcnQgeyBndWFyZFR4UGVybWlzc2lvbiB9IGZyb20gJy4uL2lkZW50aXR5L3Blcm1pc3Npb25zLXV0aWxzJztcbmltcG9ydCB7XG4gIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4LFxuICBnZXRUeFdpdGhGZWVOYW5vcyxcbiAgaGFuZGxlU2lnbkFuZFN1Ym1pdCxcbiAgc3VtVHJhbnNhY3Rpb25GZWVzLFxufSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4LCBUeFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjY3JlYXRlLW5mdFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVORlRSZXF1ZXN0UGFyYW1zID0gVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBDcmVhdGVORlRSZXF1ZXN0LFxuICAgIHwgJ1VwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjaydcbiAgICB8ICdORlRQb3N0SGFzaEhleCdcbiAgICB8ICdOdW1Db3BpZXMnXG4gICAgfCAnTkZUUm95YWx0eVRvQ29pbkJhc2lzUG9pbnRzJ1xuICAgIHwgJ05GVFJveWFsdHlUb0NyZWF0b3JCYXNpc1BvaW50cydcbiAgICB8ICdIYXNVbmxvY2thYmxlJ1xuICAgIHwgJ0lzRm9yU2FsZSdcbiAgPlxuPjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5GVCA9IGFzeW5jIChcbiAgcGFyYW1zOiBDcmVhdGVORlRSZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogVHhSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxcbiAgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxDcmVhdGVORlRSZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT5cbj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQ3JlYXRlTkZUTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgICAgQ29uc2Vuc3VzRXh0cmFEYXRhS1ZzOiBidWlsZENyZWF0ZU5GVENvbnNlbnN1c0tWcyhwYXJhbXMpLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIFRyYW5zYWN0aW9uQ291bnRMaW1pdE1hcDoge1xuICAgICAgICBDUkVBVEVfTkZUOiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2NyZWF0ZS1uZnQnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RDcmVhdGVORlRUcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5jb25zdCBidWlsZENyZWF0ZU5GVE1ldGFkYXRhID0gKHBhcmFtczogQ3JlYXRlTkZUUmVxdWVzdFBhcmFtcykgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQ3JlYXRlTkZUKCk7XG4gIG1ldGFkYXRhLmhhc1VubG9ja2FibGUgPSBwYXJhbXMuSGFzVW5sb2NrYWJsZTtcbiAgbWV0YWRhdGEuaXNGb3JTYWxlID0gcGFyYW1zLklzRm9yU2FsZTtcbiAgbWV0YWRhdGEubWluQmlkQW1vdW50TmFub3MgPSBwYXJhbXMuTWluQmlkQW1vdW50TmFub3MgfHwgMDtcbiAgbWV0YWRhdGEubmZ0UG9zdEhhc2ggPSBoZXhUb0J5dGVzKHBhcmFtcy5ORlRQb3N0SGFzaEhleCk7XG4gIG1ldGFkYXRhLm5mdFJveWFsdHlUb0NvaW5CYXNpc1BvaW50cyA9IHBhcmFtcy5ORlRSb3lhbHR5VG9Db2luQmFzaXNQb2ludHM7XG4gIG1ldGFkYXRhLm5mdFJveWFsdHlUb0NyZWF0b3JCYXNpc1BvaW50cyA9XG4gICAgcGFyYW1zLk5GVFJveWFsdHlUb0NyZWF0b3JCYXNpc1BvaW50cztcbiAgbWV0YWRhdGEubnVtQ29waWVzID0gcGFyYW1zLk51bUNvcGllcztcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5jb25zdCBidWlsZENyZWF0ZU5GVENvbnNlbnN1c0tWcyA9IChwYXJhbXM6IENyZWF0ZU5GVFJlcXVlc3RQYXJhbXMpID0+IHtcbiAgY29uc3QgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzOiBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWW10gPSBbXTtcbiAgaWYgKHBhcmFtcy5Jc0J1eU5vdyAmJiBwYXJhbXMuQnV5Tm93UHJpY2VOYW5vcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc2Vuc3VzRXh0cmFEYXRhS1ZzLnB1c2goXG4gICAgICBuZXcgVHJhbnNhY3Rpb25FeHRyYURhdGFLVihcbiAgICAgICAgZW5jb2RlVVRGOFRvQnl0ZXMoJ0J1eU5vd1ByaWNlTmFub3MnKSxcbiAgICAgICAgdXZhcmludDY0VG9CdWYocGFyYW1zLkJ1eU5vd1ByaWNlTmFub3MpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgcGFyYW1zLkFkZGl0aW9uYWxERVNPUm95YWx0aWVzTWFwICYmXG4gICAgT2JqZWN0LmtleXMocGFyYW1zLkFkZGl0aW9uYWxERVNPUm95YWx0aWVzTWFwKS5sZW5ndGhcbiAgKSB7XG4gICAgY29uc3Qgcm95YWx0eU1hcCA9IHBhcmFtcy5BZGRpdGlvbmFsREVTT1JveWFsdGllc01hcDtcbiAgICBsZXQgYnVmID0gdXZhcmludDY0VG9CdWYoT2JqZWN0LmtleXMocm95YWx0eU1hcCkubGVuZ3RoKTtcbiAgICBPYmplY3Qua2V5cyhyb3lhbHR5TWFwKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgIC5mb3JFYWNoKChwdWJsaWNLZXkpID0+IHtcbiAgICAgICAgYnVmID0gY29uY2F0VWludDhBcnJheXMoW1xuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMocHVibGljS2V5KSxcbiAgICAgICAgICB1dmFyaW50NjRUb0J1Zihyb3lhbHR5TWFwW3B1YmxpY0tleV0pLFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoZW5jb2RlVVRGOFRvQnl0ZXMoJ0RFU09Sb3lhbHRpZXNNYXAnKSwgYnVmKVxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIHBhcmFtcy5BZGRpdGlvbmFsQ29pblJveWFsdGllc01hcCAmJlxuICAgIE9iamVjdC5rZXlzKHBhcmFtcy5BZGRpdGlvbmFsQ29pblJveWFsdGllc01hcCkubGVuZ3RoXG4gICkge1xuICAgIGNvbnN0IHJveWFsdHlNYXAgPSBwYXJhbXMuQWRkaXRpb25hbENvaW5Sb3lhbHRpZXNNYXA7XG4gICAgbGV0IGJ1ZiA9IHV2YXJpbnQ2NFRvQnVmKE9iamVjdC5rZXlzKHJveWFsdHlNYXApLmxlbmd0aCk7XG4gICAgT2JqZWN0LmtleXMocm95YWx0eU1hcClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgICAuZm9yRWFjaCgocHVibGljS2V5KSA9PiB7XG4gICAgICAgIGJ1ZiA9IGNvbmNhdFVpbnQ4QXJyYXlzKFtcbiAgICAgICAgICBidWYsXG4gICAgICAgICAgYnM1OFB1YmxpY0tleVRvQ29tcHJlc3NlZEJ5dGVzKHB1YmxpY0tleSksXG4gICAgICAgICAgdXZhcmludDY0VG9CdWYocm95YWx0eU1hcFtwdWJsaWNLZXldKSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICBjb25zZW5zdXNFeHRyYURhdGFLVnMucHVzaChcbiAgICAgIG5ldyBUcmFuc2FjdGlvbkV4dHJhRGF0YUtWKGVuY29kZVVURjhUb0J5dGVzKCdDb2luUm95YWx0aWVzTWFwJyksIGJ1ZilcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnNlbnN1c0V4dHJhRGF0YUtWcztcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RDcmVhdGVORlRUcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBDcmVhdGVORlRSZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZENyZWF0ZU5GVE1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgQ29uc2Vuc3VzRXh0cmFEYXRhS1ZzOiBidWlsZENyZWF0ZU5GVENvbnNlbnN1c0tWcyhwYXJhbXMpLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9uZnQtdHJhbnNhY3Rpb25zLWFwaSN1cGRhdGUtbmZ0XG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZU5GVFJlcXVlc3RQYXJhbXMgPSBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICBQYXJ0aWFsV2l0aFJlcXVpcmVkRmllbGRzPFxuICAgIFVwZGF0ZU5GVFJlcXVlc3QsXG4gICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ05GVFBvc3RIYXNoSGV4J1xuICAgIHwgJ1NlcmlhbE51bWJlcidcbiAgICB8ICdNaW5CaWRBbW91bnROYW5vcydcbiAgPlxuPjtcbmV4cG9ydCBjb25zdCB1cGRhdGVORlQgPSBhc3luYyAoXG4gIHBhcmFtczogVXBkYXRlTkZUUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8VXBkYXRlTkZUUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+XG4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZFVwZGF0ZU5GVE1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICAgIENvbnNlbnN1c0V4dHJhRGF0YUtWczogYnVpbGRVcGRhdGVORlRDb25zZW5zdXNLVnMocGFyYW1zKSxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgKyBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBUcmFuc2FjdGlvbkNvdW50TGltaXRNYXA6IHtcbiAgICAgICAgVVBEQVRFX05GVDogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC91cGRhdGUtbmZ0JywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0VXBkYXRlTkZUVHJhbnNhY3Rpb24sXG4gIH0pO1xufTtcblxuY29uc3QgYnVpbGRVcGRhdGVORlRNZXRhZGF0YSA9IChwYXJhbXM6IFVwZGF0ZU5GVFJlcXVlc3RQYXJhbXMpID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBuZXcgVHJhbnNhY3Rpb25NZXRhZGF0YVVwZGF0ZU5GVCgpO1xuICBtZXRhZGF0YS5pc0ZvclNhbGUgPSAhIXBhcmFtcy5Jc0ZvclNhbGU7XG4gIG1ldGFkYXRhLm1pbkJpZEFtb3VudE5hbm9zID0gcGFyYW1zLk1pbkJpZEFtb3VudE5hbm9zO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcbiAgcmV0dXJuIG1ldGFkYXRhO1xufTtcblxuY29uc3QgYnVpbGRVcGRhdGVORlRDb25zZW5zdXNLVnMgPSAocGFyYW1zOiBVcGRhdGVORlRSZXF1ZXN0UGFyYW1zKSA9PiB7XG4gIGNvbnN0IGNvbnNlbnN1c0V4dHJhRGF0YUtWczogVHJhbnNhY3Rpb25FeHRyYURhdGFLVltdID0gW107XG4gIGlmIChwYXJhbXMuSXNCdXlOb3cgJiYgcGFyYW1zLkJ1eU5vd1ByaWNlTmFub3MgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnNlbnN1c0V4dHJhRGF0YUtWcy5wdXNoKFxuICAgICAgbmV3IFRyYW5zYWN0aW9uRXh0cmFEYXRhS1YoXG4gICAgICAgIGVuY29kZVVURjhUb0J5dGVzKCdCdXlOb3dQcmljZU5hbm9zJyksXG4gICAgICAgIHV2YXJpbnQ2NFRvQnVmKHBhcmFtcy5CdXlOb3dQcmljZU5hbm9zKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNvbnNlbnN1c0V4dHJhRGF0YUtWcztcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RVcGRhdGVORlRUcmFuc2FjdGlvbiA9IChcbiAgcGFyYW1zOiBVcGRhdGVORlRSZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZFVwZGF0ZU5GVE1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICAgIENvbnNlbnN1c0V4dHJhRGF0YUtWczogYnVpbGRVcGRhdGVORlRDb25zZW5zdXNLVnMocGFyYW1zKSxcbiAgICB9XG4gICk7XG59O1xuXG4vKipcbiAqIGh0dHBzOi8vZG9jcy5kZXNvLm9yZy9kZXNvLWJhY2tlbmQvY29uc3RydWN0LXRyYW5zYWN0aW9ucy9uZnQtdHJhbnNhY3Rpb25zLWFwaSNjcmVhdGUtbmZ0LWJpZFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVORlRCaWRSZXF1ZXN0UGFyYW1zID0gVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBDcmVhdGVORlRCaWRSZXF1ZXN0LFxuICAgIHwgJ0JpZEFtb3VudE5hbm9zJ1xuICAgIHwgJ05GVFBvc3RIYXNoSGV4J1xuICAgIHwgJ1NlcmlhbE51bWJlcidcbiAgICB8ICdVcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gID5cbj47XG5leHBvcnQgY29uc3QgY3JlYXRlTkZUQmlkID0gYXN5bmMgKFxuICBwYXJhbXM6IENyZWF0ZU5GVEJpZFJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFxuICAgIENyZWF0ZU5GVEJpZFJlc3BvbnNlIHwgQ29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlXG4gID5cbj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQ3JlYXRlTkZUQmlkTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcblxuICBpZiAob3B0aW9ucz8uY2hlY2tQZXJtaXNzaW9ucyAhPT0gZmFsc2UpIHtcbiAgICBhd2FpdCBndWFyZFR4UGVybWlzc2lvbih7XG4gICAgICBHbG9iYWxERVNPTGltaXQ6XG4gICAgICAgIHBhcmFtcy5CaWRBbW91bnROYW5vcyArXG4gICAgICAgIHR4V2l0aEZlZS5mZWVOYW5vcyArXG4gICAgICAgIHN1bVRyYW5zYWN0aW9uRmVlcyhwYXJhbXMuVHJhbnNhY3Rpb25GZWVzKSxcbiAgICAgIE5GVE9wZXJhdGlvbkxpbWl0TWFwOiB7XG4gICAgICAgIFtwYXJhbXMuTkZUUG9zdEhhc2hIZXhdOiB7XG4gICAgICAgICAgW3BhcmFtcy5TZXJpYWxOdW1iZXJdOiB7XG4gICAgICAgICAgICBuZnRfYmlkOiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVTaWduQW5kU3VibWl0KCdhcGkvdjAvY3JlYXRlLW5mdC1iaWQnLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RORlRCaWRUcmFuc2FjdGlvbixcbiAgfSk7XG59O1xuXG5jb25zdCBidWlsZENyZWF0ZU5GVEJpZE1ldGFkYXRhID0gKHBhcmFtczogQ3JlYXRlTkZUQmlkUmVxdWVzdFBhcmFtcykgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhTkZUQmlkKCk7XG4gIG1ldGFkYXRhLmJpZEFtb3VudE5hbm9zID0gcGFyYW1zLkJpZEFtb3VudE5hbm9zO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0TkZUQmlkVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogQ3JlYXRlTkZUQmlkUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRDcmVhdGVORlRCaWRNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjYWNjZXB0LW5mdC1iaWRcbiAqL1xuZXhwb3J0IHR5cGUgQWNjZXB0TkZUQmlkUmVxdWVzdFBhcmFtcyA9IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgQWNjZXB0TkZUQmlkUmVxdWVzdCxcbiAgICB8ICdCaWRBbW91bnROYW5vcydcbiAgICB8ICdORlRQb3N0SGFzaEhleCdcbiAgICB8ICdTZXJpYWxOdW1iZXInXG4gICAgfCAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ0JpZGRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICA+XG4+O1xuZXhwb3J0IGNvbnN0IGFjY2VwdE5GVEJpZCA9IGFzeW5jIChcbiAgcGFyYW1zOiBBY2NlcHRORlRCaWRSZXF1ZXN0UGFyYW1zLFxuICBvcHRpb25zPzogVHhSZXF1ZXN0T3B0aW9uc1xuKTogUHJvbWlzZTxcbiAgQ29uc3RydWN0ZWRBbmRTdWJtaXR0ZWRUeDxcbiAgICBBY2NlcHRORlRCaWRSZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZVxuICA+XG4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZEFjY2VwdE5GVEJpZE1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICBwYXJhbXMuQmlkQW1vdW50TmFub3MgK1xuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgK1xuICAgICAgICBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBORlRPcGVyYXRpb25MaW1pdE1hcDoge1xuICAgICAgICBbcGFyYW1zLk5GVFBvc3RIYXNoSGV4XToge1xuICAgICAgICAgIFtwYXJhbXMuU2VyaWFsTnVtYmVyXToge1xuICAgICAgICAgICAgYWNjZXB0X25mdF9iaWQ6IG9wdGlvbnM/LnR4TGltaXRDb3VudCA/PyAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVNpZ25BbmRTdWJtaXQoJ2FwaS92MC9hY2NlcHQtbmZ0LWJpZCcsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdEFjY2VwdE5GVEJpZFRyYW5zYWN0aW9uLFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkQWNjZXB0TkZUQmlkTWV0YWRhdGEgPSAocGFyYW1zOiBBY2NlcHRORlRCaWRSZXF1ZXN0UGFyYW1zKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFBY2NlcHRORlRCaWQoKTtcbiAgbWV0YWRhdGEuYmlkQW1vdW50TmFub3MgPSBwYXJhbXMuQmlkQW1vdW50TmFub3M7XG4gIG1ldGFkYXRhLmJpZGRlcklucHV0cyA9IFtdO1xuICAvLyBUT0RPOiB0aGlzIHdvbid0IHdvcmsgaWYgdGhleSd2ZSBoYWQgdGhlaXIgaWRlbnRpdHkgc3dhcHBlZC5cbiAgbWV0YWRhdGEuYmlkZGVyUEtJRCA9IGJzNThQdWJsaWNLZXlUb0NvbXByZXNzZWRCeXRlcyhcbiAgICBwYXJhbXMuQmlkZGVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEuZW5jcnlwdGVkVW5sb2NrYWJsZVRleHQgPSBoZXhUb0J5dGVzKFxuICAgIHBhcmFtcy5FbmNyeXB0ZWRVbmxvY2thYmxlVGV4dCB8fCAnJ1xuICApO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0QWNjZXB0TkZUQmlkVHJhbnNhY3Rpb24gPSAoXG4gIHBhcmFtczogQWNjZXB0TkZUQmlkUmVxdWVzdFBhcmFtc1xuKTogUHJvbWlzZTxDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgcmV0dXJuIGNvbnN0cnVjdEJhbGFuY2VNb2RlbFR4KFxuICAgIHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRBY2NlcHRORlRCaWRNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjdHJhbnNmZXItbmZ0XG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZmVyTkZUUmVxdWVzdFBhcmFtcyA9IFR4UmVxdWVzdFdpdGhPcHRpb25hbEZlZXNBbmRFeHRyYURhdGE8XG4gIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgVHJhbnNmZXJORlRSZXF1ZXN0LFxuICAgIHwgJ1NlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrJ1xuICAgIHwgJ1JlY2VpdmVyUHVibGljS2V5QmFzZTU4Q2hlY2snXG4gICAgfCAnTkZUUG9zdEhhc2hIZXgnXG4gICAgfCAnU2VyaWFsTnVtYmVyJ1xuICA+XG4+O1xuZXhwb3J0IGNvbnN0IHRyYW5zZmVyTkZUID0gYXN5bmMgKFxuICBwYXJhbXM6IFRyYW5zZmVyTkZUUmVxdWVzdFBhcmFtcyxcbiAgb3B0aW9ucz86IFR4UmVxdWVzdE9wdGlvbnNcbik6IFByb21pc2U8XG4gIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8XG4gICAgVHJhbnNmZXJORlRSZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZVxuICA+XG4+ID0+IHtcbiAgY29uc3QgdHhXaXRoRmVlID0gZ2V0VHhXaXRoRmVlTmFub3MoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkVHJhbnNmZXJORlRNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIEV4dHJhRGF0YTogcGFyYW1zLkV4dHJhRGF0YSxcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xuXG4gIGlmIChvcHRpb25zPy5jaGVja1Blcm1pc3Npb25zICE9PSBmYWxzZSkge1xuICAgIGF3YWl0IGd1YXJkVHhQZXJtaXNzaW9uKHtcbiAgICAgIEdsb2JhbERFU09MaW1pdDpcbiAgICAgICAgdHhXaXRoRmVlLmZlZU5hbm9zICsgc3VtVHJhbnNhY3Rpb25GZWVzKHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMpLFxuICAgICAgTkZUT3BlcmF0aW9uTGltaXRNYXA6IHtcbiAgICAgICAgW3BhcmFtcy5ORlRQb3N0SGFzaEhleF06IHtcbiAgICAgICAgICBbcGFyYW1zLlNlcmlhbE51bWJlcl06IHtcbiAgICAgICAgICAgIHRyYW5zZmVyOiBvcHRpb25zPy50eExpbWl0Q291bnQgPz8gMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL3RyYW5zZmVyLW5mdCcsIHBhcmFtcywge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29uc3RydWN0aW9uRnVuY3Rpb246IGNvbnN0cnVjdFRyYW5zZmVyTkZULFxuICB9KTtcbn07XG5cbmNvbnN0IGJ1aWxkVHJhbnNmZXJORlRNZXRhZGF0YSA9IChwYXJhbXM6IFRyYW5zZmVyTkZUUmVxdWVzdFBhcmFtcykgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhTkZUVHJhbnNmZXIoKTtcbiAgbWV0YWRhdGEuZW5jcnlwdGVkVW5sb2NrYWJsZVRleHQgPSBoZXhUb0J5dGVzKFxuICAgIHBhcmFtcy5FbmNyeXB0ZWRVbmxvY2thYmxlVGV4dCB8fCAnJ1xuICApO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEucmVjZWl2ZXJQdWJsaWNLZXkgPSBiczU4UHVibGljS2V5VG9Db21wcmVzc2VkQnl0ZXMoXG4gICAgcGFyYW1zLlJlY2VpdmVyUHVibGljS2V5QmFzZTU4Q2hlY2tcbiAgKTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0VHJhbnNmZXJORlQgPSAoXG4gIHBhcmFtczogVHJhbnNmZXJORlRSZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlNlbmRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkVHJhbnNmZXJORlRNZXRhZGF0YShwYXJhbXMpLFxuICAgIHtcbiAgICAgIE1pbkZlZVJhdGVOYW5vc1BlcktCOiBwYXJhbXMuTWluRmVlUmF0ZU5hbm9zUGVyS0IsXG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBUcmFuc2FjdGlvbkZlZXM6IHBhcmFtcy5UcmFuc2FjdGlvbkZlZXMsXG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBodHRwczovL2RvY3MuZGVzby5vcmcvZGVzby1iYWNrZW5kL2NvbnN0cnVjdC10cmFuc2FjdGlvbnMvbmZ0LXRyYW5zYWN0aW9ucy1hcGkjYWNjZXB0LW5mdC10cmFuc2ZlclxuICovXG5leHBvcnQgdHlwZSBBY2NlcHRORlRUcmFuc2ZlclJlcXVlc3RQYXJhbXMgPVxuICBUeFJlcXVlc3RXaXRoT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhPFxuICAgIFBhcnRpYWxXaXRoUmVxdWlyZWRGaWVsZHM8XG4gICAgICBBY2NlcHRORlRUcmFuc2ZlclJlcXVlc3QsXG4gICAgICAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJyB8ICdORlRQb3N0SGFzaEhleCcgfCAnU2VyaWFsTnVtYmVyJ1xuICAgID5cbiAgPjtcbmV4cG9ydCBjb25zdCBhY2NlcHRORlRUcmFuc2ZlciA9IGFzeW5jIChcbiAgcGFyYW1zOiBBY2NlcHRORlRUcmFuc2ZlclJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PFxuICAgIEFjY2VwdE5GVFRyYW5zZmVyUmVzcG9uc2UgfCBDb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2VcbiAgPlxuPiA9PiB7XG4gIGNvbnN0IHR4V2l0aEZlZSA9IGdldFR4V2l0aEZlZU5hbm9zKFxuICAgIHBhcmFtcy5VcGRhdGVyUHVibGljS2V5QmFzZTU4Q2hlY2ssXG4gICAgYnVpbGRBY2NlcHRORlRUcmFuc2Zlck1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgKyBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBORlRPcGVyYXRpb25MaW1pdE1hcDoge1xuICAgICAgICBbcGFyYW1zLk5GVFBvc3RIYXNoSGV4XToge1xuICAgICAgICAgIFtwYXJhbXMuU2VyaWFsTnVtYmVyXToge1xuICAgICAgICAgICAgYWNjZXB0X25mdF90cmFuc2Zlcjogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2FjY2VwdC1uZnQtdHJhbnNmZXInLCBwYXJhbXMsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNvbnN0cnVjdGlvbkZ1bmN0aW9uOiBjb25zdHJ1Y3RBY2NlcHRORlRUcmFuc2ZlcixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRBY2NlcHRORlRUcmFuc2Zlck1ldGFkYXRhID0gKFxuICBwYXJhbXM6IEFjY2VwdE5GVFRyYW5zZmVyUmVxdWVzdFBhcmFtc1xuKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gbmV3IFRyYW5zYWN0aW9uTWV0YWRhdGFBY2NlcHRORlRUcmFuc2ZlcigpO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0QWNjZXB0TkZUVHJhbnNmZXIgPSAoXG4gIHBhcmFtczogQWNjZXB0TkZUVHJhbnNmZXJSZXF1ZXN0UGFyYW1zXG4pOiBQcm9taXNlPENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT4gPT4ge1xuICByZXR1cm4gY29uc3RydWN0QmFsYW5jZU1vZGVsVHgoXG4gICAgcGFyYW1zLlVwZGF0ZXJQdWJsaWNLZXlCYXNlNThDaGVjayxcbiAgICBidWlsZEFjY2VwdE5GVFRyYW5zZmVyTWV0YWRhdGEocGFyYW1zKSxcbiAgICB7XG4gICAgICBFeHRyYURhdGE6IHBhcmFtcy5FeHRyYURhdGEsXG4gICAgICBNaW5GZWVSYXRlTmFub3NQZXJLQjogcGFyYW1zLk1pbkZlZVJhdGVOYW5vc1BlcktCLFxuICAgICAgVHJhbnNhY3Rpb25GZWVzOiBwYXJhbXMuVHJhbnNhY3Rpb25GZWVzLFxuICAgIH1cbiAgKTtcbn07XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmRlc28ub3JnL2Rlc28tYmFja2VuZC9jb25zdHJ1Y3QtdHJhbnNhY3Rpb25zL25mdC10cmFuc2FjdGlvbnMtYXBpI2J1cm4tbmZ0XG4gKi9cbmV4cG9ydCB0eXBlIEJ1cm5ORlRSZXF1ZXN0UGFyYW1zID0gVHhSZXF1ZXN0V2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxcbiAgUGFydGlhbFdpdGhSZXF1aXJlZEZpZWxkczxcbiAgICBCdXJuTkZUUmVxdWVzdCxcbiAgICAnVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrJyB8ICdORlRQb3N0SGFzaEhleCcgfCAnU2VyaWFsTnVtYmVyJ1xuICA+XG4+O1xuZXhwb3J0IGNvbnN0IGJ1cm5ORlQgPSBhc3luYyAoXG4gIHBhcmFtczogQnVybk5GVFJlcXVlc3RQYXJhbXMsXG4gIG9wdGlvbnM/OiBUeFJlcXVlc3RPcHRpb25zXG4pOiBQcm9taXNlPFxuICBDb25zdHJ1Y3RlZEFuZFN1Ym1pdHRlZFR4PEJ1cm5ORlRSZXNwb25zZSB8IENvbnN0cnVjdGVkVHJhbnNhY3Rpb25SZXNwb25zZT5cbj4gPT4ge1xuICBjb25zdCB0eFdpdGhGZWUgPSBnZXRUeFdpdGhGZWVOYW5vcyhcbiAgICBwYXJhbXMuVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQnVybk5GVE1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG5cbiAgaWYgKG9wdGlvbnM/LmNoZWNrUGVybWlzc2lvbnMgIT09IGZhbHNlKSB7XG4gICAgYXdhaXQgZ3VhcmRUeFBlcm1pc3Npb24oe1xuICAgICAgR2xvYmFsREVTT0xpbWl0OlxuICAgICAgICB0eFdpdGhGZWUuZmVlTmFub3MgKyBzdW1UcmFuc2FjdGlvbkZlZXMocGFyYW1zLlRyYW5zYWN0aW9uRmVlcyksXG4gICAgICBORlRPcGVyYXRpb25MaW1pdE1hcDoge1xuICAgICAgICBbcGFyYW1zLk5GVFBvc3RIYXNoSGV4XToge1xuICAgICAgICAgIFtwYXJhbXMuU2VyaWFsTnVtYmVyXToge1xuICAgICAgICAgICAgYnVybjogb3B0aW9ucz8udHhMaW1pdENvdW50ID8/IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlU2lnbkFuZFN1Ym1pdCgnYXBpL3YwL2J1cm4tbmZ0JywgcGFyYW1zLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb25zdHJ1Y3Rpb25GdW5jdGlvbjogY29uc3RydWN0QnVybk5GVFRyYW5zYXRpb24sXG4gIH0pO1xufTtcblxuY29uc3QgYnVpbGRCdXJuTkZUTWV0YWRhdGEgPSAocGFyYW1zOiBCdXJuTkZUUmVxdWVzdFBhcmFtcykgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IG5ldyBUcmFuc2FjdGlvbk1ldGFkYXRhQnVybk5GVCgpO1xuICBtZXRhZGF0YS5uZnRQb3N0SGFzaCA9IGhleFRvQnl0ZXMocGFyYW1zLk5GVFBvc3RIYXNoSGV4KTtcbiAgbWV0YWRhdGEuc2VyaWFsTnVtYmVyID0gcGFyYW1zLlNlcmlhbE51bWJlcjtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0QnVybk5GVFRyYW5zYXRpb24gPSAoXG4gIHBhcmFtczogQnVybk5GVFJlcXVlc3RQYXJhbXNcbik6IFByb21pc2U8Q29uc3RydWN0ZWRUcmFuc2FjdGlvblJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBjb25zdHJ1Y3RCYWxhbmNlTW9kZWxUeChcbiAgICBwYXJhbXMuVXBkYXRlclB1YmxpY0tleUJhc2U1OENoZWNrLFxuICAgIGJ1aWxkQnVybk5GVE1ldGFkYXRhKHBhcmFtcyksXG4gICAge1xuICAgICAgRXh0cmFEYXRhOiBwYXJhbXMuRXh0cmFEYXRhLFxuICAgICAgTWluRmVlUmF0ZU5hbm9zUGVyS0I6IHBhcmFtcy5NaW5GZWVSYXRlTmFub3NQZXJLQixcbiAgICAgIFRyYW5zYWN0aW9uRmVlczogcGFyYW1zLlRyYW5zYWN0aW9uRmVlcyxcbiAgICB9XG4gICk7XG59O1xuIl19

@@ -1,9 +0,10 @@

import { ConstructedTransactionResponse, CreateFollowTxnStatelessRequest, CreateFollowTxnStatelessResponse, CreateLikeStatelessRequest, CreateLikeStatelessResponse, RequestOptions, SendDiamondsRequest, SendDiamondsResponse, SendNewMessageRequest, SendNewMessageResponse, SubmitPostRequest, SubmitPostResponse, UpdateProfileRequest, UpdateProfileResponse } from '../backend-types';
import { ConstructedTransactionResponse, CreateFollowTxnStatelessRequest, CreateFollowTxnStatelessResponse, CreateLikeStatelessRequest, CreateLikeStatelessResponse, SendDiamondsRequest, SendDiamondsResponse, SendNewMessageRequest, SendNewMessageResponse, SubmitPostRequest, SubmitPostResponse, TransactionFee, UpdateProfileRequest, UpdateProfileResponse } from '../backend-types';
import { PartialWithRequiredFields } from '../data';
import { ConstructedAndSubmittedTx, TypeWithOptionalFeesAndExtraData } from '../types';
import { ConstructedAndSubmittedTx, TxRequestOptions, TypeWithOptionalFeesAndExtraData } from '../types';
export declare const constructUpdateProfileTransaction: (params: TypeWithOptionalFeesAndExtraData<UpdateProfileRequest>) => Promise<ConstructedTransactionResponse>;
/**
* https://docs.deso.org/deso-backend/construct-transactions/social-transactions-api#update-profile
*/
export declare const updateProfile: (params: TypeWithOptionalFeesAndExtraData<UpdateProfileRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<UpdateProfileResponse | ConstructedTransactionResponse>>;
export declare const constructUpdateProfileTransaction: (params: TypeWithOptionalFeesAndExtraData<UpdateProfileRequest>) => Promise<ConstructedTransactionResponse>;
export declare const updateProfile: (params: TypeWithOptionalFeesAndExtraData<UpdateProfileRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<UpdateProfileResponse | ConstructedTransactionResponse>>;
export declare const constructSubmitPost: (params: SubmitPostRequestParams) => Promise<ConstructedTransactionResponse>;
/**

@@ -13,4 +14,3 @@ * https://docs.deso.org/deso-backend/construct-transactions/social-transactions-api#submit-post

export type SubmitPostRequestParams = TypeWithOptionalFeesAndExtraData<PartialWithRequiredFields<SubmitPostRequest, 'UpdaterPublicKeyBase58Check' | 'BodyObj'>>;
export declare const submitPost: (params: SubmitPostRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<SubmitPostResponse | ConstructedTransactionResponse>>;
export declare const constructSubmitPost: (params: SubmitPostRequestParams) => Promise<ConstructedTransactionResponse>;
export declare const submitPost: (params: SubmitPostRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SubmitPostResponse | ConstructedTransactionResponse>>;
/**

@@ -20,3 +20,3 @@ * https://docs.deso.org/deso-backend/construct-transactions/social-transactions-api#follow

export type CreateFollowTxnRequestParams = TypeWithOptionalFeesAndExtraData<PartialWithRequiredFields<CreateFollowTxnStatelessRequest, 'FollowedPublicKeyBase58Check' | 'FollowerPublicKeyBase58Check'>>;
export declare const updateFollowingStatus: (params: CreateFollowTxnRequestParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<CreateFollowTxnStatelessResponse>>;
export declare const updateFollowingStatus: (params: CreateFollowTxnRequestParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<CreateFollowTxnStatelessResponse>>;
export declare const constructFollowTransaction: (params: CreateFollowTxnRequestParams) => Promise<ConstructedTransactionResponse>;

@@ -26,3 +26,3 @@ /**

*/
export declare const sendDiamonds: (params: TypeWithOptionalFeesAndExtraData<SendDiamondsRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<SendDiamondsResponse>>;
export declare const sendDiamonds: (params: TypeWithOptionalFeesAndExtraData<SendDiamondsRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SendDiamondsResponse>>;
export declare const constructDiamondTransaction: (params: TypeWithOptionalFeesAndExtraData<SendDiamondsRequest>) => Promise<ConstructedTransactionResponse>;

@@ -33,3 +33,3 @@ /**

export type CreateLikeTransactionParams = TypeWithOptionalFeesAndExtraData<PartialWithRequiredFields<CreateLikeStatelessRequest, 'LikedPostHashHex' | 'ReaderPublicKeyBase58Check'>>;
export declare const updateLikeStatus: (params: CreateLikeTransactionParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<CreateLikeStatelessResponse>>;
export declare const updateLikeStatus: (params: CreateLikeTransactionParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<CreateLikeStatelessResponse>>;
export declare const constructLikeTransaction: (params: CreateLikeTransactionParams) => Promise<ConstructedTransactionResponse>;

@@ -41,3 +41,3 @@ /**

type SendNewMessageParams = TypeWithOptionalFeesAndExtraData<Omit<SendNewMessageRequest, 'TimestampNanosString'>>;
export declare const sendDMMessage: (params: SendNewMessageParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const sendDMMessage: (params: SendNewMessageParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const constructSendDMTransaction: (params: SendNewMessageParams) => Promise<ConstructedTransactionResponse>;

@@ -47,3 +47,3 @@ /**

*/
export declare const updateDMMessage: (params: TypeWithOptionalFeesAndExtraData<SendNewMessageRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const updateDMMessage: (params: TypeWithOptionalFeesAndExtraData<SendNewMessageRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const constructUpdateDMTransaction: (params: TypeWithOptionalFeesAndExtraData<SendNewMessageRequest>) => Promise<ConstructedTransactionResponse>;

@@ -53,3 +53,3 @@ /**

*/
export declare const sendGroupChatMessage: (params: SendNewMessageParams, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const sendGroupChatMessage: (params: SendNewMessageParams, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const constructSendGroupChatMessageTransaction: (params: SendNewMessageParams) => Promise<ConstructedTransactionResponse>;

@@ -72,11 +72,12 @@ /**

MinFeeRateNanosPerKB?: number;
TransactionFees?: TransactionFee[];
}
export declare const sendMessage: (params: SendMessageParams, options?: RequestOptions & {
export declare const sendMessage: (params: SendMessageParams, options?: TxRequestOptions & {
sendMessageUnencrypted?: boolean;
}) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
}) => Promise<ConstructedAndSubmittedTx<ConstructedTransactionResponse | SendNewMessageResponse>>;
/**
* https://docs.deso.org/deso-backend/construct-transactions/social-transactions-api#send-group-chat-message
*/
export declare const updateGroupChatMessage: (params: TypeWithOptionalFeesAndExtraData<SendNewMessageRequest>, options?: RequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const updateGroupChatMessage: (params: TypeWithOptionalFeesAndExtraData<SendNewMessageRequest>, options?: TxRequestOptions) => Promise<ConstructedAndSubmittedTx<SendNewMessageResponse | ConstructedTransactionResponse>>;
export declare const constructUpdateGroupChatMessageTransaction: (params: TypeWithOptionalFeesAndExtraData<SendNewMessageRequest>) => Promise<ConstructedTransactionResponse>;
export {};

@@ -1,2 +0,2 @@

import { SubmitTransactionResponse, TransactionFee } from './backend-types';
import { RequestOptions, SubmitTransactionResponse, TransactionFee } from './backend-types';
export interface OptionalFeesAndExtraData {

@@ -14,1 +14,5 @@ MinFeeRateNanosPerKB?: number;

}
export type TxRequestOptions = RequestOptions & {
txLimitCount?: number | 'UNLIMITED';
checkPermissions?: boolean;
};
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1Ym1pdFRyYW5zYWN0aW9uUmVzcG9uc2UsIFRyYW5zYWN0aW9uRmVlIH0gZnJvbSAnLi9iYWNrZW5kLXR5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhIHtcbiAgTWluRmVlUmF0ZU5hbm9zUGVyS0I/OiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uRmVlcz86IFRyYW5zYWN0aW9uRmVlW10gfCBudWxsO1xuICBFeHRyYURhdGE/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgdHlwZSBUeXBlV2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxUPiA9IE9taXQ8XG4gIFQsXG4gICdNaW5GZWVSYXRlTmFub3NQZXJLQicgfCAnVHJhbnNhY3Rpb25GZWVzJyB8ICdFeHRyYURhdGEnIHwgJ0luVHV0b3JpYWwnXG4+ICZcbiAgT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8VD4ge1xuICBjb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U6IFQ7XG4gIC8vIFRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSBicm9hZGNhc3Qgb3B0aW9uIGlzIHNldCB0byBmYWxzZS5cbiAgc3VibWl0dGVkVHJhbnNhY3Rpb25SZXNwb25zZTogU3VibWl0VHJhbnNhY3Rpb25SZXNwb25zZSB8IG51bGw7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJlcXVlc3RPcHRpb25zLFxuICBTdWJtaXRUcmFuc2FjdGlvblJlc3BvbnNlLFxuICBUcmFuc2FjdGlvbkZlZSxcbn0gZnJvbSAnLi9iYWNrZW5kLXR5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhIHtcbiAgTWluRmVlUmF0ZU5hbm9zUGVyS0I/OiBudW1iZXI7XG4gIFRyYW5zYWN0aW9uRmVlcz86IFRyYW5zYWN0aW9uRmVlW10gfCBudWxsO1xuICBFeHRyYURhdGE/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgdHlwZSBUeXBlV2l0aE9wdGlvbmFsRmVlc0FuZEV4dHJhRGF0YTxUPiA9IE9taXQ8XG4gIFQsXG4gICdNaW5GZWVSYXRlTmFub3NQZXJLQicgfCAnVHJhbnNhY3Rpb25GZWVzJyB8ICdFeHRyYURhdGEnIHwgJ0luVHV0b3JpYWwnXG4+ICZcbiAgT3B0aW9uYWxGZWVzQW5kRXh0cmFEYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cnVjdGVkQW5kU3VibWl0dGVkVHg8VD4ge1xuICBjb25zdHJ1Y3RlZFRyYW5zYWN0aW9uUmVzcG9uc2U6IFQ7XG4gIC8vIFRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSBicm9hZGNhc3Qgb3B0aW9uIGlzIHNldCB0byBmYWxzZS5cbiAgc3VibWl0dGVkVHJhbnNhY3Rpb25SZXNwb25zZTogU3VibWl0VHJhbnNhY3Rpb25SZXNwb25zZSB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFR4UmVxdWVzdE9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucyAmIHtcbiAgdHhMaW1pdENvdW50PzogbnVtYmVyIHwgJ1VOTElNSVRFRCc7XG4gIGNoZWNrUGVybWlzc2lvbnM/OiBib29sZWFuO1xufTtcbiJdfQ==

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc