aws-cdk-neuronx-patterns 0.0.2 → 0.0.4

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/lib/model.js ADDED
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Model = exports.Parameters = exports.OptLevel = exports.QuantDtype = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Quant data type.
8
+ */
9
+ var QuantDtype;
10
+ (function (QuantDtype) {
11
+ /**
12
+ * int8 weight storage.
13
+ */
14
+ QuantDtype["S8"] = "s8";
15
+ })(QuantDtype || (exports.QuantDtype = QuantDtype = {}));
16
+ /**
17
+ * Optimization level.
18
+ */
19
+ var OptLevel;
20
+ (function (OptLevel) {
21
+ /**
22
+ * enables the core performance optimizations in the compiler, while also minimizing compile time.
23
+ */
24
+ OptLevel[OptLevel["MINIMIZING_COMPILE_TIME"] = 1] = "MINIMIZING_COMPILE_TIME";
25
+ /**
26
+ * provides the best balance between model performance and compile time.
27
+ */
28
+ OptLevel[OptLevel["BEST_BALANCE"] = 2] = "BEST_BALANCE";
29
+ /**
30
+ * may provide additional model execution performance but may incur longer compile times and higher host memory usage during model compilation.
31
+ */
32
+ OptLevel[OptLevel["MODEL_EXECUTION_PERFORMANCE"] = 3] = "MODEL_EXECUTION_PERFORMANCE";
33
+ })(OptLevel || (exports.OptLevel = OptLevel = {}));
34
+ /**
35
+ * Represents the amount of parameters.
36
+ */
37
+ class Parameters {
38
+ /**
39
+ * Create a Parameters representing an amount bilion.
40
+ * @param parameters number of parameters bilionX
41
+ * @returns parameters
42
+ */
43
+ static billion(parameters) {
44
+ return new Parameters(parameters);
45
+ }
46
+ constructor(billion) {
47
+ this.billion = billion;
48
+ }
49
+ /**
50
+ * Return this number of parameters as bilion.
51
+ * @returns This number of parameters as bilion.
52
+ */
53
+ toBilion() {
54
+ return this.billion;
55
+ }
56
+ }
57
+ exports.Parameters = Parameters;
58
+ _a = JSII_RTTI_SYMBOL_1;
59
+ Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.4" };
60
+ /**
61
+ * Compile target model.
62
+ */
63
+ class Model {
64
+ /**
65
+ * model informations at HuggingFace
66
+ * @param modelId model id on the HuggingFace
67
+ * @param options model basic infromation
68
+ * @returns model instance
69
+ */
70
+ static fromHuggingFace(modelId, options) {
71
+ return new Model(modelId, options);
72
+ }
73
+ /**
74
+ * model informations at S3 Bucket
75
+ * @param bucket Model stored S3 Bucket
76
+ * @param prefix Model stored objects prefix
77
+ * @param options model basic infromation
78
+ * @returns model instance
79
+ */
80
+ static fromBucket(bucket, prefix, options) {
81
+ return new Model(bucket.s3UrlForObject(prefix), options, bucket, prefix);
82
+ }
83
+ constructor(modelId, options, bucket, prefix) {
84
+ this.modelId = modelId;
85
+ this.options = options;
86
+ this.bucket = bucket;
87
+ this.prefix = prefix;
88
+ }
89
+ }
90
+ exports.Model = Model;
91
+ _b = JSII_RTTI_SYMBOL_1;
92
+ Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.4" };
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHVCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEI7O09BRUc7SUFDSCw2RUFBMkIsQ0FBQTtJQUMzQjs7T0FFRztJQUNILHVEQUFnQixDQUFBO0lBQ2hCOztPQUVHO0lBQ0gscUZBQStCLENBQUE7QUFDakMsQ0FBQyxFQWJXLFFBQVEsd0JBQVIsUUFBUSxRQWFuQjtBQXdCRDs7R0FFRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUMvQixPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxZQUFxQyxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDeEQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQWhCSCxnQ0FpQkM7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBcUI7UUFDM0QsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBZSxFQUFFLE1BQWMsRUFBRSxPQUFxQjtRQUN0RSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsWUFDVyxPQUFlLEVBQ2YsT0FBcUIsRUFDckIsTUFBZ0IsRUFDaEIsTUFBZTtRQUhmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztJQUN2QixDQUFDOztBQXpCTixzQkEwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuXG4vKipcbiAqIFF1YW50IGRhdGEgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUXVhbnREdHlwZSB7XG4gIC8qKlxuICAgKiBpbnQ4IHdlaWdodCBzdG9yYWdlLlxuICAgKi9cbiAgUzggPSBcInM4XCIsXG59XG5cbi8qKlxuICogT3B0aW1pemF0aW9uIGxldmVsLlxuICovXG5leHBvcnQgZW51bSBPcHRMZXZlbCB7XG4gIC8qKlxuICAgKiBlbmFibGVzIHRoZSBjb3JlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvbXBpbGVyLCB3aGlsZSBhbHNvIG1pbmltaXppbmcgY29tcGlsZSB0aW1lLlxuICAgKi9cbiAgTUlOSU1JWklOR19DT01QSUxFX1RJTUUgPSAxLFxuICAvKipcbiAgICogcHJvdmlkZXMgdGhlIGJlc3QgYmFsYW5jZSBiZXR3ZWVuIG1vZGVsIHBlcmZvcm1hbmNlIGFuZCBjb21waWxlIHRpbWUuXG4gICAqL1xuICBCRVNUX0JBTEFOQ0UgPSAyLFxuICAvKipcbiAgICogbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBtb2RlbCBleGVjdXRpb24gcGVyZm9ybWFuY2UgYnV0IG1heSBpbmN1ciBsb25nZXIgY29tcGlsZSB0aW1lcyBhbmQgaGlnaGVyIGhvc3QgbWVtb3J5IHVzYWdlIGR1cmluZyBtb2RlbCBjb21waWxhdGlvbi5cbiAgICovXG4gIE1PREVMX0VYRUNVVElPTl9QRVJGT1JNQU5DRSA9IDMsXG59XG5cbi8qKlxuICogQ29tcGlsZSBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gY2FsYyBmcm9tIHBhcmFtZXRlcnMgYW5kIHF1YW50RHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHRwRGVncmVlPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBObyBxdWFudFxuICAgKi9cbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCA0MDk2XG4gICAqL1xuICByZWFkb25seSBuUG9zaXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgT3B0TGV2ZWwuQkVTVF9CQUxBTkNFXG4gICAqL1xuICByZWFkb25seSBvcHRMZXZlbD86IE9wdExldmVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBQYXJhbWV0ZXJzIHJlcHJlc2VudGluZyBhbiBhbW91bnQgYmlsaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBudW1iZXIgb2YgcGFyYW1ldGVycyBiaWxpb25YXG4gICAqIEByZXR1cm5zIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyBiaWxsaW9uKHBhcmFtZXRlcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmlsbGlvbjogbnVtYmVyKSB7fVxuICAvKipcbiAgICogUmV0dXJuIHRoaXMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYmlsaW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIGJpbGlvbi5cbiAgICovXG4gIHRvQmlsaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJpbGxpb247XG4gIH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRhcmdldCBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IFBhcmFtZXRlcnM7XG59XG4vKipcbiAqIENvbXBpbGUgdGFyZ2V0IG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAvKipcbiAgICogbW9kZWwgaW5mb3JtYXRpb25zIGF0IEh1Z2dpbmdGYWNlXG4gICAqIEBwYXJhbSBtb2RlbElkIG1vZGVsIGlkIG9uIHRoZSBIdWdnaW5nRmFjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICAgKiBAcmV0dXJucyBtb2RlbCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGZyb21IdWdnaW5nRmFjZShtb2RlbElkOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGVsT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTW9kZWwobW9kZWxJZCwgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIG1vZGVsIGluZm9ybWF0aW9ucyBhdCBTMyBCdWNrZXRcbiAgICogQHBhcmFtIGJ1Y2tldCBNb2RlbCBzdG9yZWQgUzMgQnVja2V0XG4gICAqIEBwYXJhbSBwcmVmaXggTW9kZWwgc3RvcmVkIG9iamVjdHMgcHJlZml4XG4gICAqIEBwYXJhbSBvcHRpb25zIG1vZGVsIGJhc2ljIGluZnJvbWF0aW9uXG4gICAqIEByZXR1cm5zIG1vZGVsIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1Y2tldChidWNrZXQ6IElCdWNrZXQsIHByZWZpeDogc3RyaW5nLCBvcHRpb25zOiBNb2RlbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsKGJ1Y2tldC5zM1VybEZvck9iamVjdChwcmVmaXgpLCBvcHRpb25zLCBidWNrZXQsIHByZWZpeCk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtb2RlbElkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogTW9kZWxPcHRpb25zLFxuICAgIHJlYWRvbmx5IGJ1Y2tldD86IElCdWNrZXQsXG4gICAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nLFxuICApIHt9XG59XG4iXX0=
@@ -3,6 +3,7 @@ import * as ec2 from "aws-cdk-lib/aws-ec2";
3
3
  import { ContainerImage } from "aws-cdk-lib/aws-ecs";
4
4
  import { IBucket } from "aws-cdk-lib/aws-s3";
5
5
  import { Construct } from "constructs";
6
+ import { CompileOptions, Model, OptLevel, Parameters, QuantDtype } from "./model";
6
7
  import { NeuronxInstanceType } from "./neuronx-instance-type";
7
8
  /**
8
9
  * Compile runtime.
@@ -17,92 +18,6 @@ export interface CompileRuntime {
17
18
  */
18
19
  readonly neuronxVersion: string;
19
20
  }
20
- /**
21
- * Quant data type.
22
- */
23
- export declare enum QuantDtype {
24
- /**
25
- * int8 weight storage.
26
- */
27
- S8 = "s8"
28
- }
29
- /**
30
- * Optimization level.
31
- */
32
- export declare enum OptLevel {
33
- /**
34
- * enables the core performance optimizations in the compiler, while also minimizing compile time.
35
- */
36
- MINIMIZING_COMPILE_TIME = 1,
37
- /**
38
- * provides the best balance between model performance and compile time.
39
- */
40
- BEST_BALANCE = 2,
41
- /**
42
- * may provide additional model execution performance but may incur longer compile times and higher host memory usage during model compilation.
43
- */
44
- MODEL_EXECUTION_PERFORMANCE = 3
45
- }
46
- /**
47
- * Compile options.
48
- */
49
- export interface CompileOptions {
50
- /**
51
- * @default - calc from parameters and quantDtype
52
- */
53
- readonly tpDegree?: number;
54
- /**
55
- * @default - No quant
56
- */
57
- readonly quantDtype?: QuantDtype;
58
- /**
59
- * @default 4092
60
- */
61
- readonly nPositions?: number;
62
- /**
63
- * @default OptLevel.BEST_BALANCE
64
- */
65
- readonly optLevel?: OptLevel;
66
- }
67
- /**
68
- * Represents the amount of parameters.
69
- */
70
- export declare class Parameters {
71
- private readonly billion;
72
- /**
73
- * Create a Parameters representing an amount bilion.
74
- * @param parameters number of parameters bilionX
75
- * @returns parameters
76
- */
77
- static billion(parameters: number): Parameters;
78
- private constructor();
79
- /**
80
- * Return this number of parameters as bilion.
81
- * @returns This number of parameters as bilion.
82
- */
83
- toBilion(): number;
84
- }
85
- /**
86
- * Compile target model basic infromation
87
- */
88
- export interface ModelOptions {
89
- readonly parameters: Parameters;
90
- }
91
- /**
92
- * Compile target model.
93
- */
94
- export declare class Model {
95
- readonly modelId: string;
96
- readonly options: ModelOptions;
97
- /**
98
- * model informations at HuggingFace
99
- * @param modelId model id on the HuggingFace
100
- * @param options model basic infromation
101
- * @returns model instance
102
- */
103
- static fromHuggingFace(modelId: string, options: ModelOptions): Model;
104
- private constructor();
105
- }
106
21
  /**
107
22
  * Props of NeuronxCompile.
108
23
  */
