@aws-cdk/aws-bedrock-agentcore-alpha 2.221.0-alpha.0 → 2.222.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3794 -502
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +69 -1
- package/README.md +327 -5
- package/agentcore/index.d.ts +4 -0
- package/agentcore/index.js +5 -1
- package/agentcore/memory/memory-strategy.d.ts +164 -0
- package/agentcore/memory/memory-strategy.js +174 -0
- package/agentcore/memory/memory.d.ts +538 -0
- package/agentcore/memory/memory.js +661 -0
- package/agentcore/memory/perms.d.ts +63 -0
- package/agentcore/memory/perms.js +90 -0
- package/agentcore/memory/strategies/managed-strategy.d.ts +133 -0
- package/agentcore/memory/strategies/managed-strategy.js +209 -0
- package/agentcore/memory/strategies/self-managed-strategy.d.ts +127 -0
- package/agentcore/memory/strategies/self-managed-strategy.js +254 -0
- package/agentcore/memory/validation-helpers.d.ts +41 -0
- package/agentcore/memory/validation-helpers.js +89 -0
- package/agentcore/network/network-configuration.js +4 -4
- package/agentcore/runtime/runtime-artifact.js +1 -1
- package/agentcore/runtime/runtime-authorizer-configuration.d.ts +4 -4
- package/agentcore/runtime/runtime-authorizer-configuration.js +13 -32
- package/agentcore/runtime/runtime-base.js +3 -13
- package/agentcore/runtime/runtime-endpoint-base.js +1 -1
- package/agentcore/runtime/runtime-endpoint.js +1 -1
- package/agentcore/runtime/runtime.d.ts +2 -2
- package/agentcore/runtime/runtime.js +16 -17
- package/agentcore/runtime/types.d.ts +5 -1
- package/agentcore/runtime/types.js +5 -1
- package/agentcore/tools/browser.js +2 -2
- package/agentcore/tools/code-interpreter.js +2 -2
- package/package.json +14 -7
- package/rosetta/default.ts-fixture +4 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
5
|
+
* with the License. A copy of the License is located at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
10
|
+
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
11
|
+
* and limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
export declare namespace MemoryPerms {
|
|
14
|
+
/******************************************************************************
|
|
15
|
+
* Data Plane Permissions
|
|
16
|
+
*****************************************************************************/
|
|
17
|
+
/**
|
|
18
|
+
* Permissions for Short-Term Memory (STM)
|
|
19
|
+
*/
|
|
20
|
+
namespace STM {
|
|
21
|
+
/**
|
|
22
|
+
* Permissions to write Short-Term Memory (STM)
|
|
23
|
+
*/
|
|
24
|
+
const WRITE_PERMS: string[];
|
|
25
|
+
/**
|
|
26
|
+
* Permissions to read Short-Term Memory (STM)
|
|
27
|
+
*/
|
|
28
|
+
const READ_PERMS: string[];
|
|
29
|
+
/**
|
|
30
|
+
* Permissions to delete Short-Term Memory (STM)
|
|
31
|
+
*/
|
|
32
|
+
const DELETE_PERMS: string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Permissions for Long-Term Memory (LTM)
|
|
36
|
+
*/
|
|
37
|
+
namespace LTM {
|
|
38
|
+
/**
|
|
39
|
+
* Permissions to read Long-Term Memory (LTM)
|
|
40
|
+
*/
|
|
41
|
+
const READ_PERMS: string[];
|
|
42
|
+
/**
|
|
43
|
+
* Permissions to delete Long-Term Memory (LTM)
|
|
44
|
+
*/
|
|
45
|
+
const DELETE_PERMS: string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Permissions to read both Short-Term Memory (STM) and Long-Term Memory (LTM)
|
|
49
|
+
*/
|
|
50
|
+
const READ_PERMS: string[];
|
|
51
|
+
/**
|
|
52
|
+
* Permissions to delete both Short-Term Memory (STM) and Long-Term Memory (LTM)
|
|
53
|
+
*/
|
|
54
|
+
const DELETE_PERMS: string[];
|
|
55
|
+
/******************************************************************************
|
|
56
|
+
* Control Plane Permissions
|
|
57
|
+
*****************************************************************************/
|
|
58
|
+
/**
|
|
59
|
+
* Grants control plane operations to manage the memory (CRUD)
|
|
60
|
+
*/
|
|
61
|
+
const ADMIN_PERMS: string[];
|
|
62
|
+
const FULL_ACCESS_PERMS: string[];
|
|
63
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
6
|
+
* with the License. A copy of the License is located at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
11
|
+
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
12
|
+
* and limitations under the License.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MemoryPerms = void 0;
|
|
16
|
+
var MemoryPerms;
|
|
17
|
+
(function (MemoryPerms) {
|
|
18
|
+
/******************************************************************************
|
|
19
|
+
* Data Plane Permissions
|
|
20
|
+
*****************************************************************************/
|
|
21
|
+
/**
|
|
22
|
+
* Permissions for Short-Term Memory (STM)
|
|
23
|
+
*/
|
|
24
|
+
let STM;
|
|
25
|
+
(function (STM) {
|
|
26
|
+
/**
|
|
27
|
+
* Permissions to write Short-Term Memory (STM)
|
|
28
|
+
*/
|
|
29
|
+
STM.WRITE_PERMS = ['bedrock-agentcore:CreateEvent'];
|
|
30
|
+
/**
|
|
31
|
+
* Permissions to read Short-Term Memory (STM)
|
|
32
|
+
*/
|
|
33
|
+
STM.READ_PERMS = [
|
|
34
|
+
'bedrock-agentcore:GetEvent',
|
|
35
|
+
'bedrock-agentcore:ListEvents',
|
|
36
|
+
'bedrock-agentcore:ListActors',
|
|
37
|
+
'bedrock-agentcore:ListSessions',
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Permissions to delete Short-Term Memory (STM)
|
|
41
|
+
*/
|
|
42
|
+
STM.DELETE_PERMS = ['bedrock-agentcore:DeleteEvent'];
|
|
43
|
+
})(STM = MemoryPerms.STM || (MemoryPerms.STM = {}));
|
|
44
|
+
/**
|
|
45
|
+
* Permissions for Long-Term Memory (LTM)
|
|
46
|
+
*/
|
|
47
|
+
let LTM;
|
|
48
|
+
(function (LTM) {
|
|
49
|
+
// Note how there is no "bedrock-agentcore:CreateMemoryRecord" as you cannot write directly to LTM
|
|
50
|
+
// This is done asynchronously once extraction stategies have been configured.
|
|
51
|
+
/**
|
|
52
|
+
* Permissions to read Long-Term Memory (LTM)
|
|
53
|
+
*/
|
|
54
|
+
LTM.READ_PERMS = [
|
|
55
|
+
'bedrock-agentcore:GetMemoryRecord',
|
|
56
|
+
'bedrock-agentcore:RetrieveMemoryRecords', // Read via sematic query
|
|
57
|
+
'bedrock-agentcore:ListMemoryRecords',
|
|
58
|
+
'bedrock-agentcore:ListActors',
|
|
59
|
+
'bedrock-agentcore:ListSessions',
|
|
60
|
+
];
|
|
61
|
+
/**
|
|
62
|
+
* Permissions to delete Long-Term Memory (LTM)
|
|
63
|
+
*/
|
|
64
|
+
LTM.DELETE_PERMS = ['bedrock-agentcore:DeleteMemoryRecord'];
|
|
65
|
+
})(LTM = MemoryPerms.LTM || (MemoryPerms.LTM = {}));
|
|
66
|
+
/**
|
|
67
|
+
* Permissions to read both Short-Term Memory (STM) and Long-Term Memory (LTM)
|
|
68
|
+
*/
|
|
69
|
+
MemoryPerms.READ_PERMS = [...new Set([...STM.READ_PERMS, ...LTM.READ_PERMS])];
|
|
70
|
+
/**
|
|
71
|
+
* Permissions to delete both Short-Term Memory (STM) and Long-Term Memory (LTM)
|
|
72
|
+
*/
|
|
73
|
+
MemoryPerms.DELETE_PERMS = [...new Set([...STM.DELETE_PERMS, ...LTM.DELETE_PERMS])];
|
|
74
|
+
/******************************************************************************
|
|
75
|
+
* Control Plane Permissions
|
|
76
|
+
*****************************************************************************/
|
|
77
|
+
/**
|
|
78
|
+
* Grants control plane operations to manage the memory (CRUD)
|
|
79
|
+
*/
|
|
80
|
+
MemoryPerms.ADMIN_PERMS = [
|
|
81
|
+
'bedrock-agentcore:CreateMemory',
|
|
82
|
+
'bedrock-agentcore:GetMemory',
|
|
83
|
+
'bedrock-agentcore:DeleteMemory',
|
|
84
|
+
'bedrock-agentcore:UpdateMemory',
|
|
85
|
+
];
|
|
86
|
+
MemoryPerms.FULL_ACCESS_PERMS = [
|
|
87
|
+
...new Set([...STM.WRITE_PERMS, ...MemoryPerms.READ_PERMS, ...MemoryPerms.DELETE_PERMS, ...MemoryPerms.ADMIN_PERMS]),
|
|
88
|
+
];
|
|
89
|
+
})(MemoryPerms || (exports.MemoryPerms = MemoryPerms = {}));
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUVILElBQWlCLFdBQVcsQ0EwRTNCO0FBMUVELFdBQWlCLFdBQVc7SUFDMUI7O21GQUUrRTtJQUMvRTs7T0FFRztJQUNILElBQWlCLEdBQUcsQ0FrQm5CO0lBbEJELFdBQWlCLEdBQUc7UUFDbEI7O1dBRUc7UUFDVSxlQUFXLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzdEOztXQUVHO1FBQ1UsY0FBVSxHQUFHO1lBQ3hCLDRCQUE0QjtZQUM1Qiw4QkFBOEI7WUFDOUIsOEJBQThCO1lBQzlCLGdDQUFnQztTQUNqQyxDQUFDO1FBQ0Y7O1dBRUc7UUFDVSxnQkFBWSxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNoRSxDQUFDLEVBbEJnQixHQUFHLEdBQUgsZUFBRyxLQUFILGVBQUcsUUFrQm5CO0lBRUQ7O09BRUc7SUFDSCxJQUFpQixHQUFHLENBaUJuQjtJQWpCRCxXQUFpQixHQUFHO1FBQ2xCLGtHQUFrRztRQUNsRyw4RUFBOEU7UUFDOUU7O1dBRUc7UUFDVSxjQUFVLEdBQUc7WUFDeEIsbUNBQW1DO1lBQ25DLHlDQUF5QyxFQUFFLHlCQUF5QjtZQUNwRSxxQ0FBcUM7WUFDckMsOEJBQThCO1lBQzlCLGdDQUFnQztTQUNqQyxDQUFDO1FBQ0Y7O1dBRUc7UUFDVSxnQkFBWSxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN2RSxDQUFDLEVBakJnQixHQUFHLEdBQUgsZUFBRyxLQUFILGVBQUcsUUFpQm5CO0lBRUQ7O09BRUc7SUFDVSxzQkFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0U7O09BRUc7SUFDVSx3QkFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckY7O21GQUUrRTtJQUMvRTs7T0FFRztJQUNVLHVCQUFXLEdBQUc7UUFDekIsZ0NBQWdDO1FBQ2hDLDZCQUE2QjtRQUM3QixnQ0FBZ0M7UUFDaEMsZ0NBQWdDO0tBQ2pDLENBQUM7SUFFVyw2QkFBaUIsR0FBRztRQUMvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsWUFBQSxVQUFVLEVBQUUsR0FBRyxZQUFBLFlBQVksRUFBRSxHQUFHLFlBQUEsV0FBVyxDQUFDLENBQUM7S0FDakYsQ0FBQztBQUNKLENBQUMsRUExRWdCLFdBQVcsMkJBQVgsV0FBVyxRQTBFM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgbmFtZXNwYWNlIE1lbW9yeVBlcm1zIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBQbGFuZSBQZXJtaXNzaW9uc1xuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIC8qKlxuICAgKiBQZXJtaXNzaW9ucyBmb3IgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSlcbiAgICovXG4gIGV4cG9ydCBuYW1lc3BhY2UgU1RNIHtcbiAgICAvKipcbiAgICAgKiBQZXJtaXNzaW9ucyB0byB3cml0ZSBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKVxuICAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBXUklURV9QRVJNUyA9IFsnYmVkcm9jay1hZ2VudGNvcmU6Q3JlYXRlRXZlbnQnXTtcbiAgICAvKipcbiAgICAgKiBQZXJtaXNzaW9ucyB0byByZWFkIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pXG4gICAgICovXG4gICAgZXhwb3J0IGNvbnN0IFJFQURfUEVSTVMgPSBbXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0RXZlbnQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RFdmVudHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBY3RvcnMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RTZXNzaW9ucycsXG4gICAgXTtcbiAgICAvKipcbiAgICAgKiBQZXJtaXNzaW9ucyB0byBkZWxldGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSlcbiAgICAgKi9cbiAgICBleHBvcnQgY29uc3QgREVMRVRFX1BFUk1TID0gWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVFdmVudCddO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIGZvciBMb25nLVRlcm0gTWVtb3J5IChMVE0pXG4gICAqL1xuICBleHBvcnQgbmFtZXNwYWNlIExUTSB7XG4gICAgLy8gTm90ZSBob3cgdGhlcmUgaXMgbm8gXCJiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVNZW1vcnlSZWNvcmRcIiBhcyB5b3UgY2Fubm90IHdyaXRlIGRpcmVjdGx5IHRvIExUTVxuICAgIC8vIFRoaXMgaXMgZG9uZSBhc3luY2hyb25vdXNseSBvbmNlIGV4dHJhY3Rpb24gc3RhdGVnaWVzIGhhdmUgYmVlbiBjb25maWd1cmVkLlxuICAgIC8qKlxuICAgICAqIFBlcm1pc3Npb25zIHRvIHJlYWQgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKVxuICAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBSRUFEX1BFUk1TID0gW1xuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeVJlY29yZCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6UmV0cmlldmVNZW1vcnlSZWNvcmRzJywgLy8gUmVhZCB2aWEgc2VtYXRpYyBxdWVyeVxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QWN0b3JzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0U2Vzc2lvbnMnLFxuICAgIF07XG4gICAgLyoqXG4gICAgICogUGVybWlzc2lvbnMgdG8gZGVsZXRlIExvbmctVGVybSBNZW1vcnkgKExUTSlcbiAgICAgKi9cbiAgICBleHBvcnQgY29uc3QgREVMRVRFX1BFUk1TID0gWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXNzaW9ucyB0byByZWFkIGJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSlcbiAgICovXG4gIGV4cG9ydCBjb25zdCBSRUFEX1BFUk1TID0gWy4uLm5ldyBTZXQoWy4uLlNUTS5SRUFEX1BFUk1TLCAuLi5MVE0uUkVBRF9QRVJNU10pXTtcbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIHRvIGRlbGV0ZSBib3RoIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGFuZCBMb25nLVRlcm0gTWVtb3J5IChMVE0pXG4gICAqL1xuICBleHBvcnQgY29uc3QgREVMRVRFX1BFUk1TID0gWy4uLm5ldyBTZXQoWy4uLlNUTS5ERUxFVEVfUEVSTVMsIC4uLkxUTS5ERUxFVEVfUEVSTVNdKV07XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIFBsYW5lIFBlcm1pc3Npb25zXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgLyoqXG4gICAqIEdyYW50cyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHRoZSBtZW1vcnkgKENSVUQpXG4gICAqL1xuICBleHBvcnQgY29uc3QgQURNSU5fUEVSTVMgPSBbXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZU1lbW9yeScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZU1lbW9yeScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZU1lbW9yeScsXG4gIF07XG5cbiAgZXhwb3J0IGNvbnN0IEZVTExfQUNDRVNTX1BFUk1TID0gW1xuICAgIC4uLm5ldyBTZXQoWy4uLlNUTS5XUklURV9QRVJNUywgLi4uUkVBRF9QRVJNUywgLi4uREVMRVRFX1BFUk1TLCAuLi5BRE1JTl9QRVJNU10pLFxuICBdO1xufVxuIl19
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
5
|
+
* with the License. A copy of the License is located at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
10
|
+
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
11
|
+
* and limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
import { IBedrockInvokable } from '@aws-cdk/aws-bedrock-alpha';
|
|
14
|
+
import * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore';
|
|
15
|
+
import { Grant, IGrantable } from 'aws-cdk-lib/aws-iam';
|
|
16
|
+
import { MemoryStrategyCommonProps, IMemoryStrategy, MemoryStrategyType } from '../memory-strategy';
|
|
17
|
+
/**
|
|
18
|
+
* Configuration for overriding model and prompt template
|
|
19
|
+
*/
|
|
20
|
+
export interface OverrideConfig {
|
|
21
|
+
/**
|
|
22
|
+
* The model to use for consolidation/extraction
|
|
23
|
+
*/
|
|
24
|
+
readonly model: IBedrockInvokable;
|
|
25
|
+
/**
|
|
26
|
+
* The prompt that will be appended to the system prompt to define
|
|
27
|
+
* the model's memory consolidation/extraction strategy.
|
|
28
|
+
* This configuration provides customization to how the model identifies and extracts
|
|
29
|
+
* relevant information for memory storage. You can use the default user prompt or create a customized one.
|
|
30
|
+
*
|
|
31
|
+
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/system-prompts.html
|
|
32
|
+
*/
|
|
33
|
+
readonly appendToPrompt: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Configuration parameters for a memory strategy that can override
|
|
37
|
+
* existing built-in default prompts/models
|
|
38
|
+
*/
|
|
39
|
+
export interface ManagedStrategyProps extends MemoryStrategyCommonProps {
|
|
40
|
+
/**
|
|
41
|
+
* The configuration for the custom extraction.
|
|
42
|
+
* This configuration provides customization to how the model identifies
|
|
43
|
+
* and extracts relevant information for memory storage.
|
|
44
|
+
* @default - No custom extraction
|
|
45
|
+
* @required - No
|
|
46
|
+
*/
|
|
47
|
+
readonly customExtraction?: OverrideConfig;
|
|
48
|
+
/**
|
|
49
|
+
* The configuration for the custom consolidation.
|
|
50
|
+
* This configuration provides customization to how the model identifies
|
|
51
|
+
* and extracts relevant information for memory storage.
|
|
52
|
+
* @default - No custom extraction
|
|
53
|
+
* @required - No
|
|
54
|
+
*/
|
|
55
|
+
readonly customConsolidation?: OverrideConfig;
|
|
56
|
+
/**
|
|
57
|
+
* The namespaces for the strategy
|
|
58
|
+
* Represents a namespace for organizing memory data
|
|
59
|
+
* Use a hierarchical format separated by forward slashes (/)
|
|
60
|
+
*
|
|
61
|
+
* Use a hierarchical format separated by forward slashes (/) to organize namespaces logically.
|
|
62
|
+
* You can include these defined variables:
|
|
63
|
+
*
|
|
64
|
+
* - {sessionId} - the user identifier to be created in the CreateEvent API
|
|
65
|
+
* - {memoryStrategyId} - an identifier for an extraction strategy
|
|
66
|
+
* - {sessionId} - an identifier for each session
|
|
67
|
+
*
|
|
68
|
+
* Example namespace path:
|
|
69
|
+
* /strategies/{memoryStrategyId}/actions/{actionId}/sessions/{sessionId}
|
|
70
|
+
*
|
|
71
|
+
* After memory creation, this namespace might look like:
|
|
72
|
+
* /actor/actor-3afc5aa8fef9/strategy/summarization-fy5c5fwc7/session/session-qj7tpd1kvr8
|
|
73
|
+
* @required - Yes
|
|
74
|
+
*/
|
|
75
|
+
readonly namespaces: string[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Managed memory strategy that handles both built-in and override configurations.
|
|
79
|
+
* This strategy can be used for quick setup with built-in defaults or customized
|
|
80
|
+
* with specific models and prompt templates.
|
|
81
|
+
*/
|
|
82
|
+
export declare class ManagedMemoryStrategy implements IMemoryStrategy {
|
|
83
|
+
readonly name: string;
|
|
84
|
+
readonly description?: string;
|
|
85
|
+
/**
|
|
86
|
+
* The namespaces for the strategy
|
|
87
|
+
*/
|
|
88
|
+
readonly namespaces: string[];
|
|
89
|
+
/**
|
|
90
|
+
* The configuration for the custom consolidation.
|
|
91
|
+
*/
|
|
92
|
+
readonly consolidationOverride?: OverrideConfig;
|
|
93
|
+
/**
|
|
94
|
+
* The configuration for the custom extraction.
|
|
95
|
+
*/
|
|
96
|
+
readonly extractionOverride?: OverrideConfig;
|
|
97
|
+
readonly strategyType: MemoryStrategyType;
|
|
98
|
+
/**
|
|
99
|
+
* Constructor to create a new managed memory strategy
|
|
100
|
+
* @param strategyType the strategy type
|
|
101
|
+
* @param props the properties for the strategy
|
|
102
|
+
*/
|
|
103
|
+
constructor(strategyType: MemoryStrategyType, props: ManagedStrategyProps);
|
|
104
|
+
/**
|
|
105
|
+
* Renders the network configuration as a CloudFormation property.
|
|
106
|
+
* @returns The CloudFormation property for the memory strategy.
|
|
107
|
+
*/
|
|
108
|
+
render(): bedrockagentcore.CfnMemory.MemoryStrategyProperty;
|
|
109
|
+
/**
|
|
110
|
+
* Grants the necessary permissions to the role
|
|
111
|
+
* @param grantee - The grantee to grant permissions to
|
|
112
|
+
* @returns The Grant object for chaining
|
|
113
|
+
*/
|
|
114
|
+
grant(grantee: IGrantable): Grant | undefined;
|
|
115
|
+
/**
|
|
116
|
+
* Validates the memory strategy name
|
|
117
|
+
* @param name - The name to validate
|
|
118
|
+
* @returns Array of validation error messages, empty if valid
|
|
119
|
+
*/
|
|
120
|
+
private _validateMemoryStrategyName;
|
|
121
|
+
/**
|
|
122
|
+
* Validates the prompt
|
|
123
|
+
* @param prompt - The prompt to validate
|
|
124
|
+
* @returns Array of validation error messages, empty if valid
|
|
125
|
+
*/
|
|
126
|
+
private _validatePrompt;
|
|
127
|
+
/**
|
|
128
|
+
* Validates the memory strategy namespaces
|
|
129
|
+
* @param namespaces - The namespaces to validate
|
|
130
|
+
* @returns Array of validation error messages, empty if valid
|
|
131
|
+
*/
|
|
132
|
+
private _validateMemoryStrategyNamespaces;
|
|
133
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ManagedMemoryStrategy = void 0;
|
|
4
|
+
const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const memory_strategy_1 = require("../memory-strategy");
|
|
8
|
+
const validation_helpers_1 = require("../validation-helpers");
|
|
9
|
+
/******************************************************************************
|
|
10
|
+
* CONSTANTS
|
|
11
|
+
*****************************************************************************/
|
|
12
|
+
/**
|
|
13
|
+
* Minimum length for prompt
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
const PROMPT_MIN_LENGTH = 1;
|
|
17
|
+
/**
|
|
18
|
+
* Maximum length for prompt
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
const PROMPT_MAX_LENGTH = 30000;
|
|
22
|
+
/**
|
|
23
|
+
* Managed memory strategy that handles both built-in and override configurations.
|
|
24
|
+
* This strategy can be used for quick setup with built-in defaults or customized
|
|
25
|
+
* with specific models and prompt templates.
|
|
26
|
+
*/
|
|
27
|
+
class ManagedMemoryStrategy {
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ManagedMemoryStrategy", version: "2.222.0-alpha.0" };
|
|
29
|
+
name;
|
|
30
|
+
description;
|
|
31
|
+
/**
|
|
32
|
+
* The namespaces for the strategy
|
|
33
|
+
*/
|
|
34
|
+
namespaces;
|
|
35
|
+
/**
|
|
36
|
+
* The configuration for the custom consolidation.
|
|
37
|
+
*/
|
|
38
|
+
consolidationOverride;
|
|
39
|
+
/**
|
|
40
|
+
* The configuration for the custom extraction.
|
|
41
|
+
*/
|
|
42
|
+
extractionOverride;
|
|
43
|
+
strategyType;
|
|
44
|
+
/**
|
|
45
|
+
* Constructor to create a new managed memory strategy
|
|
46
|
+
* @param strategyType the strategy type
|
|
47
|
+
* @param props the properties for the strategy
|
|
48
|
+
*/
|
|
49
|
+
constructor(strategyType, props) {
|
|
50
|
+
try {
|
|
51
|
+
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_MemoryStrategyType(strategyType);
|
|
52
|
+
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ManagedStrategyProps(props);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
56
|
+
Error.captureStackTrace(error, ManagedMemoryStrategy);
|
|
57
|
+
}
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
// ------------------------------------------------------
|
|
61
|
+
// Set properties and defaults
|
|
62
|
+
// ------------------------------------------------------
|
|
63
|
+
this.name = props.name;
|
|
64
|
+
this.description = props.description;
|
|
65
|
+
this.namespaces = props.namespaces;
|
|
66
|
+
this.strategyType = strategyType;
|
|
67
|
+
this.consolidationOverride = props.customConsolidation;
|
|
68
|
+
this.extractionOverride = props.customExtraction;
|
|
69
|
+
// ------------------------------------------------------
|
|
70
|
+
// Validations
|
|
71
|
+
// ------------------------------------------------------
|
|
72
|
+
(0, validation_helpers_1.throwIfInvalid)(this._validatePrompt, this.consolidationOverride?.appendToPrompt);
|
|
73
|
+
(0, validation_helpers_1.throwIfInvalid)(this._validatePrompt, this.extractionOverride?.appendToPrompt);
|
|
74
|
+
(0, validation_helpers_1.throwIfInvalid)(this._validateMemoryStrategyName, this.name);
|
|
75
|
+
if (this.namespaces) {
|
|
76
|
+
(0, validation_helpers_1.throwIfInvalid)(this._validateMemoryStrategyNamespaces, this.namespaces);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Renders the network configuration as a CloudFormation property.
|
|
81
|
+
* @returns The CloudFormation property for the memory strategy.
|
|
82
|
+
*/
|
|
83
|
+
render() {
|
|
84
|
+
// If no overrides, use built-in strategy format
|
|
85
|
+
if (!this.consolidationOverride && !this.extractionOverride) {
|
|
86
|
+
const cfnStrategyMap = {
|
|
87
|
+
[memory_strategy_1.MemoryStrategyType.USER_PREFERENCE]: 'userPreferenceMemoryStrategy',
|
|
88
|
+
[memory_strategy_1.MemoryStrategyType.SEMANTIC]: 'semanticMemoryStrategy',
|
|
89
|
+
[memory_strategy_1.MemoryStrategyType.SUMMARIZATION]: 'summaryMemoryStrategy',
|
|
90
|
+
[memory_strategy_1.MemoryStrategyType.CUSTOM]: 'customMemoryStrategy',
|
|
91
|
+
};
|
|
92
|
+
const strategyKey = cfnStrategyMap[this.strategyType];
|
|
93
|
+
return {
|
|
94
|
+
[strategyKey]: {
|
|
95
|
+
name: this.name,
|
|
96
|
+
description: this.description,
|
|
97
|
+
namespaces: this.namespaces,
|
|
98
|
+
type: this.strategyType,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// If overrides are provided, use custom strategy format
|
|
103
|
+
const cfnStrategyMap = {
|
|
104
|
+
[memory_strategy_1.MemoryStrategyType.USER_PREFERENCE]: 'userPreferenceOverride',
|
|
105
|
+
[memory_strategy_1.MemoryStrategyType.SEMANTIC]: 'semanticOverride',
|
|
106
|
+
[memory_strategy_1.MemoryStrategyType.SUMMARIZATION]: 'summaryOverride',
|
|
107
|
+
[memory_strategy_1.MemoryStrategyType.CUSTOM]: '',
|
|
108
|
+
};
|
|
109
|
+
const strategyKey = cfnStrategyMap[this.strategyType];
|
|
110
|
+
return {
|
|
111
|
+
customMemoryStrategy: {
|
|
112
|
+
name: this.name,
|
|
113
|
+
description: this.description,
|
|
114
|
+
namespaces: this.namespaces,
|
|
115
|
+
type: this.strategyType,
|
|
116
|
+
configuration: {
|
|
117
|
+
[strategyKey]: {
|
|
118
|
+
...(this.consolidationOverride && {
|
|
119
|
+
consolidation: {
|
|
120
|
+
modelId: aws_cdk_lib_1.Arn.split(this.consolidationOverride.model.invokableArn, aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME)
|
|
121
|
+
.resourceName,
|
|
122
|
+
appendToPrompt: this.consolidationOverride.appendToPrompt,
|
|
123
|
+
},
|
|
124
|
+
}),
|
|
125
|
+
...(this.extractionOverride && {
|
|
126
|
+
extraction: {
|
|
127
|
+
modelId: aws_cdk_lib_1.Arn.split(this.extractionOverride.model.invokableArn, aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME)
|
|
128
|
+
.resourceName,
|
|
129
|
+
appendToPrompt: this.extractionOverride.appendToPrompt,
|
|
130
|
+
},
|
|
131
|
+
}),
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Grants the necessary permissions to the role
|
|
139
|
+
* @param grantee - The grantee to grant permissions to
|
|
140
|
+
* @returns The Grant object for chaining
|
|
141
|
+
*/
|
|
142
|
+
grant(grantee) {
|
|
143
|
+
const grant1 = this.consolidationOverride?.model.grantInvoke(grantee);
|
|
144
|
+
const grant2 = this.extractionOverride?.model.grantInvoke(grantee);
|
|
145
|
+
return grant1 && grant2 ? grant1.combine(grant2) : grant1 || grant2;
|
|
146
|
+
}
|
|
147
|
+
// ------------------------------------------------------
|
|
148
|
+
// VALIDATORS
|
|
149
|
+
// ------------------------------------------------------
|
|
150
|
+
/**
|
|
151
|
+
* Validates the memory strategy name
|
|
152
|
+
* @param name - The name to validate
|
|
153
|
+
* @returns Array of validation error messages, empty if valid
|
|
154
|
+
*/
|
|
155
|
+
_validateMemoryStrategyName = (name, scope) => {
|
|
156
|
+
let errors = [];
|
|
157
|
+
errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
|
|
158
|
+
value: name,
|
|
159
|
+
fieldName: 'Memory name',
|
|
160
|
+
minLength: memory_strategy_1.MEMORY_NAME_MIN_LENGTH,
|
|
161
|
+
maxLength: memory_strategy_1.MEMORY_NAME_MAX_LENGTH,
|
|
162
|
+
}, scope));
|
|
163
|
+
// Check if name matches the AWS API pattern: [a-zA-Z][a-zA-Z0-9_]{0,47}
|
|
164
|
+
// Must start with a letter, followed by up to 47 letters, numbers, or underscores
|
|
165
|
+
const validNamePattern = /^[a-zA-Z][a-zA-Z0-9_]{0,47}$/;
|
|
166
|
+
errors.push(...(0, validation_helpers_1.validateFieldPattern)(name, 'Memory name', validNamePattern, undefined, scope));
|
|
167
|
+
return errors;
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Validates the prompt
|
|
171
|
+
* @param prompt - The prompt to validate
|
|
172
|
+
* @returns Array of validation error messages, empty if valid
|
|
173
|
+
*/
|
|
174
|
+
_validatePrompt = (prompt, scope) => {
|
|
175
|
+
let errors = [];
|
|
176
|
+
if (!prompt) {
|
|
177
|
+
return errors;
|
|
178
|
+
}
|
|
179
|
+
errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
|
|
180
|
+
value: prompt,
|
|
181
|
+
fieldName: 'Prompt',
|
|
182
|
+
minLength: PROMPT_MIN_LENGTH,
|
|
183
|
+
maxLength: PROMPT_MAX_LENGTH,
|
|
184
|
+
}, scope));
|
|
185
|
+
return errors;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Validates the memory strategy namespaces
|
|
189
|
+
* @param namespaces - The namespaces to validate
|
|
190
|
+
* @returns Array of validation error messages, empty if valid
|
|
191
|
+
*/
|
|
192
|
+
_validateMemoryStrategyNamespaces = (namespaces) => {
|
|
193
|
+
let errors = [];
|
|
194
|
+
if (namespaces.length === 0) {
|
|
195
|
+
return errors;
|
|
196
|
+
}
|
|
197
|
+
for (const namespace of namespaces) {
|
|
198
|
+
// Only check for template variables in namespace definition
|
|
199
|
+
if (namespace.includes('{') && !(namespace.includes('{actorId}') ||
|
|
200
|
+
namespace.includes('{sessionId}') ||
|
|
201
|
+
namespace.includes('{memoryStrategyId}'))) {
|
|
202
|
+
errors.push(`Namespace with templates should contain valid variables: ${namespace}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return errors;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
exports.ManagedMemoryStrategy = ManagedMemoryStrategy;
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hbmFnZWQtc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSw2Q0FBNkM7QUFJN0Msd0RBQW9KO0FBQ3BKLDhEQUF3RztBQUV4Rzs7K0VBRStFO0FBQy9FOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBZ0VoQzs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBcUI7O0lBQ2hCLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBVTtJQUNyQzs7T0FFRztJQUNhLFVBQVUsQ0FBVztJQUNyQzs7T0FFRztJQUNhLHFCQUFxQixDQUFrQjtJQUN2RDs7T0FFRztJQUNhLGtCQUFrQixDQUFrQjtJQUNwQyxZQUFZLENBQXFCO0lBRWpEOzs7O09BSUc7SUFDSCxZQUFZLFlBQWdDLEVBQUUsS0FBMkI7Ozs7Ozs7K0NBdEI5RCxxQkFBcUI7Ozs7UUF1QjlCLHlEQUF5RDtRQUN6RCw4QkFBOEI7UUFDOUIseURBQXlEO1FBQ3pELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUVqRCx5REFBeUQ7UUFDekQsY0FBYztRQUNkLHlEQUF5RDtRQUN6RCxJQUFBLG1DQUFjLEVBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMscUJB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TUFBTSxHQUFhLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEsOENBQXlCLEVBQUM7WUFDdkMsS0FBSyxFQUFFLE1BQU07WUFDYixTQUFTLEVBQUUsUUFBUTtZQUNuQixTQUFTLEVBQUUsaUJBQWlCO1lBQzVCLFNBQVMsRUFBRSxpQkFBaUI7U0FDN0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNLLGlDQUFpQyxHQUFHLENBQUMsVUFBb0IsRUFBWSxFQUFFO1FBQzdFLElBQUksTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUUxQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsNERBQTREO1lBQzVELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQzlCLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUMzQixTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztnQkFDakMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUM3QyxFQUFFLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyw0REFBNEQsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQzs7QUF6TEosc0RBMExDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSUJlZHJvY2tJbnZva2FibGUgfSBmcm9tICdAYXdzLWNkay9hd3MtYmVkcm9jay1hbHBoYSc7XG5pbXBvcnQgeyBBcm4sIEFybkZvcm1hdCB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHsgR3JhbnQsIElHcmFudGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IE1lbW9yeVN0cmF0ZWd5Q29tbW9uUHJvcHMsIElNZW1vcnlTdHJhdGVneSwgTWVtb3J5U3RyYXRlZ3lUeXBlLCBNRU1PUllfTkFNRV9NSU5fTEVOR1RILCBNRU1PUllfTkFNRV9NQVhfTEVOR1RIIH0gZnJvbSAnLi4vbWVtb3J5LXN0cmF0ZWd5JztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgsIHRocm93SWZJbnZhbGlkLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiB9IGZyb20gJy4uL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RBTlRTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBwcm9tcHRcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBQUk9NUFRfTUlOX0xFTkdUSCA9IDE7XG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBwcm9tcHRcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBQUk9NUFRfTUFYX0xFTkdUSCA9IDMwMDAwO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIG92ZXJyaWRpbmcgbW9kZWwgYW5kIHByb21wdCB0ZW1wbGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0byB1c2UgZm9yIGNvbnNvbGlkYXRpb24vZXh0cmFjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWw6IElCZWRyb2NrSW52b2thYmxlO1xuICAvKipcbiAgICogVGhlIHByb21wdCB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHN5c3RlbSBwcm9tcHQgdG8gZGVmaW5lXG4gICAqIHRoZSBtb2RlbCdzIG1lbW9yeSBjb25zb2xpZGF0aW9uL2V4dHJhY3Rpb24gc3RyYXRlZ3kuXG4gICAqIFRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcyBjdXN0b21pemF0aW9uIHRvIGhvdyB0aGUgbW9kZWwgaWRlbnRpZmllcyBhbmQgZXh0cmFjdHNcbiAgICogcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIG1lbW9yeSBzdG9yYWdlLiBZb3UgY2FuIHVzZSB0aGUgZGVmYXVsdCB1c2VyIHByb21wdCBvciBjcmVhdGUgYSBjdXN0b21pemVkIG9uZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL3N5c3RlbS1wcm9tcHRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGFwcGVuZFRvUHJvbXB0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBhIG1lbW9yeSBzdHJhdGVneSB0aGF0IGNhbiBvdmVycmlkZVxuICogZXhpc3RpbmcgYnVpbHQtaW4gZGVmYXVsdCBwcm9tcHRzL21vZGVsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRTdHJhdGVneVByb3BzIGV4dGVuZHMgTWVtb3J5U3RyYXRlZ3lDb21tb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBleHRyYWN0aW9uLlxuICAgKiBUaGlzIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgY3VzdG9taXphdGlvbiB0byBob3cgdGhlIG1vZGVsIGlkZW50aWZpZXNcbiAgICogYW5kIGV4dHJhY3RzIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciBtZW1vcnkgc3RvcmFnZS5cbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXh0cmFjdGlvblxuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRXh0cmFjdGlvbj86IE92ZXJyaWRlQ29uZmlnO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjdXN0b20gY29uc29saWRhdGlvbi5cbiAgICogVGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gdG8gaG93IHRoZSBtb2RlbCBpZGVudGlmaWVzXG4gICAqIGFuZCBleHRyYWN0cyByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgbWVtb3J5IHN0b3JhZ2UuXG4gICAqIEBkZWZhdWx0IC0gTm8gY3VzdG9tIGV4dHJhY3Rpb25cbiAgICogQHJlcXVpcmVkIC0gTm9cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUNvbnNvbGlkYXRpb24/OiBPdmVycmlkZUNvbmZpZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2VzIGZvciB0aGUgc3RyYXRlZ3lcbiAgICogUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBmb3Igb3JnYW5pemluZyBtZW1vcnkgZGF0YVxuICAgKiBVc2UgYSBoaWVyYXJjaGljYWwgZm9ybWF0IHNlcGFyYXRlZCBieSBmb3J3YXJkIHNsYXNoZXMgKC8pXG4gICAqXG4gICAqIFVzZSBhIGhpZXJhcmNoaWNhbCBmb3JtYXQgc2VwYXJhdGVkIGJ5IGZvcndhcmQgc2xhc2hlcyAoLykgdG8gb3JnYW5pemUgbmFtZXNwYWNlcyBsb2dpY2FsbHkuXG4gICAqIFlvdSBjYW4gaW5jbHVkZSB0aGVzZSBkZWZpbmVkIHZhcmlhYmxlczpcbiAgICpcbiAgICogLSB7c2Vzc2lvbklkfSAtIHRoZSB1c2VyIGlkZW50aWZpZXIgdG8gYmUgY3JlYXRlZCBpbiB0aGUgQ3JlYXRlRXZlbnQgQVBJXG4gICAqIC0ge21lbW9yeVN0cmF0ZWd5SWR9IC0gYW4gaWRlbnRpZmllciBmb3IgYW4gZXh0cmFjdGlvbiBzdHJhdGVneVxuICAgKiAtIHtzZXNzaW9uSWR9IC0gYW4gaWRlbnRpZmllciBmb3IgZWFjaCBzZXNzaW9uXG4gICAqXG4gICAqIEV4YW1wbGUgbmFtZXNwYWNlIHBhdGg6XG4gICAqIC9zdHJhdGVnaWVzL3ttZW1vcnlTdHJhdGVneUlkfS9hY3Rpb25zL3thY3Rpb25JZH0vc2Vzc2lvbnMve3Nlc3Npb25JZH1cbiAgICpcbiAgICogQWZ0ZXIgbWVtb3J5IGNyZWF0aW9uLCB0aGlzIG5hbWVzcGFjZSBtaWdodCBsb29rIGxpa2U6XG4gICAqIC9hY3Rvci9hY3Rvci0zYWZjNWFhOGZlZjkvc3RyYXRlZ3kvc3VtbWFyaXphdGlvbi1meTVjNWZ3Yzcvc2Vzc2lvbi9zZXNzaW9uLXFqN3RwZDFrdnI4XG4gICAqIEByZXF1aXJlZCAtIFllc1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTWFuYWdlZCBtZW1vcnkgc3RyYXRlZ3kgdGhhdCBoYW5kbGVzIGJvdGggYnVpbHQtaW4gYW5kIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zLlxuICogVGhpcyBzdHJhdGVneSBjYW4gYmUgdXNlZCBmb3IgcXVpY2sgc2V0dXAgd2l0aCBidWlsdC1pbiBkZWZhdWx0cyBvciBjdXN0b21pemVkXG4gKiB3aXRoIHNwZWNpZmljIG1vZGVscyBhbmQgcHJvbXB0IHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZWRNZW1vcnlTdHJhdGVneSBpbXBsZW1lbnRzIElNZW1vcnlTdHJhdGVneSB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2VzIGZvciB0aGUgc3RyYXRlZ3lcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2VzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VzdG9tIGNvbnNvbGlkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uc29saWRhdGlvbk92ZXJyaWRlPzogT3ZlcnJpZGVDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBleHRyYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dHJhY3Rpb25PdmVycmlkZT86IE92ZXJyaWRlQ29uZmlnO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyYXRlZ3lUeXBlOiBNZW1vcnlTdHJhdGVneVR5cGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIG5ldyBtYW5hZ2VkIG1lbW9yeSBzdHJhdGVneVxuICAgKiBAcGFyYW0gc3RyYXRlZ3lUeXBlIHRoZSBzdHJhdGVneSB0eXBlXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHN0cmF0ZWd5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdHJhdGVneVR5cGU6IE1lbW9yeVN0cmF0ZWd5VHlwZSwgcHJvcHM6IE1hbmFnZWRTdHJhdGVneVByb3BzKSB7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5uYW1lc3BhY2VzID0gcHJvcHMubmFtZXNwYWNlcztcbiAgICB0aGlzLnN0cmF0ZWd5VHlwZSA9IHN0cmF0ZWd5VHlwZTtcbiAgICB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSA9IHByb3BzLmN1c3RvbUNvbnNvbGlkYXRpb247XG4gICAgdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUgPSBwcm9wcy5jdXN0b21FeHRyYWN0aW9uO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZVByb21wdCwgdGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGU/LmFwcGVuZFRvUHJvbXB0KTtcbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZVByb21wdCwgdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGU/LmFwcGVuZFRvUHJvbXB0KTtcbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZU1lbW9yeVN0cmF0ZWd5TmFtZSwgdGhpcy5uYW1lKTtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2VzKSB7XG4gICAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZU1lbW9yeVN0cmF0ZWd5TmFtZXNwYWNlcywgdGhpcy5uYW1lc3BhY2VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFzIGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSBmb3IgdGhlIG1lbW9yeSBzdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogYmVkcm9ja2FnZW50Y29yZS5DZm5NZW1vcnkuTWVtb3J5U3RyYXRlZ3lQcm9wZXJ0eSB7XG4gICAgLy8gSWYgbm8gb3ZlcnJpZGVzLCB1c2UgYnVpbHQtaW4gc3RyYXRlZ3kgZm9ybWF0XG4gICAgaWYgKCF0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSAmJiAhdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUpIHtcbiAgICAgIGNvbnN0IGNmblN0cmF0ZWd5TWFwOiBSZWNvcmQ8TWVtb3J5U3RyYXRlZ3lUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLlVTRVJfUFJFRkVSRU5DRV06ICd1c2VyUHJlZmVyZW5jZU1lbW9yeVN0cmF0ZWd5JyxcbiAgICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TRU1BTlRJQ106ICdzZW1hbnRpY01lbW9yeVN0cmF0ZWd5JyxcbiAgICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TVU1NQVJJWkFUSU9OXTogJ3N1bW1hcnlNZW1vcnlTdHJhdGVneScsXG4gICAgICAgIFtNZW1vcnlTdHJhdGVneVR5cGUuQ1VTVE9NXTogJ2N1c3RvbU1lbW9yeVN0cmF0ZWd5JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzdHJhdGVneUtleSA9IGNmblN0cmF0ZWd5TWFwW3RoaXMuc3RyYXRlZ3lUeXBlXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtzdHJhdGVneUtleV06IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbmFtZXNwYWNlczogdGhpcy5uYW1lc3BhY2VzLFxuICAgICAgICAgIHR5cGU6IHRoaXMuc3RyYXRlZ3lUeXBlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBvdmVycmlkZXMgYXJlIHByb3ZpZGVkLCB1c2UgY3VzdG9tIHN0cmF0ZWd5IGZvcm1hdFxuICAgIGNvbnN0IGNmblN0cmF0ZWd5TWFwOiBSZWNvcmQ8TWVtb3J5U3RyYXRlZ3lUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0VdOiAndXNlclByZWZlcmVuY2VPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLlNFTUFOVElDXTogJ3NlbWFudGljT3ZlcnJpZGUnLFxuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TVU1NQVJJWkFUSU9OXTogJ3N1bW1hcnlPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkNVU1RPTV06ICcnLFxuICAgIH07XG5cbiAgICBjb25zdCBzdHJhdGVneUtleSA9IGNmblN0cmF0ZWd5TWFwW3RoaXMuc3RyYXRlZ3lUeXBlXTtcbiAgICByZXR1cm4ge1xuICAgICAgY3VzdG9tTWVtb3J5U3RyYXRlZ3k6IHtcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgbmFtZXNwYWNlczogdGhpcy5uYW1lc3BhY2VzLFxuICAgICAgICB0eXBlOiB0aGlzLnN0cmF0ZWd5VHlwZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIFtzdHJhdGVneUtleV06IHtcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSAmJiB7XG4gICAgICAgICAgICAgIGNvbnNvbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICBtb2RlbElkOiBBcm4uc3BsaXQodGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGUubW9kZWwuaW52b2thYmxlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSlcbiAgICAgICAgICAgICAgICAgIC5yZXNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgYXBwZW5kVG9Qcm9tcHQ6IHRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlLmFwcGVuZFRvUHJvbXB0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4odGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUgJiYge1xuICAgICAgICAgICAgICBleHRyYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgbW9kZWxJZDogQXJuLnNwbGl0KHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlLm1vZGVsLmludm9rYWJsZUFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpXG4gICAgICAgICAgICAgICAgICAucmVzb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgIGFwcGVuZFRvUHJvbXB0OiB0aGlzLmV4dHJhY3Rpb25PdmVycmlkZS5hcHBlbmRUb1Byb21wdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgdG8gdGhlIHJvbGVcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgZ3JhbnRlZSB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcmV0dXJucyBUaGUgR3JhbnQgb2JqZWN0IGZvciBjaGFpbmluZ1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZ3JhbnQxID0gdGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGU/Lm1vZGVsLmdyYW50SW52b2tlKGdyYW50ZWUpO1xuICAgIGNvbnN0IGdyYW50MiA9IHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlPy5tb2RlbC5ncmFudEludm9rZShncmFudGVlKTtcbiAgICByZXR1cm4gZ3JhbnQxICYmIGdyYW50MiA/IGdyYW50MS5jb21iaW5lKGdyYW50MikgOiBncmFudDEgfHwgZ3JhbnQyO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFZBTElEQVRPUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBzdHJhdGVneSBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlTWVtb3J5U3RyYXRlZ3lOYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnTWVtb3J5IG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiBNRU1PUllfTkFNRV9NSU5fTEVOR1RILFxuICAgICAgbWF4TGVuZ3RoOiBNRU1PUllfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYW1lIG1hdGNoZXMgdGhlIEFXUyBBUEkgcGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDQ3IGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzXG4gICAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihuYW1lLCAnTWVtb3J5IG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb21wdFxuICAgKiBAcGFyYW0gcHJvbXB0IC0gVGhlIHByb21wdCB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVQcm9tcHQgPSAocHJvbXB0Pzogc3RyaW5nLCBzY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoIXByb21wdCkge1xuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG4gICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICB2YWx1ZTogcHJvbXB0LFxuICAgICAgZmllbGROYW1lOiAnUHJvbXB0JyxcbiAgICAgIG1pbkxlbmd0aDogUFJPTVBUX01JTl9MRU5HVEgsXG4gICAgICBtYXhMZW5ndGg6IFBST01QVF9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBtZW1vcnkgc3RyYXRlZ3kgbmFtZXNwYWNlc1xuICAgKiBAcGFyYW0gbmFtZXNwYWNlcyAtIFRoZSBuYW1lc3BhY2VzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeVN0cmF0ZWd5TmFtZXNwYWNlcyA9IChuYW1lc3BhY2VzOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKG5hbWVzcGFjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIG5hbWVzcGFjZXMpIHtcbiAgICAgIC8vIE9ubHkgY2hlY2sgZm9yIHRlbXBsYXRlIHZhcmlhYmxlcyBpbiBuYW1lc3BhY2UgZGVmaW5pdGlvblxuICAgICAgaWYgKG5hbWVzcGFjZS5pbmNsdWRlcygneycpICYmICEoXG4gICAgICAgIG5hbWVzcGFjZS5pbmNsdWRlcygne2FjdG9ySWR9JykgfHxcbiAgICAgICAgICAgIG5hbWVzcGFjZS5pbmNsdWRlcygne3Nlc3Npb25JZH0nKSB8fFxuICAgICAgICAgICAgbmFtZXNwYWNlLmluY2x1ZGVzKCd7bWVtb3J5U3RyYXRlZ3lJZH0nKVxuICAgICAgKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgTmFtZXNwYWNlIHdpdGggdGVtcGxhdGVzIHNob3VsZCBjb250YWluIHZhbGlkIHZhcmlhYmxlczogJHtuYW1lc3BhY2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcbn1cbiJdfQ==
|