@@ -111,10 +26,6 @@ export interface NeuronxCompileProps {
111
26
  * VPC in which this will launch compile worker instance.
112
27
  */
113
28
  readonly vpc: ec2.IVpc;
114
- /**
115
- * The instance type of compile worker instance.
116
- */
117
- readonly instanceType?: NeuronxInstanceType;
118
29
  /**
119
30
  * The bucket to upload compiled artifacts.
120
31
  */
@@ -123,6 +34,10 @@ export interface NeuronxCompileProps {
123
34
  * The model to be compiled.
124
35
  */
125
36
  readonly model: Model;
37
+ /**
38
+ * The instance type of compile worker instance.
39
+ */
40
+ readonly instanceType?: NeuronxInstanceType;
126
41
  /**
127
42
  * The root volume of worker instance.
128
43
  * @default - N bilion parameters * 5GiB EBS
@@ -155,12 +70,20 @@ export interface NeuronxCompileProps {
155
70
  * Neuronx compile construct. Compile the model to work with Inferentia2 and Trainium1 and upload it to an S3 bucket.
156
71
  */
157
72
  export declare class NeuronxCompile extends Construct {
73
+ readonly compiledArtifactS3Bucket: IBucket;
158
74
  /**
159
75
  * S3 URL that compiled artifact uploaded.
160
76
  */
161
77
  readonly compiledArtifactS3Url: string;
78
+ /**
79
+ * S3 Prefix that compiled artifact uploaded.
80
+ */
81
+ readonly compiledArtifactS3Prefix: string;
82
+ readonly tpDegree: number;
83
+ readonly quantDtype?: QuantDtype;
84
+ readonly nPositions: number;
85
+ readonly optLevel: OptLevel;
86
+ readonly parameters: Parameters;
162
87
  constructor(scope: Construct, id: string, props: NeuronxCompileProps);
163
- private connectAcceleratorChips;
164
- private calcTpDegree;
165
88
  private selectInstanceTypeByTpDegree;
166
89
  }
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
- var _a, _b, _c;
2
+ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.NeuronxCompile = exports.Model = exports.Parameters = exports.OptLevel = exports.QuantDtype = void 0;
4
+ exports.NeuronxCompile = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const fs_1 = require("fs");
7
6
  const path_1 = require("path");
8
7
  const aws_cdk_lib_1 = require("aws-cdk-lib");
9
8
  const batch = require("aws-cdk-lib/aws-batch");
@@ -13,98 +12,28 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
13
12
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
14
13
  const custom_resources_1 = require("aws-cdk-lib/custom-resources");
15
14
  const constructs_1 = require("constructs");
15
+ const model_1 = require("./model");
16
16
  const neuronx_instance_type_1 = require("./neuronx-instance-type");
17
17
  const neuron_optimized_machine_image_1 = require("./private/neuron-optimized-machine-image");
18
- /**
19
- * Quant data type.
20
- */
21
- var QuantDtype;
22
- (function (QuantDtype) {
23
- /**
24
- * int8 weight storage.
25
- */
26
- QuantDtype["S8"] = "s8";
27
- })(QuantDtype || (exports.QuantDtype = QuantDtype = {}));
28
- /**
29
- * Optimization level.
30
- */
31
- var OptLevel;
32
- (function (OptLevel) {
33
- /**
34
- * enables the core performance optimizations in the compiler, while also minimizing compile time.
35
- */
36
- OptLevel[OptLevel["MINIMIZING_COMPILE_TIME"] = 1] = "MINIMIZING_COMPILE_TIME";
37
- /**
38
- * provides the best balance between model performance and compile time.
39
- */
40
- OptLevel[OptLevel["BEST_BALANCE"] = 2] = "BEST_BALANCE";
41
- /**
42
- * may provide additional model execution performance but may incur longer compile times and higher host memory usage during model compilation.
43
- */
44
- OptLevel[OptLevel["MODEL_EXECUTION_PERFORMANCE"] = 3] = "MODEL_EXECUTION_PERFORMANCE";
45
- })(OptLevel || (exports.OptLevel = OptLevel = {}));
46
- /**
47
- * Represents the amount of parameters.
48
- */
49
- class Parameters {
50
- /**
51
- * Create a Parameters representing an amount bilion.
52
- * @param parameters number of parameters bilionX
53
- * @returns parameters
54
- */
55
- static billion(parameters) {
56
- return new Parameters(parameters);
57
- }
58
- constructor(billion) {
59
- this.billion = billion;
60
- }
61
- /**
62
- * Return this number of parameters as bilion.
63
- * @returns This number of parameters as bilion.
64
- */
65
- toBilion() {
66
- return this.billion;
67
- }
68
- }
69
- exports.Parameters = Parameters;
70
- _a = JSII_RTTI_SYMBOL_1;
71
- Parameters[_a] = { fqn: "aws-cdk-neuronx-patterns.Parameters", version: "0.0.2" };
72
- /**
73
- * Compile target model.
74
- */
75
- class Model {
76
- /**
77
- * model informations at HuggingFace
78
- * @param modelId model id on the HuggingFace
79
- * @param options model basic infromation
80
- * @returns model instance
81
- */
82
- static fromHuggingFace(modelId, options) {
83
- return new Model(modelId, options);
84
- }
85
- constructor(modelId, options) {
86
- this.modelId = modelId;
87
- this.options = options;
88
- }
89
- }
90
- exports.Model = Model;
91
- _b = JSII_RTTI_SYMBOL_1;
92
- Model[_b] = { fqn: "aws-cdk-neuronx-patterns.Model", version: "0.0.2" };
18
+ const util_1 = require("./private/util");
93
19
  /**
94
20
  * Neuronx compile construct. Compile the model to work with Inferentia2 and Trainium1 and upload it to an S3 bucket.
95
21
  */
96
22
  class NeuronxCompile extends constructs_1.Construct {
97
23
  constructor(scope, id, props) {
98
24
  super(scope, id);
99
- const nPositions = props.compileOptions?.nPositions ?? 4092;
100
- const quantDtype = props.compileOptions?.quantDtype;
101
- const optLevel = props.compileOptions?.optLevel ?? OptLevel.BEST_BALANCE;
102
- const tpDegree = props.compileOptions?.tpDegree ??
103
- this.calcTpDegree(props.model.options.parameters, {
104
- nPositions,
105
- quantDtype,
106
- });
107
- const instanceType = props.instanceType ?? this.selectInstanceTypeByTpDegree(tpDegree);
25
+ this.parameters = props.model.options.parameters;
26
+ this.compiledArtifactS3Bucket = props.bucket;
27
+ this.nPositions = props.compileOptions?.nPositions ?? 4096;
28
+ this.quantDtype = props.compileOptions?.quantDtype;
29
+ this.optLevel = props.compileOptions?.optLevel ?? model_1.OptLevel.BEST_BALANCE;
30
+ this.tpDegree =
31
+ props.compileOptions?.tpDegree ??
32
+ (0, util_1.calcTpDegree)(props.model.options.parameters, {
33
+ nPositions: this.nPositions,
34
+ quantDtype: this.quantDtype,
35
+ });
36
+ const instanceType = props.instanceType ?? this.selectInstanceTypeByTpDegree(this.tpDegree);
108
37
  const launchTemplate = new ec2.LaunchTemplate(this, "LaunchTemplate", {
109
38
  blockDevices: [
110
39
  {
@@ -148,16 +77,25 @@ class NeuronxCompile extends constructs_1.Construct {
148
77
  ],
149
78
  });
150
79
  const runtime = props.runtime ?? {
151
- image: aws_ecs_1.ContainerImage.fromRegistry("public.ecr.aws/neuron/pytorch-training-neuronx:2.1.2-neuronx-py310-sdk2.19.0-ubuntu20.04"),
152
- neuronxVersion: "2.19.0",
153
- neuronxTransformersVersion: "0.11.351",
80
+ image: aws_ecs_1.ContainerImage.fromAsset((0, path_1.join)(__dirname, "../scripts/compile")),
81
+ neuronxVersion: "2.19.1",
154
82
  };
155
- let compiledArtifactPathPrefix = `${props.model.modelId}/neuronx-${runtime.neuronxVersion}/tp${tpDegree}-np${nPositions}-opt${optLevel}`;
156
- if (quantDtype) {
157
- compiledArtifactPathPrefix = `${compiledArtifactPathPrefix}-quant${quantDtype}`;
83
+ let compiledArtifactPathPrefix = `${props.model.modelId}/neuronx-${runtime.neuronxVersion}/tp${this.tpDegree}-np${this.nPositions}-opt${this.optLevel}`;
84
+ if (this.quantDtype) {
85
+ compiledArtifactPathPrefix = `${compiledArtifactPathPrefix}-quant${this.quantDtype}`;
158
86
  }
159
87
  props.bucket.grantReadWrite(computeEnvironment.instanceRole, `${compiledArtifactPathPrefix}/*`);
160
- const compileScript = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../scripts/compile.py")).toString();
88
+ const linuxParameters = new batch.LinuxParameters(this, "LinuxParameters");
89
+ linuxParameters.addDevices(...Array.from({
90
+ length: instanceType.acceleratorChips.chips,
91
+ }).map((_, index) => ({
92
+ hostPath: `/dev/neuron${index}`,
93
+ containerPath: `/dev/neuron${index}`,
94
+ permissions: [
95
+ batch.DevicePermission.READ,
96
+ batch.DevicePermission.WRITE,
97
+ ],
98
+ })));
161
99
  const jobDefinition = new batch.EcsJobDefinition(this, "JobDefinition", {
162
100
  container: new batch.EcsEc2ContainerDefinition(this, "ContainerDefinition", {
163
101
  image: runtime.image,
@@ -168,37 +106,17 @@ class NeuronxCompile extends constructs_1.Construct {
168
106
  // https://docs.aws.amazon.com/batch/latest/userguide/memory-management.html
169
107
  memory: aws_cdk_lib_1.Size.mebibytes(Math.ceil(instanceType.memory.toMebibytes() * 0.95)),
170
108
  cpu: instanceType.vCpu,
171
- command: [
172
- `cat <<EOF > compile.py\n${compileScript}\nEOF\n`,
173
- [
174
- runtime.neuronxTransformersVersion
175
- ? "pip install -U --extra-index-url https://pip.repos.neuron.amazonaws.com transformers-neuronx==$NEURONX_TRANSFORMERS_VERSION"
176
- : undefined,
177
- "curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash",
178
- "apt-get install git-lfs",
179
- "git lfs install",
180
- `git clone https://huggingface.co/${props.model.modelId} model`,
181
- "rm -rf model/.git",
182
- "python ./compile.py",
183
- `aws s3 sync --no-progress ./model ${props.bucket.s3UrlForObject(`${compiledArtifactPathPrefix}/model`)}`,
184
- `aws s3 sync --no-progress ./compiled ${props.bucket.s3UrlForObject(`${compiledArtifactPathPrefix}/compiled`)}`,
185
- "echo 'compile completed'",
186
- ]
187
- .filter((v) => !!v)
188
- .join(" && "),
189
- ],
190
109
  environment: {
191
110
  MODEL_ID: props.model.modelId,
192
- TP_DEGREE: tpDegree.toString(),
193
- N_POSITIONS: nPositions.toString(),
194
- OPT_LEVEL: optLevel.toString(),
195
- QUANT_DTYPE: quantDtype?.toString() ?? "",
111
+ TP_DEGREE: this.tpDegree.toString(),
112
+ N_POSITIONS: this.nPositions.toString(),
113
+ OPT_LEVEL: this.optLevel.toString(),
114
+ QUANT_DTYPE: this.quantDtype?.toString() ?? "",
196
115
  ARTIFACT_S3_URL: props.bucket.s3UrlForObject(compiledArtifactPathPrefix),
197
- NEURONX_TRANSFORMERS_VERSION: runtime.neuronxTransformersVersion ?? "",
198
116
  },
117
+ linuxParameters,
199
118
  }),
200
119
  });
201
- this.connectAcceleratorChips(jobDefinition, instanceType);
202
120
  const jobSubmitFunction = new aws_lambda_1.SingletonFunction(this, "JobSubmitFunction", {
203
121
  code: aws_lambda_1.Code.fromAsset((0, path_1.join)(__dirname, "private/await-compile-job")),
204
122
  handler: "index.onEvent",
@@ -229,42 +147,11 @@ class NeuronxCompile extends constructs_1.Construct {
229
147
  properties: {
230
148
  jobDefinitionArn: jobDefinition.jobDefinitionArn,
231
149
  jobQueueArn: jobQueue.jobQueueArn,
232
- artifactS3Url: props.bucket.s3UrlForObject(compiledArtifactPathPrefix),
150
+ artifactS3Prefix: compiledArtifactPathPrefix,
233
151
  },
234
152
  });
235
- this.compiledArtifactS3Url = compileJob.getAttString("ArtifactS3Url");
236
- }
237
- connectAcceleratorChips(jobDefinition, instanceType) {
238
- const devices = Array.from({
239
- length: instanceType.acceleratorChips.chips,
240
- }).map((_, index) => ({
241
- HostPath: `/dev/neuron${index}`,
242
- ContainerPath: `/dev/neuron${index}`,
243
- Permissions: ["read", "write"],
244
- }));
245
- const cfnJobDefinition = jobDefinition.node
246
- .defaultChild;
247
- cfnJobDefinition.addPropertyOverride("ContainerProperties.LinuxParameters.Devices", devices);
248
- }
249
- calcTpDegree(parameters, compileOptions) {
250
- // case of float16
251
- const bytesPerParamete = 16 / 8;
252
- // memory = bytes per parameter * number of parameters
253
- let memory = aws_cdk_lib_1.Size.gibibytes(bytesPerParamete * parameters.toBilion());
254
- switch (compileOptions.quantDtype) {
255
- case QuantDtype.S8:
256
- memory = aws_cdk_lib_1.Size.gibibytes(memory.toGibibytes() / 2);
257
- break;
258
- }
259
- const neronxCoreMemory = aws_cdk_lib_1.Size.gibibytes(16);
260
- const minimum = Math.ceil(memory.toGibibytes() / neronxCoreMemory.toGibibytes());
261
- const tpDegrees = [1, 2, 4, 8, 24];
262
- for (const tpDegree of tpDegrees) {
263
- if (minimum <= tpDegree) {
264
- return tpDegree;
265
- }
266
- }
267
- throw new Error("This model is too large, I can not support this model current version.");
153
+ this.compiledArtifactS3Prefix = compileJob.getAttString("ArtifactS3Prefix");
154
+ this.compiledArtifactS3Url = props.bucket.s3UrlForObject(this.compiledArtifactS3Prefix);
268
155
  }
269
156
  selectInstanceTypeByTpDegree(tpDegree) {
270
157
  const instanceTypes = [
@@ -281,6 +168,6 @@ class NeuronxCompile extends constructs_1.Construct {
281
168
  }
282
169
  }
283
170
  exports.NeuronxCompile = NeuronxCompile;
284
- _c = JSII_RTTI_SYMBOL_1;
285
- NeuronxCompile[_c] = { fqn: "aws-cdk-neuronx-patterns.NeuronxCompile", version: "0.0.2" };
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldXJvbngtY29tcGlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUFrQztBQUNsQywrQkFBNEI7QUFDNUIsNkNBQW1FO0FBQ25FLCtDQUErQztBQUMvQywyQ0FBMkM7QUFDM0MsaURBQXFEO0FBQ3JELGlEQUE0QztBQUM1Qyx1REFBMEU7QUFFMUUsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxtRUFBOEQ7QUFDOUQsNkZBQXVGO0FBZ0J2Rjs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILHVCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEI7O09BRUc7SUFDSCw2RUFBMkIsQ0FBQTtJQUMzQjs7T0FFRztJQUNILHVEQUFnQixDQUFBO0lBQ2hCOztPQUVHO0lBQ0gscUZBQStCLENBQUE7QUFDakMsQ0FBQyxFQWJXLFFBQVEsd0JBQVIsUUFBUSxRQWFuQjtBQXdCRDs7R0FFRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUMvQixPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxZQUFxQyxPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDeEQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOztBQWhCSCxnQ0FpQkM7OztBQVFEOztHQUVHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBcUI7UUFDM0QsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELFlBQ1csT0FBZSxFQUNmLE9BQXFCO1FBRHJCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUFjO0lBQzdCLENBQUM7O0FBYk4sc0JBY0M7OztBQWtERDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLHNCQUFTO0lBSzNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDNUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQztRQUN6RSxNQUFNLFFBQVEsR0FDWixLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVE7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hELFVBQVU7Z0JBQ1YsVUFBVTthQUNYLENBQUMsQ0FBQztRQUNMLE1BQU0sWUFBWSxHQUNoQixLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3BFLFlBQVksRUFBRTtnQkFDWjtvQkFDRSxVQUFVLEVBQUUsV0FBVztvQkFDdkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQy9CLEtBQUssQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO3dCQUM3QixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUNoRDtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FDbEUsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixhQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQzFDLHlCQUF5QixFQUFFLEtBQUs7WUFDaEMsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEtBQUssRUFBRSxJQUFJLDREQUEyQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7b0JBQzNELGFBQWE7b0JBQ2IsU0FBUyxFQUFFLFlBQVk7aUJBQ3hCO2FBQ0Y7WUFDRCxjQUFjO1lBQ2QsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQ0YsQ0FBQztRQUVBLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUN6QixDQUFDLG1CQUFtQixDQUNuQix5Q0FBeUMsRUFDekMsY0FBYyxDQUFDLG1CQUFtQixDQUNuQyxDQUFDO1FBRUYsa0JBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDcEQsbUJBQW1CLEVBQUU7Z0JBQ25CO29CQUNFLGtCQUFrQjtvQkFDbEIsS0FBSyxFQUFFLENBQUM7aUJBQ1Q7YUFDRjtZQUNELHdCQUF3QixFQUFFO2dCQUN4QjtvQkFDRSxLQUFLLEVBQUUsS0FBSyxDQUFDLDZCQUE2QixDQUFDLFFBQVE7b0JBQ25ELE1BQU0sRUFBRSxLQUFLLENBQUMsOEJBQThCLENBQUMsd0JBQXdCO29CQUNyRSxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUM3QixNQUFNLEVBQUUsS0FBSyxDQUFDLDhCQUE4QixDQUFDLE1BQU07aUJBQ3BEO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsT0FBTyxJQUFJO1lBQ2YsS0FBSyxFQUFFLHdCQUFjLENBQUMsWUFBWSxDQUNoQywwRkFBMEYsQ0FDM0Y7WUFDRCxjQUFjLEVBQUUsUUFBUTtZQUN4QiwwQkFBMEIsRUFBRSxVQUFtQjtTQUNoRCxDQUFDO1FBQ0osSUFBSSwwQkFBMEIsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxZQUFZLE9BQU8sQ0FBQyxjQUFjLE1BQU0sUUFBUSxNQUFNLFVBQVUsT0FBTyxRQUFRLEVBQUUsQ0FBQztRQUN6SSxJQUFJLFVBQVksRUFBRSxDQUFDO1lBQ2pCLDBCQUEwQixHQUFHLEdBQUcsMEJBQTBCLFNBQVMsVUFBVSxFQUFFLENBQUM7UUFDbEYsQ0FBQztRQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUN6QixrQkFBa0IsQ0FBQyxZQUFhLEVBQ2hDLEdBQUcsMEJBQTBCLElBQUksQ0FDbEMsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUEsaUJBQVksRUFDaEMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQ3pDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDYixNQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3RFLFNBQVMsRUFBRSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FDNUMsSUFBSSxFQUNKLHFCQUFxQixFQUNyQjtnQkFDRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLG9EQUFvRDtnQkFDcEQsa0JBQWtCO2dCQUNsQiwyREFBMkQ7Z0JBQzNELDBFQUEwRTtnQkFDMUUsNEVBQTRFO2dCQUM1RSxNQUFNLEVBQUUsa0JBQUksQ0FBQyxTQUFTLENBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FDcEQ7Z0JBQ0QsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJO2dCQUN0QixPQUFPLEVBQUU7b0JBQ1AsMkJBQTJCLGFBQWEsU0FBUztvQkFDakQ7d0JBQ0UsT0FBTyxDQUFDLDBCQUEwQjs0QkFDaEMsQ0FBQyxDQUFDLDZIQUE2SDs0QkFDL0gsQ0FBQyxDQUFDLFNBQVM7d0JBQ2IsMEZBQTBGO3dCQUMxRix5QkFBeUI7d0JBQ3pCLGlCQUFpQjt3QkFDakIsb0NBQW9DLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxRQUFRO3dCQUMvRCxtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIscUNBQXFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsMEJBQTBCLFFBQVEsQ0FBQyxFQUFFO3dCQUN6Ryx3Q0FBd0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRywwQkFBMEIsV0FBVyxDQUFDLEVBQUU7d0JBQy9HLDBCQUEwQjtxQkFDM0I7eUJBQ0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUNoQjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztvQkFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQzlCLFdBQVcsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFO29CQUNsQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDOUIsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO29CQUN6QyxlQUFlLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQzFDLDBCQUEwQixDQUMzQjtvQkFDRCw0QkFBNEIsRUFDMUIsT0FBTyxDQUFDLDBCQUEwQixJQUFJLEVBQUU7aUJBQzNDO2FBQ0YsQ0FDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFMUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLDhCQUFpQixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUN6RSxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDbEUsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixJQUFJLEVBQUUsc0NBQXNDO1NBQzdDLENBQUMsQ0FBQztRQUNILGFBQWEsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLDhCQUFpQixDQUNqRCxJQUFJLEVBQ0osdUJBQXVCLEVBQ3ZCO1lBQ0UsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sRUFBRSxrQkFBa0I7WUFDM0IsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixJQUFJLEVBQUUsc0NBQXNDO1NBQzdDLENBQ0YsQ0FBQztRQUNGLGVBQUssQ0FBQyxjQUFjLENBQUM7WUFDbkIsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ25CLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN4RCxjQUFjLEVBQUUsaUJBQWlCO1lBQ2pDLGlCQUFpQixFQUFFLHFCQUFxQjtZQUN4QyxhQUFhLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLFlBQVksRUFBRSxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDdEQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ25DLFlBQVksRUFBRSx3QkFBd0I7WUFDdEMsVUFBVSxFQUFFO2dCQUNWLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7Z0JBQ2hELFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDakMsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLDBCQUEwQixDQUFDO2FBQ3ZFO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLHVCQUF1QixDQUM3QixhQUFxQyxFQUNyQyxZQUFpQztRQUtqQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3pCLE1BQU0sRUFBRSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSztTQUM1QyxDQUFDLENBQUMsR0FBRyxDQUNKLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ1gsQ0FBQztZQUNDLFFBQVEsRUFBRSxjQUFjLEtBQUssRUFBRTtZQUMvQixhQUFhLEVBQUUsY0FBYyxLQUFLLEVBQUU7WUFDcEMsV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztTQUMvQixDQUE2RCxDQUNqRSxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsSUFBSTthQUN4QyxZQUFzQyxDQUFDO1FBQzFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUNsQyw2Q0FBNkMsRUFDN0MsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLFVBQXNCLEVBQUUsY0FBOEI7UUFDekUsa0JBQWtCO1FBQ2xCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxzREFBc0Q7UUFDdEQsSUFBSSxNQUFNLEdBQUcsa0JBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdEUsUUFBUSxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsS0FBSyxVQUFVLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxHQUFHLGtCQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtRQUNWLENBQUM7UUFDRCxNQUFNLGdCQUFnQixHQUFHLGtCQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3ZCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FDdEQsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakMsSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxRQUFnQjtRQUNuRCxNQUFNLGFBQWEsR0FBRztZQUNwQiwyQ0FBbUIsQ0FBQyxZQUFZO1lBQ2hDLDJDQUFtQixDQUFDLGFBQWE7WUFDakMsMkNBQW1CLENBQUMsYUFBYTtTQUNsQyxDQUFDO1FBQ0YsS0FBSyxNQUFNLFlBQVksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzNELE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7O0FBMVBILHdDQTJQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIFNpemUsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmF0Y2hcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgUnVudGltZSwgU2luZ2xldG9uRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXVyb254SW5zdGFuY2VUeXBlIH0gZnJvbSBcIi4vbmV1cm9ueC1pbnN0YW5jZS10eXBlXCI7XG5pbXBvcnQgeyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UgfSBmcm9tIFwiLi9wcml2YXRlL25ldXJvbi1vcHRpbWl6ZWQtbWFjaGluZS1pbWFnZVwiO1xuXG4vKipcbiAqIENvbXBpbGUgcnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21waWxlUnVudGltZSB7XG4gIC8qKlxuICAgKiBBbiBpbWFnZSBvZiB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSBjb21waWxlIGpvYiBpcyBleGVjdXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggdmVyc2lvbiBpbmNsdWRlZCBpbiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBuZXVyb254VmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFF1YW50IGRhdGEgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUXVhbnREdHlwZSB7XG4gIC8qKlxuICAgKiBpbnQ4IHdlaWdodCBzdG9yYWdlLlxuICAgKi9cbiAgUzggPSBcInM4XCIsXG59XG5cbi8qKlxuICogT3B0aW1pemF0aW9uIGxldmVsLlxuICovXG5leHBvcnQgZW51bSBPcHRMZXZlbCB7XG4gIC8qKlxuICAgKiBlbmFibGVzIHRoZSBjb3JlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaW4gdGhlIGNvbXBpbGVyLCB3aGlsZSBhbHNvIG1pbmltaXppbmcgY29tcGlsZSB0aW1lLlxuICAgKi9cbiAgTUlOSU1JWklOR19DT01QSUxFX1RJTUUgPSAxLFxuICAvKipcbiAgICogcHJvdmlkZXMgdGhlIGJlc3QgYmFsYW5jZSBiZXR3ZWVuIG1vZGVsIHBlcmZvcm1hbmNlIGFuZCBjb21waWxlIHRpbWUuXG4gICAqL1xuICBCRVNUX0JBTEFOQ0UgPSAyLFxuICAvKipcbiAgICogbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBtb2RlbCBleGVjdXRpb24gcGVyZm9ybWFuY2UgYnV0IG1heSBpbmN1ciBsb25nZXIgY29tcGlsZSB0aW1lcyBhbmQgaGlnaGVyIGhvc3QgbWVtb3J5IHVzYWdlIGR1cmluZyBtb2RlbCBjb21waWxhdGlvbi5cbiAgICovXG4gIE1PREVMX0VYRUNVVElPTl9QRVJGT1JNQU5DRSA9IDMsXG59XG5cbi8qKlxuICogQ29tcGlsZSBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gY2FsYyBmcm9tIHBhcmFtZXRlcnMgYW5kIHF1YW50RHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHRwRGVncmVlPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBObyBxdWFudFxuICAgKi9cbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCA0MDkyXG4gICAqL1xuICByZWFkb25seSBuUG9zaXRpb25zPzogbnVtYmVyO1xuICAvKipcbiAgICogQGRlZmF1bHQgT3B0TGV2ZWwuQkVTVF9CQUxBTkNFXG4gICAqL1xuICByZWFkb25seSBvcHRMZXZlbD86IE9wdExldmVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBQYXJhbWV0ZXJzIHJlcHJlc2VudGluZyBhbiBhbW91bnQgYmlsaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBudW1iZXIgb2YgcGFyYW1ldGVycyBiaWxpb25YXG4gICAqIEByZXR1cm5zIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyBiaWxsaW9uKHBhcmFtZXRlcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYmlsbGlvbjogbnVtYmVyKSB7fVxuICAvKipcbiAgICogUmV0dXJuIHRoaXMgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYmlsaW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFzIGJpbGlvbi5cbiAgICovXG4gIHRvQmlsaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJpbGxpb247XG4gIH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRhcmdldCBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM6IFBhcmFtZXRlcnM7XG59XG4vKipcbiAqIENvbXBpbGUgdGFyZ2V0IG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAvKipcbiAgICogbW9kZWwgaW5mb3JtYXRpb25zIGF0IEh1Z2dpbmdGYWNlXG4gICAqIEBwYXJhbSBtb2RlbElkIG1vZGVsIGlkIG9uIHRoZSBIdWdnaW5nRmFjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBtb2RlbCBiYXNpYyBpbmZyb21hdGlvblxuICAgKiBAcmV0dXJucyBtb2RlbCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGZyb21IdWdnaW5nRmFjZShtb2RlbElkOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGVsT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTW9kZWwobW9kZWxJZCwgb3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtb2RlbElkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogTW9kZWxPcHRpb25zLFxuICApIHt9XG59XG4vKipcbiAqIFByb3BzIG9mIE5ldXJvbnhDb21waWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldXJvbnhDb21waWxlUHJvcHMge1xuICAvKipcbiAgICogVlBDIGluIHdoaWNoIHRoaXMgd2lsbCBsYXVuY2ggY29tcGlsZSB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHR5cGUgb2YgY29tcGlsZSB3b3JrZXIgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBOZXVyb254SW5zdGFuY2VUeXBlO1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCB0byB1cGxvYWQgY29tcGlsZWQgYXJ0aWZhY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBJQnVja2V0O1xuICAvKipcbiAgICogVGhlIG1vZGVsIHRvIGJlIGNvbXBpbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWw6IE1vZGVsO1xuICAvKipcbiAgICogVGhlIHJvb3Qgdm9sdW1lIG9mIHdvcmtlciBpbnN0YW5jZS5cbiAgICogQGRlZmF1bHQgLSBOIGJpbGlvbiBwYXJhbWV0ZXJzICogNUdpQiBFQlNcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVNpemU/OiBTaXplO1xuICAvKipcbiAgICogQ29tcGlsZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCB7IG5ldXJvbnhTZGtWZXJzaW9uOiBcIjIuMTkuMFwiLCBpbWFnZTogQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtdHJhaW5pbmctbmV1cm9ueDoyLjEuMi1uZXVyb254LXB5MzEwLXNkazIuMTkuMC11YnVudHUyMC4wNFwiKX1cbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBDb21waWxlUnVudGltZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggY29tcGlsZSBvcHRpb25zLlxuICAgKiBAZGVmYXVsdCAtIEVhY2ggcHJvcGVydGllcyBhcmUgc2V0IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlT3B0aW9ucz86IENvbXBpbGVPcHRpb25zO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gdXNlIHNwb3QgaW5zdGFuY2VzLiBTcG90IGluc3RhbmNlcyBhcmUgbGVzcyBleHBlbnNpdmUgRUMyIGluc3RhbmNlcyB0aGF0IGNhbiBiZSByZWNsYWltZWQgYnkgRUMyIGF0IGFueSB0aW1lOyB5b3VyIGpvYiB3aWxsIGJlIGdpdmVuIHR3byBtaW51dGVzIG9mIG5vdGljZSBiZWZvcmUgcmVjbGFtYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcG90PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBWUEMgU3VibmV0cyB0aGlzIENvbXB1dGUgRW52aXJvbm1lbnQgd2lsbCBsYXVuY2ggaW5zdGFuY2VzIGluLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5ldyBzdWJuZXRzIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG59XG5cbi8qKlxuICogTmV1cm9ueCBjb21waWxlIGNvbnN0cnVjdC4gQ29tcGlsZSB0aGUgbW9kZWwgdG8gd29yayB3aXRoIEluZmVyZW50aWEyIGFuZCBUcmFpbml1bTEgYW5kIHVwbG9hZCBpdCB0byBhbiBTMyBidWNrZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXVyb254Q29tcGlsZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBTMyBVUkwgdGhhdCBjb21waWxlZCBhcnRpZmFjdCB1cGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVkQXJ0aWZhY3RTM1VybDogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV1cm9ueENvbXBpbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBuUG9zaXRpb25zID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/Lm5Qb3NpdGlvbnMgPz8gNDA5MjtcbiAgICBjb25zdCBxdWFudER0eXBlID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/LnF1YW50RHR5cGU7XG4gICAgY29uc3Qgb3B0TGV2ZWwgPSBwcm9wcy5jb21waWxlT3B0aW9ucz8ub3B0TGV2ZWwgPz8gT3B0TGV2ZWwuQkVTVF9CQUxBTkNFO1xuICAgIGNvbnN0IHRwRGVncmVlID1cbiAgICAgIHByb3BzLmNvbXBpbGVPcHRpb25zPy50cERlZ3JlZSA/P1xuICAgICAgdGhpcy5jYWxjVHBEZWdyZWUocHJvcHMubW9kZWwub3B0aW9ucy5wYXJhbWV0ZXJzLCB7XG4gICAgICAgIG5Qb3NpdGlvbnMsXG4gICAgICAgIHF1YW50RHR5cGUsXG4gICAgICB9KTtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPVxuICAgICAgcHJvcHMuaW5zdGFuY2VUeXBlID8/IHRoaXMuc2VsZWN0SW5zdGFuY2VUeXBlQnlUcERlZ3JlZSh0cERlZ3JlZSk7XG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGUgPSBuZXcgZWMyLkxhdW5jaFRlbXBsYXRlKHRoaXMsIFwiTGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiBcIi9kZXYveHZkYVwiLFxuICAgICAgICAgIHZvbHVtZTogZWMyLkJsb2NrRGV2aWNlVm9sdW1lLmVicyhcbiAgICAgICAgICAgIHByb3BzLnZvbHVtZVNpemU/LnRvR2liaWJ5dGVzKCkgPz9cbiAgICAgICAgICAgICAgcHJvcHMubW9kZWwub3B0aW9ucy5wYXJhbWV0ZXJzLnRvQmlsaW9uKCkgKiA1LFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXB1dGVFbnZpcm9ubWVudCA9IG5ldyBiYXRjaC5NYW5hZ2VkRWMyRWNzQ29tcHV0ZUVudmlyb25tZW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ29tcHV0ZUVudmlyb25tZW50XCIsXG4gICAgICB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgICBpbnN0YW5jZVR5cGVzOiBbaW5zdGFuY2VUeXBlLmluc3RhbmNlVHlwZV0sXG4gICAgICAgIHVzZU9wdGltYWxJbnN0YW5jZUNsYXNzZXM6IGZhbHNlLFxuICAgICAgICBpbWFnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbWFnZTogbmV3IE5ldXJvbk9wdGltaXplZE1hY2hpbmVJbWFnZSh0aGlzLCBcIk1hY2hpbkltYWdlXCIpLFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaW1hZ2VUeXBlOiBcIkVDU19BTDIwMjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBsYXVuY2hUZW1wbGF0ZSxcbiAgICAgICAgc3BvdDogcHJvcHMuc3BvdCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICAoXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQubm9kZS5kZWZhdWx0Q2hpbGQgYXMgYmF0Y2guQ2ZuQ29tcHV0ZUVudmlyb25tZW50XG4gICAgKS5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgXCJDb21wdXRlUmVzb3VyY2VzLkxhdW5jaFRlbXBsYXRlLlZlcnNpb25cIixcbiAgICAgIGxhdW5jaFRlbXBsYXRlLmxhdGVzdFZlcnNpb25OdW1iZXIsXG4gICAgKTtcblxuICAgIFRhZ3Mub2YoY29tcHV0ZUVudmlyb25tZW50KS5hZGQoXCJOYW1lXCIsIFwibmV1cm9ueC1jb21waWxlLXdvcmtlclwiKTtcbiAgICBjb25zdCBqb2JRdWV1ZSA9IG5ldyBiYXRjaC5Kb2JRdWV1ZSh0aGlzLCBcIkpvYlF1ZXVlXCIsIHtcbiAgICAgIGNvbXB1dGVFbnZpcm9ubWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbXB1dGVFbnZpcm9ubWVudCxcbiAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBqb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRlOiBiYXRjaC5Kb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnNTdGF0ZS5SVU5OQUJMRSxcbiAgICAgICAgICByZWFzb246IGJhdGNoLkpvYlN0YXRlVGltZUxpbWl0QWN0aW9uc1JlYXNvbi5KT0JfUkVTT1VSQ0VfUkVRVUlSRU1FTlQsXG4gICAgICAgICAgbWF4VGltZTogRHVyYXRpb24ubWludXRlcygxMCksXG4gICAgICAgICAgYWN0aW9uOiBiYXRjaC5Kb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnNBY3Rpb24uQ0FOQ0VMLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJ1bnRpbWU6IENvbXBpbGVSdW50aW1lICYgeyBuZXVyb254VHJhbnNmb3JtZXJzVmVyc2lvbj86IHN0cmluZyB9ID1cbiAgICAgIHByb3BzLnJ1bnRpbWUgPz8ge1xuICAgICAgICBpbWFnZTogQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KFxuICAgICAgICAgIFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtdHJhaW5pbmctbmV1cm9ueDoyLjEuMi1uZXVyb254LXB5MzEwLXNkazIuMTkuMC11YnVudHUyMC4wNFwiLFxuICAgICAgICApLFxuICAgICAgICBuZXVyb254VmVyc2lvbjogXCIyLjE5LjBcIixcbiAgICAgICAgbmV1cm9ueFRyYW5zZm9ybWVyc1ZlcnNpb246IFwiMC4xMS4zNTFcIiBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgbGV0IGNvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4ID0gYCR7cHJvcHMubW9kZWwubW9kZWxJZH0vbmV1cm9ueC0ke3J1bnRpbWUubmV1cm9ueFZlcnNpb259L3RwJHt0cERlZ3JlZX0tbnAke25Qb3NpdGlvbnN9LW9wdCR7b3B0TGV2ZWx9YDtcbiAgICBpZiAocXVhbnREdHlwZSEhKSB7XG4gICAgICBjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeCA9IGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS1xdWFudCR7cXVhbnREdHlwZX1gO1xuICAgIH1cbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQuaW5zdGFuY2VSb2xlISxcbiAgICAgIGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS8qYCxcbiAgICApO1xuXG4gICAgY29uc3QgY29tcGlsZVNjcmlwdCA9IHJlYWRGaWxlU3luYyhcbiAgICAgIGpvaW4oX19kaXJuYW1lLCBcIi4uL3NjcmlwdHMvY29tcGlsZS5weVwiKSxcbiAgICApLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbiA9IG5ldyBiYXRjaC5FY3NKb2JEZWZpbml0aW9uKHRoaXMsIFwiSm9iRGVmaW5pdGlvblwiLCB7XG4gICAgICBjb250YWluZXI6IG5ldyBiYXRjaC5FY3NFYzJDb250YWluZXJEZWZpbml0aW9uKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkNvbnRhaW5lckRlZmluaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIGltYWdlOiBydW50aW1lLmltYWdlLFxuICAgICAgICAgIC8vIFRoZSBmbGxvd2luZyBjb21tYW5kIHdhcyBleGVjdXRlZCBvbiBpbmYyLjh4bGFyZ2VcbiAgICAgICAgICAvLyBzaC01LjIkIGZyZWUgLWJcbiAgICAgICAgICAvLyBcdFx0XHR0b3RhbFx0XHRcdFx0XHR1c2VkXHRcdFx0ZnJlZVx0XHRcdFx0XHRzaGFyZWRcdGJ1ZmYvY2FjaGVcdGF2YWlsYWJsZVxuICAgICAgICAgIC8vIE1lbTpcdDEzMjI2NTc2NjkxMlx0ODY2MzIwMzg0XHQxMzAzNDE3ODU2MDBcdDY2NzY0OFx0MTA1NzY2MDkyOFx0MTMwNTI5MTQ4OTI4XG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvbWVtb3J5LW1hbmFnZW1lbnQuaHRtbFxuICAgICAgICAgIG1lbW9yeTogU2l6ZS5tZWJpYnl0ZXMoXG4gICAgICAgICAgICBNYXRoLmNlaWwoaW5zdGFuY2VUeXBlLm1lbW9yeS50b01lYmlieXRlcygpICogMC45NSksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjcHU6IGluc3RhbmNlVHlwZS52Q3B1LFxuICAgICAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgICAgIGBjYXQgPDxFT0YgPiBjb21waWxlLnB5XFxuJHtjb21waWxlU2NyaXB0fVxcbkVPRlxcbmAsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHJ1bnRpbWUubmV1cm9ueFRyYW5zZm9ybWVyc1ZlcnNpb25cbiAgICAgICAgICAgICAgICA/IFwicGlwIGluc3RhbGwgLVUgLS1leHRyYS1pbmRleC11cmwgaHR0cHM6Ly9waXAucmVwb3MubmV1cm9uLmFtYXpvbmF3cy5jb20gdHJhbnNmb3JtZXJzLW5ldXJvbng9PSRORVVST05YX1RSQU5TRk9STUVSU19WRVJTSU9OXCJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgXCJjdXJsIC1zIGh0dHBzOi8vcGFja2FnZWNsb3VkLmlvL2luc3RhbGwvcmVwb3NpdG9yaWVzL2dpdGh1Yi9naXQtbGZzL3NjcmlwdC5kZWIuc2ggfCBiYXNoXCIsXG4gICAgICAgICAgICAgIFwiYXB0LWdldCBpbnN0YWxsIGdpdC1sZnNcIixcbiAgICAgICAgICAgICAgXCJnaXQgbGZzIGluc3RhbGxcIixcbiAgICAgICAgICAgICAgYGdpdCBjbG9uZSBodHRwczovL2h1Z2dpbmdmYWNlLmNvLyR7cHJvcHMubW9kZWwubW9kZWxJZH0gbW9kZWxgLFxuICAgICAgICAgICAgICBcInJtIC1yZiBtb2RlbC8uZ2l0XCIsXG4gICAgICAgICAgICAgIFwicHl0aG9uIC4vY29tcGlsZS5weVwiLFxuICAgICAgICAgICAgICBgYXdzIHMzIHN5bmMgLS1uby1wcm9ncmVzcyAuL21vZGVsICR7cHJvcHMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS9tb2RlbGApfWAsXG4gICAgICAgICAgICAgIGBhd3MgczMgc3luYyAtLW5vLXByb2dyZXNzIC4vY29tcGlsZWQgJHtwcm9wcy5idWNrZXQuczNVcmxGb3JPYmplY3QoYCR7Y29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXh9L2NvbXBpbGVkYCl9YCxcbiAgICAgICAgICAgICAgXCJlY2hvICdjb21waWxlIGNvbXBsZXRlZCdcIixcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgLmZpbHRlcigodikgPT4gISF2KVxuICAgICAgICAgICAgICAuam9pbihcIiAmJiBcIiksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgTU9ERUxfSUQ6IHByb3BzLm1vZGVsLm1vZGVsSWQsXG4gICAgICAgICAgICBUUF9ERUdSRUU6IHRwRGVncmVlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBOX1BPU0lUSU9OUzogblBvc2l0aW9ucy50b1N0cmluZygpLFxuICAgICAgICAgICAgT1BUX0xFVkVMOiBvcHRMZXZlbC50b1N0cmluZygpLFxuICAgICAgICAgICAgUVVBTlRfRFRZUEU6IHF1YW50RHR5cGU/LnRvU3RyaW5nKCkgPz8gXCJcIixcbiAgICAgICAgICAgIEFSVElGQUNUX1MzX1VSTDogcHJvcHMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KFxuICAgICAgICAgICAgICBjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBORVVST05YX1RSQU5TRk9STUVSU19WRVJTSU9OOlxuICAgICAgICAgICAgICBydW50aW1lLm5ldXJvbnhUcmFuc2Zvcm1lcnNWZXJzaW9uID8/IFwiXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0QWNjZWxlcmF0b3JDaGlwcyhqb2JEZWZpbml0aW9uLCBpbnN0YW5jZVR5cGUpO1xuXG4gICAgY29uc3Qgam9iU3VibWl0RnVuY3Rpb24gPSBuZXcgU2luZ2xldG9uRnVuY3Rpb24odGhpcywgXCJKb2JTdWJtaXRGdW5jdGlvblwiLCB7XG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCJwcml2YXRlL2F3YWl0LWNvbXBpbGUtam9iXCIpKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXgub25FdmVudFwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIHV1aWQ6IFwiMTM2MWY0NjktNWM5Mi00YzQ2LTllMTEtNWQxZGJmOTI1YmFjXCIsXG4gICAgfSk7XG4gICAgam9iRGVmaW5pdGlvbi5ncmFudFN1Ym1pdEpvYihqb2JTdWJtaXRGdW5jdGlvbiwgam9iUXVldWUpO1xuICAgIGNvbnN0IGpvYk1vbml0b3JpbmdGdW5jdGlvbiA9IG5ldyBTaW5nbGV0b25GdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkpvYk1vbml0b3JpbmdGdW5jdGlvblwiLFxuICAgICAge1xuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCJwcml2YXRlL2F3YWl0LWNvbXBpbGUtam9iXCIpKSxcbiAgICAgICAgaGFuZGxlcjogXCJpbmRleC5pc0NvbXBsZXRlXCIsXG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgIHV1aWQ6IFwiZGYxNmRiYTgtNWY3Ny00ODBjLWE2YWQtY2ZkZjc0YzNkZTYyXCIsXG4gICAgICB9LFxuICAgICk7XG4gICAgR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgcmVzb3VyY2VBcm5zOiBbXCIqXCJdLFxuICAgICAgZ3JhbnRlZTogam9iTW9uaXRvcmluZ0Z1bmN0aW9uLFxuICAgICAgYWN0aW9uczogW1wiYmF0Y2g6RGVzY3JpYmVKb2JzXCJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIFwiQ29tcGlsZUpvYlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBqb2JTdWJtaXRGdW5jdGlvbixcbiAgICAgIGlzQ29tcGxldGVIYW5kbGVyOiBqb2JNb25pdG9yaW5nRnVuY3Rpb24sXG4gICAgICBxdWVyeUludGVydmFsOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgdG90YWxUaW1lb3V0OiBEdXJhdGlvbi5ob3VycygxKSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21waWxlSm9iID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpOZXVyb254Q29tcGlsZVwiLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBqb2JEZWZpbml0aW9uQXJuOiBqb2JEZWZpbml0aW9uLmpvYkRlZmluaXRpb25Bcm4sXG4gICAgICAgIGpvYlF1ZXVlQXJuOiBqb2JRdWV1ZS5qb2JRdWV1ZUFybixcbiAgICAgICAgYXJ0aWZhY3RTM1VybDogcHJvcHMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KGNvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNVcmwgPSBjb21waWxlSm9iLmdldEF0dFN0cmluZyhcIkFydGlmYWN0UzNVcmxcIik7XG4gIH1cblxuICBwcml2YXRlIGNvbm5lY3RBY2NlbGVyYXRvckNoaXBzKFxuICAgIGpvYkRlZmluaXRpb246IGJhdGNoLkVjc0pvYkRlZmluaXRpb24sXG4gICAgaW5zdGFuY2VUeXBlOiBOZXVyb254SW5zdGFuY2VUeXBlLFxuICApIHtcbiAgICB0eXBlIFBhc2NhbENhc2U8VCBleHRlbmRzIG9iamVjdD4gPSB7XG4gICAgICBbUCBpbiBrZXlvZiBUIGFzIFAgZXh0ZW5kcyBzdHJpbmcgPyBDYXBpdGFsaXplPFA+IDogbmV2ZXJdOiBUW1BdO1xuICAgIH07XG4gICAgY29uc3QgZGV2aWNlcyA9IEFycmF5LmZyb20oe1xuICAgICAgbGVuZ3RoOiBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5jaGlwcyxcbiAgICB9KS5tYXAoXG4gICAgICAoXywgaW5kZXgpID0+XG4gICAgICAgICh7XG4gICAgICAgICAgSG9zdFBhdGg6IGAvZGV2L25ldXJvbiR7aW5kZXh9YCxcbiAgICAgICAgICBDb250YWluZXJQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgICAgUGVybWlzc2lvbnM6IFtcInJlYWRcIiwgXCJ3cml0ZVwiXSxcbiAgICAgICAgfSkgc2F0aXNmaWVzIFBhc2NhbENhc2U8YmF0Y2guQ2ZuSm9iRGVmaW5pdGlvbi5EZXZpY2VQcm9wZXJ0eT4sXG4gICAgKTtcbiAgICBjb25zdCBjZm5Kb2JEZWZpbml0aW9uID0gam9iRGVmaW5pdGlvbi5ub2RlXG4gICAgICAuZGVmYXVsdENoaWxkIGFzIGJhdGNoLkNmbkpvYkRlZmluaXRpb247XG4gICAgY2ZuSm9iRGVmaW5pdGlvbi5hZGRQcm9wZXJ0eU92ZXJyaWRlKFxuICAgICAgXCJDb250YWluZXJQcm9wZXJ0aWVzLkxpbnV4UGFyYW1ldGVycy5EZXZpY2VzXCIsXG4gICAgICBkZXZpY2VzLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNhbGNUcERlZ3JlZShwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzLCBjb21waWxlT3B0aW9uczogQ29tcGlsZU9wdGlvbnMpIHtcbiAgICAvLyBjYXNlIG9mIGZsb2F0MTZcbiAgICBjb25zdCBieXRlc1BlclBhcmFtZXRlID0gMTYgLyA4O1xuICAgIC8vIG1lbW9yeSA9IGJ5dGVzIHBlciBwYXJhbWV0ZXIgKiBudW1iZXIgb2YgcGFyYW1ldGVyc1xuICAgIGxldCBtZW1vcnkgPSBTaXplLmdpYmlieXRlcyhieXRlc1BlclBhcmFtZXRlICogcGFyYW1ldGVycy50b0JpbGlvbigpKTtcbiAgICBzd2l0Y2ggKGNvbXBpbGVPcHRpb25zLnF1YW50RHR5cGUpIHtcbiAgICAgIGNhc2UgUXVhbnREdHlwZS5TODpcbiAgICAgICAgbWVtb3J5ID0gU2l6ZS5naWJpYnl0ZXMobWVtb3J5LnRvR2liaWJ5dGVzKCkgLyAyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG5lcm9ueENvcmVNZW1vcnkgPSBTaXplLmdpYmlieXRlcygxNik7XG4gICAgY29uc3QgbWluaW11bSA9IE1hdGguY2VpbChcbiAgICAgIG1lbW9yeS50b0dpYmlieXRlcygpIC8gbmVyb254Q29yZU1lbW9yeS50b0dpYmlieXRlcygpLFxuICAgICk7XG5cbiAgICBjb25zdCB0cERlZ3JlZXMgPSBbMSwgMiwgNCwgOCwgMjRdO1xuICAgIGZvciAoY29uc3QgdHBEZWdyZWUgb2YgdHBEZWdyZWVzKSB7XG4gICAgICBpZiAobWluaW11bSA8PSB0cERlZ3JlZSkge1xuICAgICAgICByZXR1cm4gdHBEZWdyZWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVGhpcyBtb2RlbCBpcyB0b28gbGFyZ2UsIEkgY2FuIG5vdCBzdXBwb3J0IHRoaXMgbW9kZWwgY3VycmVudCB2ZXJzaW9uLlwiLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEluc3RhbmNlVHlwZUJ5VHBEZWdyZWUodHBEZWdyZWU6IG51bWJlcikge1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZXMgPSBbXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfOFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl8yNFhMQVJHRSxcbiAgICAgIE5ldXJvbnhJbnN0YW5jZVR5cGUuSU5GMl80OFhMQVJHRSxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgaW5zdGFuY2VUeXBlIG9mIGluc3RhbmNlVHlwZXMpIHtcbiAgICAgIGlmICh0cERlZ3JlZSA8PSBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5uZXVyb254Q29yZXMpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJUaGlzIG1vZGVsIGlzIHRvbyBsYXJnZSwgSSBjYW4gbm90IHN1cHBvcnQgdGhpcyBtb2RlbCBjdXJyZW50IHZlcnNpb24uXCIsXG4gICAgKTtcbiAgfVxufVxuIl19
171
+ _a = JSII_RTTI_SYMBOL_1;
172
+ NeuronxCompile[_a] = { fqn: "aws-cdk-neuronx-patterns.NeuronxCompile", version: "0.0.4" };
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV1cm9ueC1jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldXJvbngtY29tcGlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUE0QjtBQUM1Qiw2Q0FBbUU7QUFDbkUsK0NBQStDO0FBQy9DLDJDQUEyQztBQUMzQyxpREFBcUQ7QUFDckQsaURBQTRDO0FBQzVDLHVEQUEwRTtBQUUxRSxtRUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLG1DQU1pQjtBQUNqQixtRUFBOEQ7QUFDOUQsNkZBQXVGO0FBQ3ZGLHlDQUE4QztBQWdFOUM7O0dBRUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQWUzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsUUFBUSxJQUFJLGdCQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxRQUFRO1lBQ1gsS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRO2dCQUM5QixJQUFBLG1CQUFZLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO29CQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFB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QUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQzs7QUF0TUgsd0NBdU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24sIFNpemUsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmF0Y2hcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZSwgUnVudGltZSwgU2luZ2xldG9uRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDb21waWxlT3B0aW9ucyxcbiAgTW9kZWwsXG4gIE9wdExldmVsLFxuICBQYXJhbWV0ZXJzLFxuICBRdWFudER0eXBlLFxufSBmcm9tIFwiLi9tb2RlbFwiO1xuaW1wb3J0IHsgTmV1cm9ueEluc3RhbmNlVHlwZSB9IGZyb20gXCIuL25ldXJvbngtaW5zdGFuY2UtdHlwZVwiO1xuaW1wb3J0IHsgTmV1cm9uT3B0aW1pemVkTWFjaGluZUltYWdlIH0gZnJvbSBcIi4vcHJpdmF0ZS9uZXVyb24tb3B0aW1pemVkLW1hY2hpbmUtaW1hZ2VcIjtcbmltcG9ydCB7IGNhbGNUcERlZ3JlZSB9IGZyb20gXCIuL3ByaXZhdGUvdXRpbFwiO1xuXG4vKipcbiAqIENvbXBpbGUgcnVudGltZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21waWxlUnVudGltZSB7XG4gIC8qKlxuICAgKiBBbiBpbWFnZSBvZiB0aGUgY29udGFpbmVyIHdoZXJlIHRoZSBjb21waWxlIGpvYiBpcyBleGVjdXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgLyoqXG4gICAqIE5ldXJvbnggdmVyc2lvbiBpbmNsdWRlZCBpbiBjb250YWluZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBuZXVyb254VmVyc2lvbjogc3RyaW5nO1xufVxuLyoqXG4gKiBQcm9wcyBvZiBOZXVyb254Q29tcGlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXVyb254Q29tcGlsZVByb3BzIHtcbiAgLyoqXG4gICAqIFZQQyBpbiB3aGljaCB0aGlzIHdpbGwgbGF1bmNoIGNvbXBpbGUgd29ya2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIFRoZSBidWNrZXQgdG8gdXBsb2FkIGNvbXBpbGVkIGFydGlmYWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0byBiZSBjb21waWxlZC5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGVsOiBNb2RlbDtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSB0eXBlIG9mIGNvbXBpbGUgd29ya2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogTmV1cm9ueEluc3RhbmNlVHlwZTtcbiAgLyoqXG4gICAqIFRoZSByb290IHZvbHVtZSBvZiB3b3JrZXIgaW5zdGFuY2UuXG4gICAqIEBkZWZhdWx0IC0gTiBiaWxpb24gcGFyYW1ldGVycyAqIDVHaUIgRUJTXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVTaXplPzogU2l6ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgcnVudGltZS5cbiAgICogQGRlZmF1bHQgeyBuZXVyb254U2RrVmVyc2lvbjogXCIyLjE5LjBcIiwgaW1hZ2U6IENvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeShcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLXRyYWluaW5nLW5ldXJvbng6Mi4xLjItbmV1cm9ueC1weTMxMC1zZGsyLjE5LjAtdWJ1bnR1MjAuMDRcIil9XG4gICAqL1xuICByZWFkb25seSBydW50aW1lPzogQ29tcGlsZVJ1bnRpbWU7XG4gIC8qKlxuICAgKiBOZXVyb254IGNvbXBpbGUgb3B0aW9ucy5cbiAgICogQGRlZmF1bHQgLSBFYWNoIHByb3BlcnRpZXMgYXJlIHNldCBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZU9wdGlvbnM/OiBDb21waWxlT3B0aW9ucztcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSBzcG90IGluc3RhbmNlcy4gU3BvdCBpbnN0YW5jZXMgYXJlIGxlc3MgZXhwZW5zaXZlIEVDMiBpbnN0YW5jZXMgdGhhdCBjYW4gYmUgcmVjbGFpbWVkIGJ5IEVDMiBhdCBhbnkgdGltZTsgeW91ciBqb2Igd2lsbCBiZSBnaXZlbiB0d28gbWludXRlcyBvZiBub3RpY2UgYmVmb3JlIHJlY2xhbWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgVlBDIFN1Ym5ldHMgdGhpcyBDb21wdXRlIEVudmlyb25tZW50IHdpbGwgbGF1bmNoIGluc3RhbmNlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBuZXcgc3VibmV0cyB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xufVxuXG4vKipcbiAqIE5ldXJvbnggY29tcGlsZSBjb25zdHJ1Y3QuIENvbXBpbGUgdGhlIG1vZGVsIHRvIHdvcmsgd2l0aCBJbmZlcmVudGlhMiBhbmQgVHJhaW5pdW0xIGFuZCB1cGxvYWQgaXQgdG8gYW4gUzMgYnVja2V0LlxuICovXG5leHBvcnQgY2xhc3MgTmV1cm9ueENvbXBpbGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UzNCdWNrZXQ6IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBTMyBVUkwgdGhhdCBjb21waWxlZCBhcnRpZmFjdCB1cGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBpbGVkQXJ0aWZhY3RTM1VybDogc3RyaW5nO1xuICAvKipcbiAgICogUzMgUHJlZml4IHRoYXQgY29tcGlsZWQgYXJ0aWZhY3QgdXBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlZEFydGlmYWN0UzNQcmVmaXg6IHN0cmluZztcbiAgcmVhZG9ubHkgdHBEZWdyZWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgcXVhbnREdHlwZT86IFF1YW50RHR5cGU7XG4gIHJlYWRvbmx5IG5Qb3NpdGlvbnM6IG51bWJlcjtcbiAgcmVhZG9ubHkgb3B0TGV2ZWw6IE9wdExldmVsO1xuICByZWFkb25seSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV1cm9ueENvbXBpbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBwcm9wcy5tb2RlbC5vcHRpb25zLnBhcmFtZXRlcnM7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNCdWNrZXQgPSBwcm9wcy5idWNrZXQ7XG4gICAgdGhpcy5uUG9zaXRpb25zID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/Lm5Qb3NpdGlvbnMgPz8gNDA5NjtcbiAgICB0aGlzLnF1YW50RHR5cGUgPSBwcm9wcy5jb21waWxlT3B0aW9ucz8ucXVhbnREdHlwZTtcbiAgICB0aGlzLm9wdExldmVsID0gcHJvcHMuY29tcGlsZU9wdGlvbnM/Lm9wdExldmVsID8/IE9wdExldmVsLkJFU1RfQkFMQU5DRTtcbiAgICB0aGlzLnRwRGVncmVlID1cbiAgICAgIHByb3BzLmNvbXBpbGVPcHRpb25zPy50cERlZ3JlZSA/P1xuICAgICAgY2FsY1RwRGVncmVlKHByb3BzLm1vZGVsLm9wdGlvbnMucGFyYW1ldGVycywge1xuICAgICAgICBuUG9zaXRpb25zOiB0aGlzLm5Qb3NpdGlvbnMsXG4gICAgICAgIHF1YW50RHR5cGU6IHRoaXMucXVhbnREdHlwZSxcbiAgICAgIH0pO1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9XG4gICAgICBwcm9wcy5pbnN0YW5jZVR5cGUgPz8gdGhpcy5zZWxlY3RJbnN0YW5jZVR5cGVCeVRwRGVncmVlKHRoaXMudHBEZWdyZWUpO1xuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gbmV3IGVjMi5MYXVuY2hUZW1wbGF0ZSh0aGlzLCBcIkxhdW5jaFRlbXBsYXRlXCIsIHtcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IGVjMi5CbG9ja0RldmljZVZvbHVtZS5lYnMoXG4gICAgICAgICAgICBwcm9wcy52b2x1bWVTaXplPy50b0dpYmlieXRlcygpID8/XG4gICAgICAgICAgICAgIHByb3BzLm1vZGVsLm9wdGlvbnMucGFyYW1ldGVycy50b0JpbGlvbigpICogNSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21wdXRlRW52aXJvbm1lbnQgPSBuZXcgYmF0Y2guTWFuYWdlZEVjMkVjc0NvbXB1dGVFbnZpcm9ubWVudChcbiAgICAgIHRoaXMsXG4gICAgICBcIkNvbXB1dGVFbnZpcm9ubWVudFwiLFxuICAgICAge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICAgICAgaW5zdGFuY2VUeXBlczogW2luc3RhbmNlVHlwZS5pbnN0YW5jZVR5cGVdLFxuICAgICAgICB1c2VPcHRpbWFsSW5zdGFuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgICAgaW1hZ2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW1hZ2U6IG5ldyBOZXVyb25PcHRpbWl6ZWRNYWNoaW5lSW1hZ2UodGhpcywgXCJNYWNoaW5JbWFnZVwiKSxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGltYWdlVHlwZTogXCJFQ1NfQUwyMDIzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbGF1bmNoVGVtcGxhdGUsXG4gICAgICAgIHNwb3Q6IHByb3BzLnNwb3QsXG4gICAgICB9LFxuICAgICk7XG4gICAgKFxuICAgICAgY29tcHV0ZUVudmlyb25tZW50Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGJhdGNoLkNmbkNvbXB1dGVFbnZpcm9ubWVudFxuICAgICkuYWRkUHJvcGVydHlPdmVycmlkZShcbiAgICAgIFwiQ29tcHV0ZVJlc291cmNlcy5MYXVuY2hUZW1wbGF0ZS5WZXJzaW9uXCIsXG4gICAgICBsYXVuY2hUZW1wbGF0ZS5sYXRlc3RWZXJzaW9uTnVtYmVyLFxuICAgICk7XG5cbiAgICBUYWdzLm9mKGNvbXB1dGVFbnZpcm9ubWVudCkuYWRkKFwiTmFtZVwiLCBcIm5ldXJvbngtY29tcGlsZS13b3JrZXJcIik7XG4gICAgY29uc3Qgam9iUXVldWUgPSBuZXcgYmF0Y2guSm9iUXVldWUodGhpcywgXCJKb2JRdWV1ZVwiLCB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wdXRlRW52aXJvbm1lbnQsXG4gICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgam9iU3RhdGVUaW1lTGltaXRBY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0ZTogYmF0Y2guSm9iU3RhdGVUaW1lTGltaXRBY3Rpb25zU3RhdGUuUlVOTkFCTEUsXG4gICAgICAgICAgcmVhc29uOiBiYXRjaC5Kb2JTdGF0ZVRpbWVMaW1pdEFjdGlvbnNSZWFzb24uSk9CX1JFU09VUkNFX1JFUVVJUkVNRU5ULFxuICAgICAgICAgIG1heFRpbWU6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgICAgIGFjdGlvbjogYmF0Y2guSm9iU3RhdGVUaW1lTGltaXRBY3Rpb25zQWN0aW9uLkNBTkNFTCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBydW50aW1lOiBDb21waWxlUnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8ge1xuICAgICAgaW1hZ2U6IENvbnRhaW5lckltYWdlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCIuLi9zY3JpcHRzL2NvbXBpbGVcIikpLFxuICAgICAgbmV1cm9ueFZlcnNpb246IFwiMi4xOS4xXCIsXG4gICAgfTtcbiAgICBsZXQgY29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXggPSBgJHtwcm9wcy5tb2RlbC5tb2RlbElkfS9uZXVyb254LSR7cnVudGltZS5uZXVyb254VmVyc2lvbn0vdHAke3RoaXMudHBEZWdyZWV9LW5wJHt0aGlzLm5Qb3NpdGlvbnN9LW9wdCR7dGhpcy5vcHRMZXZlbH1gO1xuICAgIGlmICh0aGlzLnF1YW50RHR5cGUhISkge1xuICAgICAgY29tcGlsZWRBcnRpZmFjdFBhdGhQcmVmaXggPSBgJHtjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeH0tcXVhbnQke3RoaXMucXVhbnREdHlwZX1gO1xuICAgIH1cbiAgICBwcm9wcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQuaW5zdGFuY2VSb2xlISxcbiAgICAgIGAke2NvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4fS8qYCxcbiAgICApO1xuICAgIGNvbnN0IGxpbnV4UGFyYW1ldGVycyA9IG5ldyBiYXRjaC5MaW51eFBhcmFtZXRlcnModGhpcywgXCJMaW51eFBhcmFtZXRlcnNcIik7XG4gICAgbGludXhQYXJhbWV0ZXJzLmFkZERldmljZXMoXG4gICAgICAuLi5BcnJheS5mcm9tKHtcbiAgICAgICAgbGVuZ3RoOiBpbnN0YW5jZVR5cGUuYWNjZWxlcmF0b3JDaGlwcy5jaGlwcyxcbiAgICAgIH0pLm1hcCgoXywgaW5kZXgpID0+ICh7XG4gICAgICAgIGhvc3RQYXRoOiBgL2Rldi9uZXVyb24ke2luZGV4fWAsXG4gICAgICAgIGNvbnRhaW5lclBhdGg6IGAvZGV2L25ldXJvbiR7aW5kZXh9YCxcbiAgICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAgICBiYXRjaC5EZXZpY2VQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgYmF0Y2guRGV2aWNlUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgXSxcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIGNvbnN0IGpvYkRlZmluaXRpb24gPSBuZXcgYmF0Y2guRWNzSm9iRGVmaW5pdGlvbih0aGlzLCBcIkpvYkRlZmluaXRpb25cIiwge1xuICAgICAgY29udGFpbmVyOiBuZXcgYmF0Y2guRWNzRWMyQ29udGFpbmVyRGVmaW5pdGlvbihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJDb250YWluZXJEZWZpbml0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZTogcnVudGltZS5pbWFnZSxcbiAgICAgICAgICAvLyBUaGUgZmxsb3dpbmcgY29tbWFuZCB3YXMgZXhlY3V0ZWQgb24gaW5mMi44eGxhcmdlXG4gICAgICAgICAgLy8gc2gtNS4yJCBmcmVlIC1iXG4gICAgICAgICAgLy8gXHRcdFx0dG90YWxcdFx0XHRcdFx0dXNlZFx0XHRcdGZyZWVcdFx0XHRcdFx0c2hhcmVkXHRidWZmL2NhY2hlXHRhdmFpbGFibGVcbiAgICAgICAgICAvLyBNZW06XHQxMzIyNjU3NjY5MTJcdDg2NjMyMDM4NFx0MTMwMzQxNzg1NjAwXHQ2Njc2NDhcdDEwNTc2NjA5MjhcdDEzMDUyOTE0ODkyOFxuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvdXNlcmd1aWRlL21lbW9yeS1tYW5hZ2VtZW50Lmh0bWxcbiAgICAgICAgICBtZW1vcnk6IFNpemUubWViaWJ5dGVzKFxuICAgICAgICAgICAgTWF0aC5jZWlsKGluc3RhbmNlVHlwZS5tZW1vcnkudG9NZWJpYnl0ZXMoKSAqIDAuOTUpLFxuICAgICAgICAgICksXG4gICAgICAgICAgY3B1OiBpbnN0YW5jZVR5cGUudkNwdSxcbiAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgTU9ERUxfSUQ6IHByb3BzLm1vZGVsLm1vZGVsSWQsXG4gICAgICAgICAgICBUUF9ERUdSRUU6IHRoaXMudHBEZWdyZWUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIE5fUE9TSVRJT05TOiB0aGlzLm5Qb3NpdGlvbnMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIE9QVF9MRVZFTDogdGhpcy5vcHRMZXZlbC50b1N0cmluZygpLFxuICAgICAgICAgICAgUVVBTlRfRFRZUEU6IHRoaXMucXVhbnREdHlwZT8udG9TdHJpbmcoKSA/PyBcIlwiLFxuICAgICAgICAgICAgQVJUSUZBQ1RfUzNfVVJMOiBwcm9wcy5idWNrZXQuczNVcmxGb3JPYmplY3QoXG4gICAgICAgICAgICAgIGNvbXBpbGVkQXJ0aWZhY3RQYXRoUHJlZml4LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxpbnV4UGFyYW1ldGVycyxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICBjb25zdCBqb2JTdWJtaXRGdW5jdGlvbiA9IG5ldyBTaW5nbGV0b25GdW5jdGlvbih0aGlzLCBcIkpvYlN1Ym1pdEZ1bmN0aW9uXCIsIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGpvaW4oX19kaXJuYW1lLCBcInByaXZhdGUvYXdhaXQtY29tcGlsZS1qb2JcIikpLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5vbkV2ZW50XCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgdXVpZDogXCIxMzYxZjQ2OS01YzkyLTRjNDYtOWUxMS01ZDFkYmY5MjViYWNcIixcbiAgICB9KTtcbiAgICBqb2JEZWZpbml0aW9uLmdyYW50U3VibWl0Sm9iKGpvYlN1Ym1pdEZ1bmN0aW9uLCBqb2JRdWV1ZSk7XG4gICAgY29uc3Qgam9iTW9uaXRvcmluZ0Z1bmN0aW9uID0gbmV3IFNpbmdsZXRvbkZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSm9iTW9uaXRvcmluZ0Z1bmN0aW9uXCIsXG4gICAgICB7XG4gICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGpvaW4oX19kaXJuYW1lLCBcInByaXZhdGUvYXdhaXQtY29tcGlsZS1qb2JcIikpLFxuICAgICAgICBoYW5kbGVyOiBcImluZGV4LmlzQ29tcGxldGVcIixcbiAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgdXVpZDogXCJkZjE2ZGJhOC01Zjc3LTQ4MGMtYTZhZC1jZmRmNzRjM2RlNjJcIixcbiAgICAgIH0sXG4gICAgKTtcbiAgICBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICByZXNvdXJjZUFybnM6IFtcIipcIl0sXG4gICAgICBncmFudGVlOiBqb2JNb25pdG9yaW5nRnVuY3Rpb24sXG4gICAgICBhY3Rpb25zOiBbXCJiYXRjaDpEZXNjcmliZUpvYnNcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgXCJDb21waWxlSm9iUHJvdmlkZXJcIiwge1xuICAgICAgb25FdmVudEhhbmRsZXI6IGpvYlN1Ym1pdEZ1bmN0aW9uLFxuICAgICAgaXNDb21wbGV0ZUhhbmRsZXI6IGpvYk1vbml0b3JpbmdGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICB0b3RhbFRpbWVvdXQ6IER1cmF0aW9uLmhvdXJzKDEpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBpbGVKb2IgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Ok5ldXJvbnhDb21waWxlXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGpvYkRlZmluaXRpb25Bcm46IGpvYkRlZmluaXRpb24uam9iRGVmaW5pdGlvbkFybixcbiAgICAgICAgam9iUXVldWVBcm46IGpvYlF1ZXVlLmpvYlF1ZXVlQXJuLFxuICAgICAgICBhcnRpZmFjdFMzUHJlZml4OiBjb21waWxlZEFydGlmYWN0UGF0aFByZWZpeCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNQcmVmaXggPSBjb21waWxlSm9iLmdldEF0dFN0cmluZyhcIkFydGlmYWN0UzNQcmVmaXhcIik7XG4gICAgdGhpcy5jb21waWxlZEFydGlmYWN0UzNVcmwgPSBwcm9wcy5idWNrZXQuczNVcmxGb3JPYmplY3QoXG4gICAgICB0aGlzLmNvbXBpbGVkQXJ0aWZhY3RTM1ByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJbnN0YW5jZVR5cGVCeVRwRGVncmVlKHRwRGVncmVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBpbnN0YW5jZVR5cGVzID0gW1xuICAgICAgTmV1cm9ueEluc3RhbmNlVHlwZS5JTkYyXzhYTEFSR0UsXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfMjRYTEFSR0UsXG4gICAgICBOZXVyb254SW5zdGFuY2VUeXBlLklORjJfNDhYTEFSR0UsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGluc3RhbmNlVHlwZSBvZiBpbnN0YW5jZVR5cGVzKSB7XG4gICAgICBpZiAodHBEZWdyZWUgPD0gaW5zdGFuY2VUeXBlLmFjY2VsZXJhdG9yQ2hpcHMubmV1cm9ueENvcmVzKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZVR5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVGhpcyBtb2RlbCBpcyB0b28gbGFyZ2UsIEkgY2FuIG5vdCBzdXBwb3J0IHRoaXMgbW9kZWwgY3VycmVudCB2ZXJzaW9uLlwiLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -14,7 +14,7 @@ class Inferentia2Chips {
14
14
  }
15
15
  exports.Inferentia2Chips = Inferentia2Chips;
16
16
  _a = JSII_RTTI_SYMBOL_1;
17
- Inferentia2Chips[_a] = { fqn: "aws-cdk-neuronx-patterns.Inferentia2Chips", version: "0.0.2" };
17
+ Inferentia2Chips[_a] = { fqn: "aws-cdk-neuronx-patterns.Inferentia2Chips", version: "0.0.4" };
18
18
  class NeuronxInstanceType {
19
19
  constructor(instanceType, vCpu, memory, acceleratorChips) {
20
20
  this.instanceType = instanceType;
@@ -32,7 +32,7 @@ class NeuronxInstanceType {
32
32
  }
33
33
  exports.NeuronxInstanceType = NeuronxInstanceType;
34
34
  _b = JSII_RTTI_SYMBOL_1;
35
- NeuronxInstanceType[_b] = { fqn: "aws-cdk-neuronx-patterns.NeuronxInstanceType", version: "0.0.2" };
35
+ NeuronxInstanceType[_b] = { fqn: "aws-cdk-neuronx-patterns.NeuronxInstanceType", version: "0.0.4" };
36
36
  /**
37
37
  * ml.inf2.xlarge
38
38
  */