cdk-nuxt 2.1.0 → 2.2.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/README.md +4 -0
- package/lib/stack/access-logs-analysis/AccessLogsAnalysis.js +2 -1
- package/lib/stack/access-logs-analysis/AccessLogsAnalysis.ts +1 -0
- package/lib/stack/server/NuxtServerAppStack.d.ts +19 -7
- package/lib/stack/server/NuxtServerAppStack.js +40 -17
- package/lib/stack/server/NuxtServerAppStack.ts +53 -16
- package/lib/stack/server/NuxtServerAppStackProps.d.ts +5 -0
- package/lib/stack/server/NuxtServerAppStackProps.js +1 -1
- package/lib/stack/server/NuxtServerAppStackProps.ts +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -111,6 +111,10 @@ Defaults to 1792MB (optimized for costs and performance for standard Nuxt apps).
|
|
|
111
111
|
### enableTracing?: boolean
|
|
112
112
|
Whether to enable AWS X-Ray for the Nuxt Lambda function.
|
|
113
113
|
|
|
114
|
+
### enableApi?: boolean
|
|
115
|
+
Whether to enable (HTTPS only) API access to the Nuxt app via the `/api` path which support all HTTP methods.
|
|
116
|
+
See https://nuxt.com/docs/guide/directory-structure/server#recipes for details.
|
|
117
|
+
|
|
114
118
|
### enableSitemap?: boolean
|
|
115
119
|
Whether to enable a global Sitemap bucket which is permanently accessible through multiple deployments.
|
|
116
120
|
|
|
@@ -71,6 +71,7 @@ class AccessLogsAnalysis extends constructs_1.Construct {
|
|
|
71
71
|
.map((tag) => ({ key: tag.Key, value: tag.Value }));
|
|
72
72
|
return new aws_athena_1.CfnWorkGroup(this, workgroupName, {
|
|
73
73
|
name: workgroupName,
|
|
74
|
+
recursiveDeleteOption: true,
|
|
74
75
|
workGroupConfiguration: {
|
|
75
76
|
publishCloudWatchMetricsEnabled: false,
|
|
76
77
|
resultConfiguration: {
|
|
@@ -267,4 +268,4 @@ AccessLogsAnalysis.ACCESS_LOGS_FOLDER_UNPROCESSED = 'unprocessed';
|
|
|
267
268
|
AccessLogsAnalysis.ACCESS_LOGS_FOLDER_GROUPED_BY_DATE = 'by-date';
|
|
268
269
|
AccessLogsAnalysis.ACCESS_LOGS_FOLDER_TRANSFORMED = 'transformed';
|
|
269
270
|
AccessLogsAnalysis.ACCESS_LOGS_FOLDER_ATHENA_RESULTS = 'athena-query-results';
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzTG9nc0FuYWx5c2lzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQWNjZXNzTG9nc0FuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUE0RTtBQUM1RSwyQ0FBcUM7QUFDckMsdURBQW9EO0FBR3BELHVEQUEyRjtBQUMzRix1REFBdUU7QUFDdkUsNkNBQW1FO0FBQ25FLDREQUF5RDtBQUN6RCxtRkFBbUU7QUFDbkUsbURBQW1EO0FBQ25ELGlEQUE0RDtBQUM1RCx1RUFBOEQ7QUFDOUQsNkJBQTZCO0FBSTdCOzs7O0dBSUc7QUFDSCxNQUFzQixrQkFBbUIsU0FBUSxzQkFBUztJQXFCdEQsWUFBc0IsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMs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QyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7b0JBQzlDLEtBQUssRUFBRSxJQUFJLENBQUMsb0NBQW9DLENBQUMsS0FBSyxDQUFDO29CQUN2RCxhQUFhLEVBQUUsRUFBRTtpQkFDcEIsQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9DQUFvQyxDQUFDLEtBQThCO1FBQ3ZFLE9BQU8sNEJBQWUsQ0FBQyxVQUFVLENBQUM7WUFDOUIsV0FBVyxFQUFFO2dCQUNULEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU87Z0JBQ3RDLEdBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQTBCO2FBQzdELENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUM1QixxQkFBcUIsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDO1NBQ2xFLENBQUMsQ0FBQztJQUNQLENBQUM7O0FBNVNMLGdEQW1UQztBQWpUNkIsaURBQThCLEdBQUcsYUFBYSxDQUFDO0FBQy9DLHFEQUFrQyxHQUFHLFNBQVMsQ0FBQztBQUMvQyxpREFBOEIsR0FBRyxhQUFhLENBQUM7QUFDL0Msb0RBQWlDLEdBQUcsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0J1Y2tldCwgRXZlbnRUeXBlLCBOb3RpZmljYXRpb25LZXlGaWx0ZXJ9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge0NmbldvcmtHcm91cH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWF0aGVuYSc7XG5pbXBvcnQge0Nsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGV9IGZyb20gJy4vQ2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZSc7XG5pbXBvcnQge0FjY2Vzc0xvZ3NQYXJxdWV0VGFibGV9IGZyb20gJy4vQWNjZXNzTG9nc1BhcnF1ZXRUYWJsZSc7XG5pbXBvcnQge0FyY2hpdGVjdHVyZSwgQ29kZSwgRnVuY3Rpb24sIExheWVyVmVyc2lvbiwgUnVudGltZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge1J1bGUsIFJ1bGVUYXJnZXRJbnB1dCwgU2NoZWR1bGV9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHtDZm5UYWcsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBTdGFja30gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtDb2x1bW4sIERhdGFiYXNlfSBmcm9tICdAYXdzLWNkay9hd3MtZ2x1ZS1hbHBoYSc7XG5pbXBvcnQge1MzRXZlbnRTb3VyY2V9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQge1JldGVudGlvbkRheXN9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7RWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnR9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHtMYW1iZGFGdW5jdGlvbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge0FjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzfSBmcm9tIFwiLi9BY2Nlc3NMb2dzQW5hbHlzaXNQcm9wc1wiO1xuaW1wb3J0IHtDb2x1bW5UcmFuc2Zvcm1hdGlvblJ1bGVzfSBmcm9tIFwiLi4vLi4vZnVuY3Rpb25zL2FjY2Vzcy1sb2dzLWFuYWx5c2lzL3BhcnRpdGlvbmluZy90eXBlc1wiO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBBV1MgcmVzb3VyY2VzIHRvIGFuYWx5emUgYWNjZXNzIGxvZ3MuIFRoaXMgY29uc3RydWN0IGlzIGRlcml2ZWQgZnJvbSB0aGUgb2ZmaWNpYWwgQVdTIHNhbXBsZVxuICogQ2xvdWRGb3JtYXRpb24gc3RhY2s6XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2F3cy1zYW1wbGVzL2FtYXpvbi1jbG91ZGZyb250LWFjY2Vzcy1sb2dzLXF1ZXJpZXMvYmxvYi9tYWlubGluZS90ZW1wbGF0ZS55YW1sfVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWNjZXNzTG9nc0FuYWx5c2lzIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0xPR1NfRk9MREVSX1VOUFJPQ0VTU0VEID0gJ3VucHJvY2Vzc2VkJztcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IEFDQ0VTU19MT0dTX0ZPTERFUl9HUk9VUEVEX0JZX0RBVEUgPSAnYnktZGF0ZSc7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBBQ0NFU1NfTE9HU19GT0xERVJfVFJBTlNGT1JNRUQgPSAndHJhbnNmb3JtZWQnO1xuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0xPR1NfRk9MREVSX0FUSEVOQV9SRVNVTFRTID0gJ2F0aGVuYS1xdWVyeS1yZXN1bHRzJztcblxuICAgIHByb3RlY3RlZCByZWFkb25seSByZXNvdXJjZUlkUHJlZml4OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1Y2tldDogQnVja2V0O1xuICAgIHByb3RlY3RlZCByZWFkb25seSB3b3JrZ3JvdXA6IENmbldvcmtHcm91cDtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YWJhc2U6IERhdGFiYXNlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhY2Nlc3NMb2dzQnlEYXRlVGFibGU6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGU7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjY2Vzc0xvZ3NQYXJxdWV0VGFibGU6IEFjY2Vzc0xvZ3NQYXJxdWV0VGFibGU7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGdyb3VwQnlEYXRlTGF5ZXI6IExheWVyVmVyc2lvbjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JvdXBCeURhdGVMYW1iZGE6IEZ1bmN0aW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwYXJ0aXRpb25pbmdMYXllcjogTGF5ZXJWZXJzaW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVQYXJ0aXRpb25MYW1iZGE6IEZ1bmN0aW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGE6IEZ1bmN0aW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVQYXJ0aXRpb25zU2NoZWR1bGVyOiBSdWxlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyOiBSdWxlO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgICAgICB0aGlzLnJlc291cmNlSWRQcmVmaXggPSBwcm9wcy5yZXNvdXJjZVByZWZpeDtcbiAgICAgICAgdGhpcy5idWNrZXQgPSBwcm9wcy5idWNrZXQ7XG4gICAgICAgIHRoaXMuc2V0dXBMaWZlY3ljbGVSdWxlcyhwcm9wcyk7XG4gICAgICAgIHRoaXMud29ya2dyb3VwID0gdGhpcy5jcmVhdGVXb3JrZ3JvdXAoKTtcbiAgICAgICAgdGhpcy5kYXRhYmFzZSA9IHRoaXMuY3JlYXRlR2x1ZURhdGFiYXNlKCk7XG4gICAgICAgIHRoaXMuYWNjZXNzTG9nc0J5RGF0ZVRhYmxlID0gdGhpcy5jcmVhdGVBY2Nlc3NMb2dzQnlEYXRlVGFibGUoKTtcbiAgICAgICAgdGhpcy5hY2Nlc3NMb2dzUGFycXVldFRhYmxlID0gdGhpcy5jcmVhdGVBY2Nlc3NMb2dzUGFycXVldFRhYmxlKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBCeURhdGVMYXllciA9IHRoaXMuY3JlYXRlR3JvdXBCeURhdGVMYXllcigpO1xuICAgICAgICB0aGlzLmdyb3VwQnlEYXRlTGFtYmRhID0gdGhpcy5jcmVhdGVHcm91cEJ5RGF0ZUxhbWJkYSgpO1xuICAgICAgICB0aGlzLnBhcnRpdGlvbmluZ0xheWVyID0gdGhpcy5jcmVhdGVQYXJ0aXRpb25pbmdMYXllcigpO1xuICAgICAgICB0aGlzLmNyZWF0ZVBhcnRpdGlvbkxhbWJkYSA9IHRoaXMuY3JlYXRlQ3JlYXRlUGFydGl0aW9uTGFtYmRhKCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUGFydGl0aW9uTGFtYmRhID0gdGhpcy5jcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGEoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVQYXJ0aXRpb25zU2NoZWR1bGVyID0gdGhpcy5jcmVhdGVDcmVhdGVQYXJ0aXRpb25zU2NoZWR1bGVyKCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUGFydGl0aW9uc1NjaGVkdWxlciA9IHRoaXMuY3JlYXRlVHJhbnNmb3JtUGFydGl0aW9uc1NjaGVkdWxlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cExpZmVjeWNsZVJ1bGVzKHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcyk6IHZvaWQge1xuICAgICAgICAvLyBjbGVhbnVwIHJhdyBhbmQgcGFydGl0aW9uZWQgYWNjZXNzIGxvZ3MgYWZ0ZXIgYSBjb25maWd1cmFibGUgdGltZSByYW5nZVxuXG4gICAgICAgIHRoaXMuYnVja2V0LmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC11bnByb2Nlc3NlZGAsXG4gICAgICAgICAgICBwcmVmaXg6IGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfVU5QUk9DRVNTRUR9LypgLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogcHJvcHMuZXhwaXJlUmF3TG9nc0FmdGVyID8/IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnVja2V0LmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC1ncm91cGVkYCxcbiAgICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9HUk9VUEVEX0JZX0RBVEV9LypgLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogcHJvcHMuZXhwaXJlSW50ZXJtZWRpYXRlTG9nc0FmdGVyID8/IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnVja2V0LmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC10cmFuc2Zvcm1lZGAsXG4gICAgICAgICAgICBwcmVmaXg6IGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfVFJBTlNGT1JNRUR9LypgLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogcHJvcHMuZXhwaXJlVHJhbnNmb3JtZWRMb2dzQWZ0ZXIgPz8gRHVyYXRpb24uZGF5cygxODApLFxuICAgICAgICB9KTtcblxuICAgICAgICAvKiBDSEVDS01FOiBkZWxldGUgcXVlcnkgcmVzdWx0cyBhZnRlciAxIHdlZWtcbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC1xdWVyeS1yZXN1bHRzYCxcbiAgICAgICAgICBwcmVmaXg6IGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfQVRIRU5BX1JFU1VMVFN9LypgLFxuICAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0pO1xuICAgICAgICAqL1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlV29ya2dyb3VwKCk6IENmbldvcmtHcm91cCB7XG4gICAgICAgIGNvbnN0IHdvcmtncm91cE5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXdvcmtncm91cGA7XG5cbiAgICAgICAgLy8gZHVlIHRvIGEgY3VycmVudCBidWcsIHRoZSB0YWdzIGFyZSBub3QgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgd29ya2dyb3VwXG4gICAgICAgIC8vIG5vdGUsIHRoYXQgdGhlIGtleXMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZVxuICAgICAgICBjb25zdCB0YWdzOiBDZm5UYWdbXSA9IFN0YWNrLm9mKHRoaXMpXG4gICAgICAgICAgICAudGFncy5yZW5kZXJUYWdzKClcbiAgICAgICAgICAgIC5tYXAoKHRhZzogeyBLZXk6IHN0cmluZzsgVmFsdWU6IHN0cmluZyB9KSA9PiAoe2tleTogdGFnLktleSwgdmFsdWU6IHRhZy5WYWx1ZX0pKTtcblxuICAgICAgICByZXR1cm4gbmV3IENmbldvcmtHcm91cCh0aGlzLCB3b3JrZ3JvdXBOYW1lLCB7XG4gICAgICAgICAgICBuYW1lOiB3b3JrZ3JvdXBOYW1lLFxuICAgICAgICAgICAgd29ya0dyb3VwQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hDbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc3VsdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0TG9jYXRpb246IGBzMzovLyR7dGhpcy5idWNrZXQuYnVja2V0TmFtZX0vJHtBY2Nlc3NMb2dzQW5hbHlzaXMuQUNDRVNTX0xPR1NfRk9MREVSX0FUSEVOQV9SRVNVTFRTfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmZvcmNlV29ya0dyb3VwQ29uZmlndXJhdGlvbjogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR2x1ZURhdGFiYXNlKCk6IERhdGFiYXNlIHtcbiAgICAgICAgY29uc3QgZGF0YWJhc2VOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1kYXRhYmFzZWA7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2UodGhpcywgZGF0YWJhc2VOYW1lLCB7XG4gICAgICAgICAgICAvLyBBdGhlbmEgZG9lc24ndCBzdXBwb3J0IGRhc2hlcyBpbiBkYXRhYmFzZS90YWJsZSBuYW1lc1xuICAgICAgICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZU5hbWUucmVwbGFjZSgvLS9nLCAnXycpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQWNjZXNzTG9nc0J5RGF0ZVRhYmxlKCk6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGU7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQWNjZXNzTG9nc1BhcnF1ZXRUYWJsZSgpOiBDbG91ZEZyb250QWNjZXNzTG9nc0J5RGF0ZVRhYmxlO1xuXG4gICAgcHJpdmF0ZSBjcmVhdGVHcm91cEJ5RGF0ZUxheWVyKCk6IExheWVyVmVyc2lvbiB7XG4gICAgICAgIGNvbnN0IGxheWVyVmVyc2lvbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWdyb3VwLWJ5LWRhdGUtZGVwZW5kZW5jaWVzYDtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXllclZlcnNpb24odGhpcywgbGF5ZXJWZXJzaW9uTmFtZSwge1xuICAgICAgICAgICAgbGF5ZXJWZXJzaW9uTmFtZSxcbiAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbQXJjaGl0ZWN0dXJlLkFSTV82NCwgQXJjaGl0ZWN0dXJlLlg4Nl82NF0sXG4gICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtSdW50aW1lLk5PREVKU18xNF9YLCBSdW50aW1lLk5PREVKU18xNl9YXSxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvZ3JvdXAtYnktZGF0ZS9idWlsZC9sYXllcicpKSxcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQYXJ0aXRpb25pbmdMYXllcigpOiBMYXllclZlcnNpb24ge1xuICAgICAgICBjb25zdCBsYXllclZlcnNpb25OYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1wYXJ0aXRpb25pbmctZGVwZW5kZW5jaWVzYDtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXllclZlcnNpb24odGhpcywgbGF5ZXJWZXJzaW9uTmFtZSwge1xuICAgICAgICAgICAgbGF5ZXJWZXJzaW9uTmFtZSxcbiAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbQXJjaGl0ZWN0dXJlLkFSTV82NCwgQXJjaGl0ZWN0dXJlLlg4Nl82NF0sXG4gICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtSdW50aW1lLk5PREVKU18xNF9YLCBSdW50aW1lLk5PREVKU18xNl9YXSxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvcGFydGl0aW9uaW5nL2J1aWxkL2xheWVyJykpLFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIExhbWJkYSBmdW5jdGlvbiB0byBiZSB0cmlnZ2VyZWQgd2hlbmV2ZXIgYSBuZXcgYWNjZXNzIGxvZyBpcyBjcmVhdGVkLlxuICAgICAqIEl0IG1vdmVzIHRoZSByYXcgYWNjZXNzIGxvZ3MgaW50byBhIHN1YiBmb2xkZXIgaGllcmFyY2h5IGJ5IHllYXIsIG1vbnRoLCBkYXkgYW5kIGhvdXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVHcm91cEJ5RGF0ZUxhbWJkYSgpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tZ3JvdXAtYnktZGF0ZWA7XG5cbiAgICAgICAgY29uc3QgbGFtYmRhID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvZ3JvdXAtYnktZGF0ZS9idWlsZC9hcHAnKSksXG4gICAgICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICAgICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgICAgIGxheWVyczogW3RoaXMuZ3JvdXBCeURhdGVMYXllcl0sXG4gICAgICAgICAgICBldmVudHM6IFtcbiAgICAgICAgICAgICAgICBuZXcgUzNFdmVudFNvdXJjZSh0aGlzLmJ1Y2tldCwge1xuICAgICAgICAgICAgICAgICAgICBldmVudHM6IFtFdmVudFR5cGUuT0JKRUNUX0NSRUFURURdLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbdGhpcy5nZXRVbnByb2Nlc3NlZE9iamVjdHNGaWx0ZXIoKV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICAgICAgVEFSR0VUX0ZPTERFUjogQWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9HUk9VUEVEX0JZX0RBVEUsXG4gICAgICAgICAgICAgICAgUkFXX0FDQ0VTU19MT0dfRklMRV9QQVRURVJOOiB0aGlzLmdldFJhd0FjY2Vzc0xvZ0ZpbGVQYXR0ZXJuKCkuc291cmNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhKTtcbiAgICAgICAgdGhpcy5idWNrZXQuZ3JhbnREZWxldGUobGFtYmRhLCBgJHtBY2Nlc3NMb2dzQW5hbHlzaXMuQUNDRVNTX0xPR1NfRk9MREVSX1VOUFJPQ0VTU0VEfS8qYCk7XG5cbiAgICAgICAgcmV0dXJuIGxhbWJkYTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VW5wcm9jZXNzZWRPYmplY3RzRmlsdGVyKCk6IE5vdGlmaWNhdGlvbktleUZpbHRlcjtcblxuICAgIC8qKiBUaGUgcGF0dGVybiB0byBpZGVudGlmeSB1bnByb2Nlc3NlZCBhY2Nlc3MgbG9ncyBkZXBlbmRzIG9uIHRoZSBwcm9kdWNpbmcgc291cmNlICovXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFJhd0FjY2Vzc0xvZ0ZpbGVQYXR0ZXJuKCk6IFJlZ0V4cDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcGFydGl0aW9uIGZvciB0aGUgdXBjb21pbmcgaG91ciBpbiB0aGUgYWNjZXNzIGxvZyBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNyZWF0ZVBhcnRpdGlvbkxhbWJkYSgpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY3JlYXRlLXBhcnRgO1xuXG4gICAgICAgIGNvbnN0IGxhbWJkYSA9IG5ldyBGdW5jdGlvbih0aGlzLCBmdW5jdGlvbk5hbWUsIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vZnVuY3Rpb25zL2FjY2Vzcy1sb2dzLWFuYWx5c2lzL3BhcnRpdGlvbmluZy9idWlsZC9hcHAnKSwge1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IFsndHJhbnNmb3JtLXBhcnRpdGlvbionLCAnKi5kLnRzJ10sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgICAgICAgICAgaGFuZGxlcjogJ2NyZWF0ZS1wYXJ0aXRpb24uaGFuZGxlcicsXG4gICAgICAgICAgICBsYXllcnM6IFt0aGlzLnBhcnRpdGlvbmluZ0xheWVyXSxcbiAgICAgICAgICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIEFXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEOiAnMScsXG4gICAgICAgICAgICAgICAgTk9ERV9PUFRJT05TOiAnLS1lbmFibGUtc291cmNlLW1hcHMnLFxuICAgICAgICAgICAgICAgIFdPUktHUk9VUDogdGhpcy53b3JrZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICBEQVRBQkFTRTogdGhpcy5kYXRhYmFzZS5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgVEFCTEU6IHRoaXMuYWNjZXNzTG9nc0J5RGF0ZVRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGdyYW50IGFjY2VzcyB0byBTMyBidWNrZXQgYW5kIHRvIGV4ZWN1dGUgQXRoZW5hIHF1ZXJpZXMgd2hpY2ggY3JlYXRlIG5ldyBwYXJ0aXRpb25zXG4gICAgICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZFdyaXRlKGxhbWJkYSk7XG4gICAgICAgIGxhbWJkYS5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6U3RhcnRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpDcmVhdGVEYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkNyZWF0ZVBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6R2V0VGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpCYXRjaENyZWF0ZVBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbGFtYmRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgcGFydGl0aW9ucyBmcm9tIHRoZSBIaXZlIGZvcm1hdCB0byBQYXJxdWV0LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlVHJhbnNmb3JtUGFydGl0aW9uTGFtYmRhKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS10cmFuc2Zvcm0tcGFydGA7XG5cbiAgICAgICAgY29uc3QgbGFtYmRhID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvcGFydGl0aW9uaW5nL2J1aWxkL2FwcCcpLCB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZTogWydjcmVhdGUtcGFydGl0aW9uKicsICcqLmQudHMnXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyMCksXG4gICAgICAgICAgICBoYW5kbGVyOiAndHJhbnNmb3JtLXBhcnRpdGlvbi5oYW5kbGVyJyxcbiAgICAgICAgICAgIGxheWVyczogW3RoaXMucGFydGl0aW9uaW5nTGF5ZXJdLFxuICAgICAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICAgICAgV09SS0dST1VQOiB0aGlzLndvcmtncm91cC5uYW1lLFxuICAgICAgICAgICAgICAgIERBVEFCQVNFOiB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgICBTT1VSQ0VfVEFCTEU6IHRoaXMuYWNjZXNzTG9nc0J5RGF0ZVRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICBUQVJHRVRfVEFCTEU6IHRoaXMuYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZS50YWJsZU5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBncmFudCBhY2Nlc3MgdG8gUzMgYnVja2V0IGFuZCB0byBleGVjdXRlIEF0aGVuYSBxdWVyaWVzIHdoaWNoIGNyZWF0ZSBuZXcgcGFydGl0aW9uc1xuICAgICAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShsYW1iZGEpO1xuICAgICAgICBsYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlRGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpDcmVhdGVQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXREYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkdldFRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6QmF0Y2hDcmVhdGVQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXRQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXRQYXJ0aXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpEZWxldGVUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkRlbGV0ZVBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbGFtYmRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ3JlYXRlUGFydGl0aW9uc1NjaGVkdWxlcigpOiBSdWxlIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNyZWF0ZS1wYXJ0LXNjaGVkYDtcbiAgICAgICAgcmV0dXJuIG5ldyBSdWxlKHRoaXMsIHJ1bGVOYW1lLCB7XG4gICAgICAgICAgICBydWxlTmFtZSxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKHttaW51dGU6ICc1NSd9KSxcbiAgICAgICAgICAgIHRhcmdldHM6IFtuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy5jcmVhdGVQYXJ0aXRpb25MYW1iZGEsIHtyZXRyeUF0dGVtcHRzOiAxMH0pXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyKHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcyk6IFJ1bGUge1xuICAgICAgICBjb25zdCBydWxlTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tdHJhbnNmb3JtLXBhcnQtc2NoZWRgO1xuICAgICAgICByZXR1cm4gbmV3IFJ1bGUodGhpcywgcnVsZU5hbWUsIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lLFxuICAgICAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLmNyb24oe21pbnV0ZTogJzEnfSksXG4gICAgICAgICAgICB0YXJnZXRzOiBbXG4gICAgICAgICAgICAgICAgbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMudHJhbnNmb3JtUGFydGl0aW9uTGFtYmRhLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiB0aGlzLmdldFRyYW5zZm9ybVBhcnRpdGlvbkludm9jYXRpb25Qcm9wcyhwcm9wcyksXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2Zvcm1QYXJ0aXRpb25JbnZvY2F0aW9uUHJvcHMocHJvcHM6IEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzKTogUnVsZVRhcmdldElucHV0IHtcbiAgICAgICAgcmV0dXJuIFJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWVzOiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5hY2Nlc3NMb2dzUGFycXVldFRhYmxlLmNvbHVtbnMsXG4gICAgICAgICAgICAgICAgLi4uKHRoaXMuYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZS5wYXJ0aXRpb25LZXlzIGFzIENvbHVtbltdKSxcbiAgICAgICAgICAgIF0ubWFwKGNvbHVtbiA9PiBjb2x1bW4ubmFtZSksXG4gICAgICAgICAgICBjb2x1bW5UcmFuc2Zvcm1hdGlvbnM6IHRoaXMuZ2V0Q29sdW1uVHJhbnNmb3JtYXRpb25SdWxlcyhwcm9wcyksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5lZWRzIHRvIHJldHVybiB0aGUgbG9nIHNvdXJjZSBzcGVjaWZpYyBjb2x1bW4gdHJhbnNmb3JtYXRpb24gcnVsZXNcbiAgICAgKiAoZS5nLiB0byBhbm9ueW1pemUgSVAgYWRkcmVzc2VzKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Q29sdW1uVHJhbnNmb3JtYXRpb25SdWxlcyhwcm9wczogQWNjZXNzTG9nc0FuYWx5c2lzUHJvcHMpOiBDb2x1bW5UcmFuc2Zvcm1hdGlvblJ1bGVzO1xufVxuIl19
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzTG9nc0FuYWx5c2lzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQWNjZXNzTG9nc0FuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUE0RTtBQUM1RSwyQ0FBcUM7QUFDckMsdURBQW9EO0FBR3BELHVEQUEyRjtBQUMzRix1REFBdUU7QUFDdkUsNkNBQW1FO0FBQ25FLDREQUF5RDtBQUN6RCxtRkFBbUU7QUFDbkUsbURBQW1EO0FBQ25ELGlEQUE0RDtBQUM1RCx1RUFBOEQ7QUFDOUQsNkJBQTZCO0FBSTdCOzs7O0dBSUc7QUFDSCxNQUFzQixrQkFBbUIsU0FBUSxzQkFBUztJQXFCdEQsWUFBc0IsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMs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QUU7Z0JBQ0wsSUFBSSxtQ0FBYyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtvQkFDOUMsS0FBSyxFQUFFLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLENBQUM7b0JBQ3ZELGFBQWEsRUFBRSxFQUFFO2lCQUNwQixDQUFDO2FBQ0w7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0NBQW9DLENBQUMsS0FBOEI7UUFDdkUsT0FBTyw0QkFBZSxDQUFDLFVBQVUsQ0FBQztZQUM5QixXQUFXLEVBQUU7Z0JBQ1QsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTztnQkFDdEMsR0FBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBMEI7YUFDN0QsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzVCLHFCQUFxQixFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUM7U0FDbEUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7QUE3U0wsZ0RBb1RDO0FBbFQ2QixpREFBOEIsR0FBRyxhQUFhLENBQUM7QUFDL0MscURBQWtDLEdBQUcsU0FBUyxDQUFDO0FBQy9DLGlEQUE4QixHQUFHLGFBQWEsQ0FBQztBQUMvQyxvREFBaUMsR0FBRyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QnVja2V0LCBFdmVudFR5cGUsIE5vdGlmaWNhdGlvbktleUZpbHRlcn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7Q2ZuV29ya0dyb3VwfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXRoZW5hJztcbmltcG9ydCB7Q2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZX0gZnJvbSAnLi9DbG91ZEZyb250QWNjZXNzTG9nc0J5RGF0ZVRhYmxlJztcbmltcG9ydCB7QWNjZXNzTG9nc1BhcnF1ZXRUYWJsZX0gZnJvbSAnLi9BY2Nlc3NMb2dzUGFycXVldFRhYmxlJztcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgTGF5ZXJWZXJzaW9uLCBSdW50aW1lfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7UnVsZSwgUnVsZVRhcmdldElucHV0LCBTY2hlZHVsZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQge0NmblRhZywgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge0NvbHVtbiwgRGF0YWJhc2V9IGZyb20gJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhJztcbmltcG9ydCB7UzNFdmVudFNvdXJjZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcbmltcG9ydCB7UmV0ZW50aW9uRGF5c30gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHtFZmZlY3QsIFBvbGljeVN0YXRlbWVudH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQge0xhbWJkYUZ1bmN0aW9ufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7QWNjZXNzTG9nc0FuYWx5c2lzUHJvcHN9IGZyb20gXCIuL0FjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzXCI7XG5pbXBvcnQge0NvbHVtblRyYW5zZm9ybWF0aW9uUnVsZXN9IGZyb20gXCIuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvcGFydGl0aW9uaW5nL3R5cGVzXCI7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIEFXUyByZXNvdXJjZXMgdG8gYW5hbHl6ZSBhY2Nlc3MgbG9ncy4gVGhpcyBjb25zdHJ1Y3QgaXMgZGVyaXZlZCBmcm9tIHRoZSBvZmZpY2lhbCBBV1Mgc2FtcGxlXG4gKiBDbG91ZEZvcm1hdGlvbiBzdGFjazpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWNsb3VkZnJvbnQtYWNjZXNzLWxvZ3MtcXVlcmllcy9ibG9iL21haW5saW5lL3RlbXBsYXRlLnlhbWx9XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NMb2dzQW5hbHlzaXMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBBQ0NFU1NfTE9HU19GT0xERVJfVU5QUk9DRVNTRUQgPSAndW5wcm9jZXNzZWQnO1xuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0xPR1NfRk9MREVSX0dST1VQRURfQllfREFURSA9ICdieS1kYXRlJztcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IEFDQ0VTU19MT0dTX0ZPTERFUl9UUkFOU0ZPUk1FRCA9ICd0cmFuc2Zvcm1lZCc7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBBQ0NFU1NfTE9HU19GT0xERVJfQVRIRU5BX1JFU1VMVFMgPSAnYXRoZW5hLXF1ZXJ5LXJlc3VsdHMnO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc291cmNlSWRQcmVmaXg6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnVja2V0OiBCdWNrZXQ7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdvcmtncm91cDogQ2ZuV29ya0dyb3VwO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRhYmFzZTogRGF0YWJhc2U7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjY2Vzc0xvZ3NCeURhdGVUYWJsZTogQ2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZTogQWNjZXNzTG9nc1BhcnF1ZXRUYWJsZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JvdXBCeURhdGVMYXllcjogTGF5ZXJWZXJzaW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBncm91cEJ5RGF0ZUxhbWJkYTogRnVuY3Rpb247XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhcnRpdGlvbmluZ0xheWVyOiBMYXllclZlcnNpb247XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNyZWF0ZVBhcnRpdGlvbkxhbWJkYTogRnVuY3Rpb247XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zZm9ybVBhcnRpdGlvbkxhbWJkYTogRnVuY3Rpb247XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNyZWF0ZVBhcnRpdGlvbnNTY2hlZHVsZXI6IFJ1bGU7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zZm9ybVBhcnRpdGlvbnNTY2hlZHVsZXI6IFJ1bGU7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgICAgIHRoaXMucmVzb3VyY2VJZFByZWZpeCA9IHByb3BzLnJlc291cmNlUHJlZml4O1xuICAgICAgICB0aGlzLmJ1Y2tldCA9IHByb3BzLmJ1Y2tldDtcbiAgICAgICAgdGhpcy5zZXR1cExpZmVjeWNsZVJ1bGVzKHByb3BzKTtcbiAgICAgICAgdGhpcy53b3JrZ3JvdXAgPSB0aGlzLmNyZWF0ZVdvcmtncm91cCgpO1xuICAgICAgICB0aGlzLmRhdGFiYXNlID0gdGhpcy5jcmVhdGVHbHVlRGF0YWJhc2UoKTtcbiAgICAgICAgdGhpcy5hY2Nlc3NMb2dzQnlEYXRlVGFibGUgPSB0aGlzLmNyZWF0ZUFjY2Vzc0xvZ3NCeURhdGVUYWJsZSgpO1xuICAgICAgICB0aGlzLmFjY2Vzc0xvZ3NQYXJxdWV0VGFibGUgPSB0aGlzLmNyZWF0ZUFjY2Vzc0xvZ3NQYXJxdWV0VGFibGUoKTtcbiAgICAgICAgdGhpcy5ncm91cEJ5RGF0ZUxheWVyID0gdGhpcy5jcmVhdGVHcm91cEJ5RGF0ZUxheWVyKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBCeURhdGVMYW1iZGEgPSB0aGlzLmNyZWF0ZUdyb3VwQnlEYXRlTGFtYmRhKCk7XG4gICAgICAgIHRoaXMucGFydGl0aW9uaW5nTGF5ZXIgPSB0aGlzLmNyZWF0ZVBhcnRpdGlvbmluZ0xheWVyKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlUGFydGl0aW9uTGFtYmRhID0gdGhpcy5jcmVhdGVDcmVhdGVQYXJ0aXRpb25MYW1iZGEoKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGEgPSB0aGlzLmNyZWF0ZVRyYW5zZm9ybVBhcnRpdGlvbkxhbWJkYSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZVBhcnRpdGlvbnNTY2hlZHVsZXIgPSB0aGlzLmNyZWF0ZUNyZWF0ZVBhcnRpdGlvbnNTY2hlZHVsZXIoKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyID0gdGhpcy5jcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwTGlmZWN5Y2xlUnVsZXMocHJvcHM6IEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzKTogdm9pZCB7XG4gICAgICAgIC8vIGNsZWFudXAgcmF3IGFuZCBwYXJ0aXRpb25lZCBhY2Nlc3MgbG9ncyBhZnRlciBhIGNvbmZpZ3VyYWJsZSB0aW1lIHJhbmdlXG5cbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLXVucHJvY2Vzc2VkYCxcbiAgICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9VTlBST0NFU1NFRH0vKmAsXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmVSYXdMb2dzQWZ0ZXIgPz8gRHVyYXRpb24uZGF5cyg3KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLWdyb3VwZWRgLFxuICAgICAgICAgICAgcHJlZml4OiBgJHtBY2Nlc3NMb2dzQW5hbHlzaXMuQUNDRVNTX0xPR1NfRk9MREVSX0dST1VQRURfQllfREFURX0vKmAsXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmVJbnRlcm1lZGlhdGVMb2dzQWZ0ZXIgPz8gRHVyYXRpb24uZGF5cyg3KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLXRyYW5zZm9ybWVkYCxcbiAgICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9UUkFOU0ZPUk1FRH0vKmAsXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmVUcmFuc2Zvcm1lZExvZ3NBZnRlciA/PyBEdXJhdGlvbi5kYXlzKDE4MCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qIENIRUNLTUU6IGRlbGV0ZSBxdWVyeSByZXN1bHRzIGFmdGVyIDEgd2Vla1xuICAgICAgICB0aGlzLmJ1Y2tldC5hZGRMaWZlY3ljbGVSdWxlKHtcbiAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLXF1ZXJ5LXJlc3VsdHNgLFxuICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9BVEhFTkFfUkVTVUxUU30vKmAsXG4gICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyg3KSxcbiAgICAgICAgfSk7XG4gICAgICAgICovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVXb3JrZ3JvdXAoKTogQ2ZuV29ya0dyb3VwIHtcbiAgICAgICAgY29uc3Qgd29ya2dyb3VwTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0td29ya2dyb3VwYDtcblxuICAgICAgICAvLyBkdWUgdG8gYSBjdXJyZW50IGJ1ZywgdGhlIHRhZ3MgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIHRvIHRoZSB3b3JrZ3JvdXBcbiAgICAgICAgLy8gbm90ZSwgdGhhdCB0aGUga2V5cyBtdXN0IGJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlXG4gICAgICAgIGNvbnN0IHRhZ3M6IENmblRhZ1tdID0gU3RhY2sub2YodGhpcylcbiAgICAgICAgICAgIC50YWdzLnJlbmRlclRhZ3MoKVxuICAgICAgICAgICAgLm1hcCgodGFnOiB7IEtleTogc3RyaW5nOyBWYWx1ZTogc3RyaW5nIH0pID0+ICh7a2V5OiB0YWcuS2V5LCB2YWx1ZTogdGFnLlZhbHVlfSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgQ2ZuV29ya0dyb3VwKHRoaXMsIHdvcmtncm91cE5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHdvcmtncm91cE5hbWUsXG4gICAgICAgICAgICByZWN1cnNpdmVEZWxldGVPcHRpb246IHRydWUsXG4gICAgICAgICAgICB3b3JrR3JvdXBDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgcHVibGlzaENsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzdWx0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRMb2NhdGlvbjogYHMzOi8vJHt0aGlzLmJ1Y2tldC5idWNrZXROYW1lfS8ke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfQVRIRU5BX1JFU1VMVFN9YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVuZm9yY2VXb3JrR3JvdXBDb25maWd1cmF0aW9uOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFncyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVHbHVlRGF0YWJhc2UoKTogRGF0YWJhc2Uge1xuICAgICAgICBjb25zdCBkYXRhYmFzZU5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWRhdGFiYXNlYDtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZSh0aGlzLCBkYXRhYmFzZU5hbWUsIHtcbiAgICAgICAgICAgIC8vIEF0aGVuYSBkb2Vzbid0IHN1cHBvcnQgZGFzaGVzIGluIGRhdGFiYXNlL3RhYmxlIG5hbWVzXG4gICAgICAgICAgICBkYXRhYmFzZU5hbWU6IGRhdGFiYXNlTmFtZS5yZXBsYWNlKC8tL2csICdfJyksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVBY2Nlc3NMb2dzQnlEYXRlVGFibGUoKTogQ2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZTtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVBY2Nlc3NMb2dzUGFycXVldFRhYmxlKCk6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGU7XG5cbiAgICBwcml2YXRlIGNyZWF0ZUdyb3VwQnlEYXRlTGF5ZXIoKTogTGF5ZXJWZXJzaW9uIHtcbiAgICAgICAgY29uc3QgbGF5ZXJWZXJzaW9uTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tZ3JvdXAtYnktZGF0ZS1kZXBlbmRlbmNpZXNgO1xuICAgICAgICByZXR1cm4gbmV3IExheWVyVmVyc2lvbih0aGlzLCBsYXllclZlcnNpb25OYW1lLCB7XG4gICAgICAgICAgICBsYXllclZlcnNpb25OYW1lLFxuICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtBcmNoaXRlY3R1cmUuQVJNXzY0LCBBcmNoaXRlY3R1cmUuWDg2XzY0XSxcbiAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW1J1bnRpbWUuTk9ERUpTXzE0X1gsIFJ1bnRpbWUuTk9ERUpTXzE2X1hdLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hY2Nlc3MtbG9ncy1hbmFseXNpcy9ncm91cC1ieS1kYXRlL2J1aWxkL2xheWVyJykpLFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVBhcnRpdGlvbmluZ0xheWVyKCk6IExheWVyVmVyc2lvbiB7XG4gICAgICAgIGNvbnN0IGxheWVyVmVyc2lvbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXBhcnRpdGlvbmluZy1kZXBlbmRlbmNpZXNgO1xuICAgICAgICByZXR1cm4gbmV3IExheWVyVmVyc2lvbih0aGlzLCBsYXllclZlcnNpb25OYW1lLCB7XG4gICAgICAgICAgICBsYXllclZlcnNpb25OYW1lLFxuICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtBcmNoaXRlY3R1cmUuQVJNXzY0LCBBcmNoaXRlY3R1cmUuWDg2XzY0XSxcbiAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW1J1bnRpbWUuTk9ERUpTXzE0X1gsIFJ1bnRpbWUuTk9ERUpTXzE2X1hdLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hY2Nlc3MtbG9ncy1hbmFseXNpcy9wYXJ0aXRpb25pbmcvYnVpbGQvbGF5ZXInKSksXG4gICAgICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgTGFtYmRhIGZ1bmN0aW9uIHRvIGJlIHRyaWdnZXJlZCB3aGVuZXZlciBhIG5ldyBhY2Nlc3MgbG9nIGlzIGNyZWF0ZWQuXG4gICAgICogSXQgbW92ZXMgdGhlIHJhdyBhY2Nlc3MgbG9ncyBpbnRvIGEgc3ViIGZvbGRlciBoaWVyYXJjaHkgYnkgeWVhciwgbW9udGgsIGRheSBhbmQgaG91ci5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUdyb3VwQnlEYXRlTGFtYmRhKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1ncm91cC1ieS1kYXRlYDtcblxuICAgICAgICBjb25zdCBsYW1iZGEgPSBuZXcgRnVuY3Rpb24odGhpcywgZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hY2Nlc3MtbG9ncy1hbmFseXNpcy9ncm91cC1ieS1kYXRlL2J1aWxkL2FwcCcpKSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgICAgICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgICAgICAgbGF5ZXJzOiBbdGhpcy5ncm91cEJ5RGF0ZUxheWVyXSxcbiAgICAgICAgICAgIGV2ZW50czogW1xuICAgICAgICAgICAgICAgIG5ldyBTM0V2ZW50U291cmNlKHRoaXMuYnVja2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czogW0V2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF0sXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFt0aGlzLmdldFVucHJvY2Vzc2VkT2JqZWN0c0ZpbHRlcigpXSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRDogJzEnLFxuICAgICAgICAgICAgICAgIE5PREVfT1BUSU9OUzogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgICAgICAgICAgICAgICBUQVJHRVRfRk9MREVSOiBBY2Nlc3NMb2dzQW5hbHlzaXMuQUNDRVNTX0xPR1NfRk9MREVSX0dST1VQRURfQllfREFURSxcbiAgICAgICAgICAgICAgICBSQVdfQUNDRVNTX0xPR19GSUxFX1BBVFRFUk46IHRoaXMuZ2V0UmF3QWNjZXNzTG9nRmlsZVBhdHRlcm4oKS5zb3VyY2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShsYW1iZGEpO1xuICAgICAgICB0aGlzLmJ1Y2tldC5ncmFudERlbGV0ZShsYW1iZGEsIGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfVU5QUk9DRVNTRUR9LypgKTtcblxuICAgICAgICByZXR1cm4gbGFtYmRhO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRVbnByb2Nlc3NlZE9iamVjdHNGaWx0ZXIoKTogTm90aWZpY2F0aW9uS2V5RmlsdGVyO1xuXG4gICAgLyoqIFRoZSBwYXR0ZXJuIHRvIGlkZW50aWZ5IHVucHJvY2Vzc2VkIGFjY2VzcyBsb2dzIGRlcGVuZHMgb24gdGhlIHByb2R1Y2luZyBzb3VyY2UgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0UmF3QWNjZXNzTG9nRmlsZVBhdHRlcm4oKTogUmVnRXhwO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBwYXJ0aXRpb24gZm9yIHRoZSB1cGNvbWluZyBob3VyIGluIHRoZSBhY2Nlc3MgbG9nIGRhdGFiYXNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ3JlYXRlUGFydGl0aW9uTGFtYmRhKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jcmVhdGUtcGFydGA7XG5cbiAgICAgICAgY29uc3QgbGFtYmRhID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvcGFydGl0aW9uaW5nL2J1aWxkL2FwcCcpLCB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZTogWyd0cmFuc2Zvcm0tcGFydGl0aW9uKicsICcqLmQudHMnXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyMCksXG4gICAgICAgICAgICBoYW5kbGVyOiAnY3JlYXRlLXBhcnRpdGlvbi5oYW5kbGVyJyxcbiAgICAgICAgICAgIGxheWVyczogW3RoaXMucGFydGl0aW9uaW5nTGF5ZXJdLFxuICAgICAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICAgICAgV09SS0dST1VQOiB0aGlzLndvcmtncm91cC5uYW1lLFxuICAgICAgICAgICAgICAgIERBVEFCQVNFOiB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgICBUQUJMRTogdGhpcy5hY2Nlc3NMb2dzQnlEYXRlVGFibGUudGFibGVOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZ3JhbnQgYWNjZXNzIHRvIFMzIGJ1Y2tldCBhbmQgdG8gZXhlY3V0ZSBBdGhlbmEgcXVlcmllcyB3aGljaCBjcmVhdGUgbmV3IHBhcnRpdGlvbnNcbiAgICAgICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhKTtcbiAgICAgICAgbGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdGFydFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkNyZWF0ZURhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlUGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6R2V0RGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXRUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkJhdGNoQ3JlYXRlUGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBsYW1iZGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBwYXJ0aXRpb25zIGZyb20gdGhlIEhpdmUgZm9ybWF0IHRvIFBhcnF1ZXQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGEoKTogRnVuY3Rpb24ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXRyYW5zZm9ybS1wYXJ0YDtcblxuICAgICAgICBjb25zdCBsYW1iZGEgPSBuZXcgRnVuY3Rpb24odGhpcywgZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hY2Nlc3MtbG9ncy1hbmFseXNpcy9wYXJ0aXRpb25pbmcvYnVpbGQvYXBwJyksIHtcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbJ2NyZWF0ZS1wYXJ0aXRpb24qJywgJyouZC50cyddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICAgICAgICAgIGhhbmRsZXI6ICd0cmFuc2Zvcm0tcGFydGl0aW9uLmhhbmRsZXInLFxuICAgICAgICAgICAgbGF5ZXJzOiBbdGhpcy5wYXJ0aXRpb25pbmdMYXllcl0sXG4gICAgICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRDogJzEnLFxuICAgICAgICAgICAgICAgIE5PREVfT1BUSU9OUzogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgICAgICAgICAgICAgICBXT1JLR1JPVVA6IHRoaXMud29ya2dyb3VwLm5hbWUsXG4gICAgICAgICAgICAgICAgREFUQUJBU0U6IHRoaXMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgIFNPVVJDRV9UQUJMRTogdGhpcy5hY2Nlc3NMb2dzQnlEYXRlVGFibGUudGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIFRBUkdFVF9UQUJMRTogdGhpcy5hY2Nlc3NMb2dzUGFycXVldFRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGdyYW50IGFjY2VzcyB0byBTMyBidWNrZXQgYW5kIHRvIGV4ZWN1dGUgQXRoZW5hIHF1ZXJpZXMgd2hpY2ggY3JlYXRlIG5ldyBwYXJ0aXRpb25zXG4gICAgICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZFdyaXRlKGxhbWJkYSk7XG4gICAgICAgIGxhbWJkYS5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6U3RhcnRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpDcmVhdGVEYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkNyZWF0ZVBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6R2V0VGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpCYXRjaENyZWF0ZVBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkdldFBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkdldFBhcnRpdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpDcmVhdGVUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkRlbGV0ZVRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6RGVsZXRlUGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBsYW1iZGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDcmVhdGVQYXJ0aXRpb25zU2NoZWR1bGVyKCk6IFJ1bGUge1xuICAgICAgICBjb25zdCBydWxlTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY3JlYXRlLXBhcnQtc2NoZWRgO1xuICAgICAgICByZXR1cm4gbmV3IFJ1bGUodGhpcywgcnVsZU5hbWUsIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lLFxuICAgICAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLmNyb24oe21pbnV0ZTogJzU1J30pLFxuICAgICAgICAgICAgdGFyZ2V0czogW25ldyBMYW1iZGFGdW5jdGlvbih0aGlzLmNyZWF0ZVBhcnRpdGlvbkxhbWJkYSwge3JldHJ5QXR0ZW1wdHM6IDEwfSldLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRyYW5zZm9ybVBhcnRpdGlvbnNTY2hlZHVsZXIocHJvcHM6IEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzKTogUnVsZSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS10cmFuc2Zvcm0tcGFydC1zY2hlZGA7XG4gICAgICAgIHJldHVybiBuZXcgUnVsZSh0aGlzLCBydWxlTmFtZSwge1xuICAgICAgICAgICAgcnVsZU5hbWUsXG4gICAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuY3Jvbih7bWludXRlOiAnMSd9KSxcbiAgICAgICAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgICAgICAgICBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy50cmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGEsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHRoaXMuZ2V0VHJhbnNmb3JtUGFydGl0aW9uSW52b2NhdGlvblByb3BzKHByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0cnlBdHRlbXB0czogMTAsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zZm9ybVBhcnRpdGlvbkludm9jYXRpb25Qcm9wcyhwcm9wczogQWNjZXNzTG9nc0FuYWx5c2lzUHJvcHMpOiBSdWxlVGFyZ2V0SW5wdXQge1xuICAgICAgICByZXR1cm4gUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgY29sdW1uTmFtZXM6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmFjY2Vzc0xvZ3NQYXJxdWV0VGFibGUuY29sdW1ucyxcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5hY2Nlc3NMb2dzUGFycXVldFRhYmxlLnBhcnRpdGlvbktleXMgYXMgQ29sdW1uW10pLFxuICAgICAgICAgICAgXS5tYXAoY29sdW1uID0+IGNvbHVtbi5uYW1lKSxcbiAgICAgICAgICAgIGNvbHVtblRyYW5zZm9ybWF0aW9uczogdGhpcy5nZXRDb2x1bW5UcmFuc2Zvcm1hdGlvblJ1bGVzKHByb3BzKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmVlZHMgdG8gcmV0dXJuIHRoZSBsb2cgc291cmNlIHNwZWNpZmljIGNvbHVtbiB0cmFuc2Zvcm1hdGlvbiBydWxlc1xuICAgICAqIChlLmcuIHRvIGFub255bWl6ZSBJUCBhZGRyZXNzZXMpLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRDb2x1bW5UcmFuc2Zvcm1hdGlvblJ1bGVzKHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcyk6IENvbHVtblRyYW5zZm9ybWF0aW9uUnVsZXM7XG59XG4iXX0=
|
|
@@ -100,6 +100,7 @@ export abstract class AccessLogsAnalysis extends Construct {
|
|
|
100
100
|
|
|
101
101
|
return new CfnWorkGroup(this, workgroupName, {
|
|
102
102
|
name: workgroupName,
|
|
103
|
+
recursiveDeleteOption: true,
|
|
103
104
|
workGroupConfiguration: {
|
|
104
105
|
publishCloudWatchMetricsEnabled: false,
|
|
105
106
|
resultConfiguration: {
|
|
@@ -61,6 +61,14 @@ export declare class NuxtServerAppStack extends Stack {
|
|
|
61
61
|
* @private
|
|
62
62
|
*/
|
|
63
63
|
private staticAssetConfigs;
|
|
64
|
+
/**
|
|
65
|
+
* The CloudFront distribution origin for the API gateway to route incoming requests to the Nuxt Lambda function.
|
|
66
|
+
*/
|
|
67
|
+
private httpOrigin;
|
|
68
|
+
/**
|
|
69
|
+
* The cache policy for the Nuxt app route behaviors of the CloudFront distribution.
|
|
70
|
+
*/
|
|
71
|
+
private appCachePolicy;
|
|
64
72
|
/**
|
|
65
73
|
* The CloudFront distribution to route incoming requests to the Nuxt Lambda function (via the API gateway)
|
|
66
74
|
* or the S3 assets folder (with caching).
|
|
@@ -120,20 +128,24 @@ export declare class NuxtServerAppStack extends Stack {
|
|
|
120
128
|
*/
|
|
121
129
|
private createCloudFrontDistribution;
|
|
122
130
|
/**
|
|
123
|
-
* Creates
|
|
131
|
+
* Creates the CloudFront distribution behavior origin to route incoming requests to the Nuxt render Lambda function (via API gateway).
|
|
132
|
+
*/
|
|
133
|
+
private createNuxtAppHttpOrigin;
|
|
134
|
+
/**
|
|
135
|
+
* Creates a behavior for the CloudFront distribution to route incoming web requests
|
|
136
|
+
* to the Nuxt render Lambda function (via API gateway).
|
|
124
137
|
* Additionally, this automatically redirects HTTP requests to HTTPS.
|
|
125
|
-
*
|
|
126
|
-
* @private
|
|
127
138
|
*/
|
|
128
139
|
private createNuxtAppRouteBehavior;
|
|
129
140
|
private setupCloudFrontRouting;
|
|
130
141
|
/**
|
|
131
142
|
* Creates a cache policy for the Nuxt app route behavior of the CloudFront distribution.
|
|
132
|
-
* Even though we don't want to cache SSR requests, we still have to create this cache policy in order to
|
|
133
|
-
* forward required cookies, query params and headers. This doesn't make any sense, because if nothing
|
|
134
|
-
* is cached, one would expect, that anything would/could be forwarded, but anyway...
|
|
135
143
|
*/
|
|
136
|
-
private
|
|
144
|
+
private createNuxtAppCachePolicy;
|
|
145
|
+
/**
|
|
146
|
+
* Creates a behavior for the CloudFront distribution to route matching Nuxt app API requests to the API gateway.
|
|
147
|
+
*/
|
|
148
|
+
private createApiRouteBehavior;
|
|
137
149
|
/**
|
|
138
150
|
* Creates a behavior for the CloudFront distribution to route matching incoming requests for the static assets
|
|
139
151
|
* to the S3 bucket that holds these static assets.
|
|
@@ -43,6 +43,8 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
43
43
|
}
|
|
44
44
|
this.appLambdaFunction = this.createAppLambdaFunction(props);
|
|
45
45
|
this.apiGateway = this.createApiGateway(props);
|
|
46
|
+
this.httpOrigin = this.createNuxtAppHttpOrigin();
|
|
47
|
+
this.appCachePolicy = this.createNuxtAppCachePolicy(props);
|
|
46
48
|
this.cdn = this.createCloudFrontDistribution(props);
|
|
47
49
|
this.configureDeployments();
|
|
48
50
|
this.createDnsRecords(props);
|
|
@@ -224,7 +226,7 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
224
226
|
minimumProtocolVersion: aws_cloudfront_1.SecurityPolicyProtocol.TLS_V1_2_2018,
|
|
225
227
|
certificate: aws_certificatemanager_1.Certificate.fromCertificateArn(this, `${this.resourceIdPrefix}-global-certificate`, props.globalTlsCertificateArn),
|
|
226
228
|
httpVersion: aws_cloudfront_1.HttpVersion.HTTP2_AND_3,
|
|
227
|
-
defaultBehavior: this.createNuxtAppRouteBehavior(
|
|
229
|
+
defaultBehavior: this.createNuxtAppRouteBehavior(),
|
|
228
230
|
additionalBehaviors: this.setupCloudFrontRouting(props),
|
|
229
231
|
priceClass: aws_cloudfront_1.PriceClass.PRICE_CLASS_100,
|
|
230
232
|
logBucket: this.accessLogsBucket,
|
|
@@ -233,29 +235,37 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
233
235
|
});
|
|
234
236
|
}
|
|
235
237
|
/**
|
|
236
|
-
* Creates
|
|
238
|
+
* Creates the CloudFront distribution behavior origin to route incoming requests to the Nuxt render Lambda function (via API gateway).
|
|
239
|
+
*/
|
|
240
|
+
createNuxtAppHttpOrigin() {
|
|
241
|
+
return new aws_cloudfront_origins_1.HttpOrigin(`${this.apiGateway.httpApiId}.execute-api.${this.region}.amazonaws.com`, {
|
|
242
|
+
connectionAttempts: 2,
|
|
243
|
+
connectionTimeout: aws_cdk_lib_1.Duration.seconds(2),
|
|
244
|
+
readTimeout: aws_cdk_lib_1.Duration.seconds(10),
|
|
245
|
+
protocolPolicy: aws_cloudfront_1.OriginProtocolPolicy.HTTPS_ONLY,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Creates a behavior for the CloudFront distribution to route incoming web requests
|
|
250
|
+
* to the Nuxt render Lambda function (via API gateway).
|
|
237
251
|
* Additionally, this automatically redirects HTTP requests to HTTPS.
|
|
238
|
-
*
|
|
239
|
-
* @private
|
|
240
252
|
*/
|
|
241
|
-
createNuxtAppRouteBehavior(
|
|
253
|
+
createNuxtAppRouteBehavior() {
|
|
242
254
|
return {
|
|
243
|
-
origin:
|
|
244
|
-
connectionAttempts: 2,
|
|
245
|
-
connectionTimeout: aws_cdk_lib_1.Duration.seconds(2),
|
|
246
|
-
readTimeout: aws_cdk_lib_1.Duration.seconds(10),
|
|
247
|
-
protocolPolicy: aws_cloudfront_1.OriginProtocolPolicy.HTTPS_ONLY,
|
|
248
|
-
}),
|
|
255
|
+
origin: this.httpOrigin,
|
|
249
256
|
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD,
|
|
250
257
|
compress: true,
|
|
251
258
|
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
252
259
|
originRequestPolicy: undefined,
|
|
253
|
-
cachePolicy: this.
|
|
260
|
+
cachePolicy: this.appCachePolicy
|
|
254
261
|
};
|
|
255
262
|
}
|
|
256
263
|
setupCloudFrontRouting(props) {
|
|
257
264
|
let routingBehaviours = {};
|
|
258
265
|
// Specific ones first
|
|
266
|
+
if (props.enableApi) {
|
|
267
|
+
routingBehaviours = { ...routingBehaviours, ...this.createApiRouteBehavior() };
|
|
268
|
+
}
|
|
259
269
|
if (props.enableSitemap) {
|
|
260
270
|
routingBehaviours = { ...routingBehaviours, ...this.createSitemapRouteBehavior() };
|
|
261
271
|
}
|
|
@@ -264,11 +274,8 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
264
274
|
}
|
|
265
275
|
/**
|
|
266
276
|
* Creates a cache policy for the Nuxt app route behavior of the CloudFront distribution.
|
|
267
|
-
* Even though we don't want to cache SSR requests, we still have to create this cache policy in order to
|
|
268
|
-
* forward required cookies, query params and headers. This doesn't make any sense, because if nothing
|
|
269
|
-
* is cached, one would expect, that anything would/could be forwarded, but anyway...
|
|
270
277
|
*/
|
|
271
|
-
|
|
278
|
+
createNuxtAppCachePolicy(props) {
|
|
272
279
|
return new aws_cloudfront_1.CachePolicy(this, `${this.resourceIdPrefix}-cache-policy`, {
|
|
273
280
|
cachePolicyName: `${this.resourceIdPrefix}-cdn-cache-policy`,
|
|
274
281
|
comment: `Defines which request data to pass to the ${this.resourceIdPrefix} origin and how the cache key is calculated.`,
|
|
@@ -282,6 +289,22 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
282
289
|
enableAcceptEncodingGzip: true,
|
|
283
290
|
});
|
|
284
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* Creates a behavior for the CloudFront distribution to route matching Nuxt app API requests to the API gateway.
|
|
294
|
+
*/
|
|
295
|
+
createApiRouteBehavior() {
|
|
296
|
+
const apiBehavior = {
|
|
297
|
+
origin: this.httpOrigin,
|
|
298
|
+
compress: true,
|
|
299
|
+
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_ALL,
|
|
300
|
+
cachedMethods: aws_cloudfront_1.CachedMethods.CACHE_GET_HEAD_OPTIONS,
|
|
301
|
+
cachePolicy: this.appCachePolicy,
|
|
302
|
+
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.HTTPS_ONLY
|
|
303
|
+
};
|
|
304
|
+
const rules = {};
|
|
305
|
+
rules['/api/*'] = apiBehavior;
|
|
306
|
+
return rules;
|
|
307
|
+
}
|
|
285
308
|
/**
|
|
286
309
|
* Creates a behavior for the CloudFront distribution to route matching incoming requests for the static assets
|
|
287
310
|
* to the S3 bucket that holds these static assets.
|
|
@@ -480,4 +503,4 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
480
503
|
}
|
|
481
504
|
}
|
|
482
505
|
exports.NuxtServerAppStack = NuxtServerAppStack;
|
|
483
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnV4dFNlcnZlckFwcFN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTnV4dFNlcnZlckFwcFN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUEyRDtBQUUzRCwrRUFBK0Q7QUFDL0QsK0RBZ0JvQztBQUNwQyx1REFBb0c7QUFDcEcsK0NBTTRCO0FBQzVCLHlEQUFtRztBQUNuRyxxRUFBcUY7QUFDckYsK0VBQXdFO0FBQ3hFLHlFQUFpRTtBQUNqRSxpRkFBK0Q7QUFDL0QsbURBQW1EO0FBQ25ELHNHQUFtRjtBQUNuRiw0RUFBa0c7QUFDbEcsZ0VBQXVGO0FBQ3ZGLHlCQUF5QjtBQUN6Qix1REFBdUU7QUFDdkUsdUVBQThEO0FBQzlELDZCQUE2QjtBQUM3QiwyQkFBaUM7QUFFakMsdUdBQWtHO0FBRWxHOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxtQkFBSztJQTJFekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4Qjs7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqRixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSxrREFBNEIsRUFBQyxNQUFBLEtBQUssQ0FBQyxPQUFPLG1DQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFMUQsSUFBSSxLQUFL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LFVBQVU7WUFDVixpQkFBaUIsRUFBRSwwQkFBaUIsQ0FBQyxTQUFTO1lBQzlDLGVBQWUsRUFBRSx3QkFBZSxDQUFDLHNCQUFzQjtZQUN2RCxrRUFBa0U7WUFDbEUsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztZQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1NBQzFCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFOUMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLHdCQUF3QixDQUFDLEtBQThCO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLDJEQUE0QixDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsdUJBQXVCLEVBQUU7WUFDM0YsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDN0IsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixjQUFjO1lBQ3RELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBdGtCRCxnREFza0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2t9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7Q2VydGlmaWNhdGV9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQge1xuICAgIEFsbG93ZWRNZXRob2RzLFxuICAgIEJlaGF2aW9yT3B0aW9ucyxcbiAgICBDYWNoZUNvb2tpZUJlaGF2aW9yLFxuICAgIENhY2hlZE1ldGhvZHMsXG4gICAgQ2FjaGVIZWFkZXJCZWhhdmlvcixcbiAgICBDYWNoZVBvbGljeSxcbiAgICBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IsXG4gICAgRGlzdHJpYnV0aW9uLCBIdHRwVmVyc2lvbixcbiAgICBJQ2FjaGVQb2xpY3ksXG4gICAgSU9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICAgIE9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICAgIE9yaWdpblByb3RvY29sUG9saWN5LFxuICAgIFByaWNlQ2xhc3MsXG4gICAgU2VjdXJpdHlQb2xpY3lQcm90b2NvbCxcbiAgICBWaWV3ZXJQcm90b2NvbFBvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgTGF5ZXJWZXJzaW9uLCBSdW50aW1lLCBUcmFjaW5nfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0QWNjZXNzQ29udHJvbCxcbiAgICBCdWNrZXRFbmNyeXB0aW9uLFxuICAgIE9iamVjdE93bmVyc2hpcFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0FhYWFSZWNvcmQsIEFSZWNvcmQsIEhvc3RlZFpvbmUsIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHtCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UsIFN0b3JhZ2VDbGFzc30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQge0h0dHBPcmlnaW4sIFMzT3JpZ2lufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiO1xuaW1wb3J0IHtDbG91ZEZyb250VGFyZ2V0fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHtIdHRwTWV0aG9kfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3NcIjtcbmltcG9ydCB7UmV0ZW50aW9uRGF5c30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQge0h0dHBMYW1iZGFJbnRlZ3JhdGlvbn0gZnJvbSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnMtYWxwaGEnO1xuaW1wb3J0IHtEb21haW5OYW1lLCBFbmRwb2ludFR5cGUsIEh0dHBBcGksIFNlY3VyaXR5UG9saWN5fSBmcm9tIFwiQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1hbHBoYVwiO1xuaW1wb3J0IHtnZXROdXh0QXBwU3RhdGljQXNzZXRDb25maWdzLCBTdGF0aWNBc3NldENvbmZpZ30gZnJvbSBcIi4uL051eHRBcHBTdGF0aWNBc3NldHNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHtSdWxlLCBSdWxlVGFyZ2V0SW5wdXQsIFNjaGVkdWxlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHtMYW1iZGFGdW5jdGlvbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHt3cml0ZUZpbGVTeW5jfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7TnV4dFNlcnZlckFwcFN0YWNrUHJvcHN9IGZyb20gXCIuL051eHRTZXJ2ZXJBcHBTdGFja1Byb3BzXCI7XG5pbXBvcnQge0Nsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXN9IGZyb20gXCIuLi9hY2Nlc3MtbG9ncy1hbmFseXNpcy9DbG91ZEZyb250QWNjZXNzTG9nc0FuYWx5c2lzXCI7XG5cbi8qKlxuICogQ0RLIHN0YWNrIHRvIGRlcGxveSBhIGR5bmFtaWMgTnV4dCBhcHAgKHRhcmdldD1zZXJ2ZXIpIG9uIEFXUyB3aXRoIExhbWJkYSwgQXBpR2F0ZXdheSwgUzMgYW5kIENsb3VkRnJvbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOdXh0U2VydmVyQXBwU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaWRlbnRpZmllciBwcmVmaXggb2YgdGhlIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZUlkUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgZGVwbG95bWVudCB0aGF0IGlzIHVzZWQgdG8gdGFnIHRoZSBzdGF0aWMgYXNzZXRzIG9mIHRoZSBkZXBsb3ltZW50XG4gICAgICogdG8gbGF0ZXIgYmUgYWJsZSB0byBjbGVhbiB1cCBvdXRkYXRlZCBhc3NldHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95bWVudFJldmlzaW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaWRlbnRpdHkgdG8gdXNlIGZvciBhY2Nlc3NpbmcgdGhlIGRlcGxveW1lbnQgYXNzZXRzIG9uIFMzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkbkFjY2Vzc0lkZW50aXR5OiBJT3JpZ2luQWNjZXNzSWRlbnRpdHk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBkZXBsb3ltZW50IGFzc2V0cyBnZXRzIHN0b3JlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljQXNzZXRzQnVja2V0OiBCdWNrZXQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBhY2Nlc3MgbG9ncyBvZiB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gZ2V0cyBzdG9yZWQuXG4gICAgICovXG4gICAgcHVibGljIGFjY2Vzc0xvZ3NCdWNrZXQ6IEJ1Y2tldHx1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBzaXRlbWFwIGFzc2V0cyBnZXRzIHN0b3JlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2l0ZW1hcEJ1Y2tldDogQnVja2V0fHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBOdXh0IGFwcCBvbiB0aGUgc2VydmVyIHNpZGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwTGFtYmRhRnVuY3Rpb246IEZ1bmN0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IGNsZWFudXBzIHRoZSBvdXRkYXRlZCBzdGF0aWMgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGVhbnVwTGFtYmRhRnVuY3Rpb246IEZ1bmN0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVGhlIEFQSSBnYXRld2F5IHRvIG1ha2UgdGhlIExhbWJkYSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIE51eHQgYXBwIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcGlHYXRld2F5OiBIdHRwQXBpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZ3MgZm9yIHRoZSBzdGF0aWMgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcCB0aGF0IHNoYWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldENvbmZpZ3M6IFN0YXRpY0Fzc2V0Q29uZmlnW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gcm91dGUgaW5jb21pbmcgcmVxdWVzdHMgdG8gdGhlIE51eHQgTGFtYmRhIGZ1bmN0aW9uICh2aWEgdGhlIEFQSSBnYXRld2F5KVxuICAgICAqIG9yIHRoZSBTMyBhc3NldHMgZm9sZGVyICh3aXRoIGNhY2hpbmcpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkbjogRGlzdHJpYnV0aW9uO1xuXG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgICAgIHRoaXMucmVzb3VyY2VJZFByZWZpeCA9IGAke3Byb3BzLnByb2plY3R9LSR7cHJvcHMuc2VydmljZX0tJHtwcm9wcy5lbnZpcm9ubWVudH1gO1xuXG4gICAgICAgIC8vIE51eHQgYXBwIHJlc291cmNlc1xuICAgICAgICB0aGlzLmRlcGxveW1lbnRSZXZpc2lvbiA9IHRoaXMuY3JlYXRlRGVwbG95bWVudFJldmlzaW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldENvbmZpZ3MgPSBnZXROdXh0QXBwU3RhdGljQXNzZXRDb25maWdzKHByb3BzLnJvb3REaXIgPz8gJy4nKTtcbiAgICAgICAgdGhpcy5jZG5BY2Nlc3NJZGVudGl0eSA9IHRoaXMuY3JlYXRlQ2RuQWNjZXNzSWRlbnRpdHkoKTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldHNCdWNrZXQgPSB0aGlzLmNyZWF0ZVN0YXRpY0Fzc2V0c0J1Y2tldCgpO1xuXG4gICAgICAgIGlmIChwcm9wcy5lbmFibGVBY2Nlc3NMb2dzQW5hbHlzaXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzTG9nc0J1Y2tldCA9IHRoaXMuY3JlYXRlQWNjZXNzTG9nc0J1Y2tldCgpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVBY2Nlc3NMb2dzQW5hbHlzaXMocHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmVuYWJsZVNpdGVtYXApIHtcbiAgICAgICAgICAgIHRoaXMuc2l0ZW1hcEJ1Y2tldCA9IHRoaXMuY3JlYXRlU2l0ZW1hcEJ1Y2tldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcHBMYW1iZGFGdW5jdGlvbiA9IHRoaXMuY3JlYXRlQXBwTGFtYmRhRnVuY3Rpb24ocHJvcHMpO1xuICAgICAgICB0aGlzLmFwaUdhdGV3YXkgPSB0aGlzLmNyZWF0ZUFwaUdhdGV3YXkocHJvcHMpO1xuICAgICAgICB0aGlzLmNkbiA9IHRoaXMuY3JlYXRlQ2xvdWRGcm9udERpc3RyaWJ1dGlvbihwcm9wcyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlRGVwbG95bWVudHMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEbnNSZWNvcmRzKHByb3BzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBQaW5nUnVsZShwcm9wcyk7XG5cbiAgICAgICAgLy8gU3RhdGljIGFzc2V0cyBjbGVhbnVwIHJlc291cmNlc1xuICAgICAgICB0aGlzLmNsZWFudXBMYW1iZGFGdW5jdGlvbiA9IHRoaXMuY3JlYXRlQ2xlYW51cExhbWJkYUZ1bmN0aW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDbGVhbnVwVHJpZ2dlclJ1bGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBjdXJyZW50IGRlcGxveW1lbnQgcmV2aXNpb24gZmlsZSBpbiB0aGUgcHVibGljIGZvbGRlciBvZiB0aGUgTnV4dCBhcHAgdG8gYmUgYWNjZXNzaWJsZVxuICAgICAqIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IHJldmlzaW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRGVwbG95bWVudFJldmlzaW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJldmlzaW9uRmlsZVBhdGggPSBgJHtwcm9wcy5yb290RGlyID8/ICcuJ30vLm91dHB1dC9wdWJsaWMvYXBwLXJldmlzaW9uYDtcbiAgICAgICAgY29uc3QgYXBwUmV2aXNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgICAgd3JpdGVGaWxlU3luYyhyZXZpc2lvbkZpbGVQYXRoLCBhcHBSZXZpc2lvbiwge2VuY29kaW5nOiAndXRmLTgnfSk7XG5cbiAgICAgICAgcmV0dXJuIGFwcFJldmlzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGlkZW50aXR5IHRvIGFjY2VzcyB0aGUgUzMgZGVwbG95bWVudCBhc3NldCBmaWxlcyB2aWEgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNkbkFjY2Vzc0lkZW50aXR5KCk6IElPcmlnaW5BY2Nlc3NJZGVudGl0eSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbkFjY2Vzc0lkZW50aXR5TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2RuLXMzLWFjY2Vzc2A7XG4gICAgICAgIHJldHVybiBuZXcgT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcywgb3JpZ2luQWNjZXNzSWRlbnRpdHlOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBidWNrZXQgdG8gc3RvcmUgdGhlIHN0YXRpYyBkZXBsb3ltZW50IGFzc2V0IGZpbGVzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNBc3NldHNCdWNrZXQoKTogQnVja2V0IHtcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYXNzZXRzYDtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCBidWNrZXROYW1lLCB7XG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgYnVja2V0TmFtZSxcbiAgICAgICAgICAgIC8vIFRoZSBidWNrZXQgYW5kIGFsbCBvZiBpdHMgb2JqZWN0cyBjYW4gYmUgZGVsZXRlZCwgYmVjYXVzZSBhbGwgdGhlIGNvbnRlbnQgaXMgbWFuYWdlZCBpbiB0aGlzIHByb2plY3RcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICAgICAgb2JqZWN0T3duZXJzaGlwOiBPYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX0VORk9SQ0VELFxuICAgICAgICB9KTtcblxuICAgICAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5jZG5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAgICAgcmV0dXJuIGJ1Y2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBidWNrZXQgdG8gc3RvcmUgdGhlIHNpdGVtYXAgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTaXRlbWFwQnVja2V0KCk6IEJ1Y2tldCB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldE5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXNpdGVtYXBgO1xuICAgICAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIGJ1Y2tldE5hbWUsIHtcbiAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBhY2Nlc3NDb250cm9sOiBCdWNrZXRBY2Nlc3NDb250cm9sLlBSSVZBVEUsXG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIFRoZSBidWNrZXQgYW5kIGFsbCBvZiBpdHMgb2JqZWN0cyBjYW4gYmUgZGVsZXRlZCwgYmVjYXVzZSBhbGwgdGhlIGNvbnRlbnQgaXMgbWFuYWdlZCBpbiB0aGlzIHByb2plY3RcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5jZG5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAgICAgcmV0dXJuIGJ1Y2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVBcHBMYW1iZGFGdW5jdGlvbihwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hcHAtZnVuY3Rpb25gO1xuXG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24odGhpcywgZnVuY05hbWUsIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY05hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFJlbmRlcnMgdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBOdXh0IGFwcC5gLFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgICAgIGhhbmRsZXI6IGAke3Byb3BzLmVudHJ5cG9pbnQgPz8gJ2luZGV4J30uaGFuZGxlcmAsXG4gICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChgJHtwcm9wcy5yb290RGlyID8/ICcuJyB9Ly5vdXRwdXQvc2VydmVyYCwge1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IFsnKiouc3ZnJywgJyoqLmljbycsICcqKi5wbmcnLCAnKiouanBnJywgJyoqLmpzLm1hcCddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUgPz8gMTc5MixcbiAgICAgICAgICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgICAgICAgICBhbGxvd1B1YmxpY1N1Ym5ldDogZmFsc2UsXG4gICAgICAgICAgICB0cmFjaW5nOiBwcm9wcy5lbmFibGVUcmFjaW5nID8gVHJhY2luZy5BQ1RJVkUgOiBUcmFjaW5nLkRJU0FCTEVELFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICAgICAgLi4uSlNPTi5wYXJzZShwcm9wcy5lbnRyeXBvaW50RW52ID8/ICd7fScpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgY2xlYW51cHMgdGhlIG91dGRhdGVkIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNsZWFudXBMYW1iZGFGdW5jdGlvbihwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZTogc3RyaW5nID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLWZ1bmN0aW9uYDtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IEZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEF1dG8tZGVsZXRlcyB0aGUgb3V0ZGF0ZWQgc3RhdGljIGFzc2V0cyBpbiB0aGUgJHt0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lfSBTMyBidWNrZXQuYCxcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzE4X1gsXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgICBsYXllcnM6IFtuZXcgTGF5ZXJWZXJzaW9uKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tbGF5ZXJgLCB7XG4gICAgICAgICAgICAgICAgbGF5ZXJWZXJzaW9uTmFtZTogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1sYXllcmAsXG4gICAgICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hc3NldHMtY2xlYW51cC9idWlsZC9sYXllcicpKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtSdW50aW1lLk5PREVKU18xOF9YXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYFByb3ZpZGVzIHRoZSBub2RlX21vZHVsZXMgcmVxdWlyZWQgZm9yIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gbGFtYmRhIGZ1bmN0aW9uLmBcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYXNzZXRzLWNsZWFudXAvYnVpbGQvYXBwJykpLFxuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgICAgICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIFNUQVRJQ19BU1NFVFNfQlVDS0VUOiB0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgICAgICAgIE9VVERBVEVEX0FTU0VUU19SRVRFTlRJT05fREFZUzogYCR7cHJvcHMub3V0ZGF0ZWRBc3NldHNSZXRlbnRpb25EYXlzID8/IDMwfWAsXG4gICAgICAgICAgICAgICAgRU5WSVJPTk1FTlQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgIEFXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEOiAnMScsXG4gICAgICAgICAgICAgICAgTk9ERV9PUFRJT05TOiAnLS1lbmFibGUtc291cmNlLW1hcHMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZ3JhbnQgZnVuY3Rpb24gYWNjZXNzIHRvIFMzIGJ1Y2tldFxuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5ncmFudFJlYWQocmVzdWx0KTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnREZWxldGUocmVzdWx0KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIEFQSSBnYXRld2F5IHRvIG1ha2UgdGhlIE51eHQgYXBwIHJlbmRlciBMYW1iZGEgZnVuY3Rpb24gcHVibGljbHkgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUFwaUdhdGV3YXkocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogSHR0cEFwaSB7XG4gICAgICAgIGNvbnN0IGFwaU5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFwaWA7XG4gICAgICAgIGNvbnN0IGxhbWJkYUludGVncmF0aW9uID0gbmV3IEh0dHBMYW1iZGFJbnRlZ3JhdGlvbihgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWxhbWJkYS1pbnRlZ3JhdGlvbmAsIHRoaXMuYXBwTGFtYmRhRnVuY3Rpb24pO1xuXG4gICAgICAgIC8vIFdlIHdhbnQgdGhlIEFQSSBnYXRld2F5IHRvIGJlIGFjY2Vzc2libGUgYnkgdGhlIGN1c3RvbSBkb21haW4gbmFtZS5cbiAgICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgYWNjZXNzIHRoZSBnYXRld2F5IHZpYSBDbG91ZEZyb250IChmb3IgYXV0byBodHRwIHRvIGh0dHBzIHJlZGlyZWN0cyksIHRoaXMgaXMgcmVxdWlyZWRcbiAgICAgICAgLy8gdG8gYmUgYWJsZSB0byByZWRpcmVjdCB0aGUgb3JpZ2luYWwgJ0hvc3QnIGhlYWRlciB0byB0aGUgTnV4dCBhcHBsaWNhdGlvbiwgaWYgcmVxdWVzdGVkLlxuICAgICAgICBjb25zdCBkb21haW5OYW1lID0gbmV3IERvbWFpbk5hbWUodGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hcGktZG9tYWluYCwge1xuICAgICAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluLFxuICAgICAgICAgICAgY2VydGlmaWNhdGU6IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybih0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXJlZ2lvbmFsLWNlcnRpZmljYXRlYCwgcHJvcHMucmVnaW9uYWxUbHNDZXJ0aWZpY2F0ZUFybiksXG4gICAgICAgICAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZS5SRUdJT05BTCxcbiAgICAgICAgICAgIHNlY3VyaXR5UG9saWN5OiBTZWN1cml0eVBvbGljeS5UTFNfMV8yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFwaUdhdGV3YXkgPSBuZXcgSHR0cEFwaSh0aGlzLCBhcGlOYW1lLCB7XG4gICAgICAgICAgICBhcGlOYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBDb25uZWN0cyB0aGUgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHdpdGggdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBMYW1iZGEgZnVuY3Rpb24gdG8gbWFrZSBpdCBwdWJsaWNseSBhdmFpbGFibGUuYCxcbiAgICAgICAgICAgIC8vIFRoZSBhcHAgZG9lcyBub3QgYWxsb3cgYW55IGNyb3NzLW9yaWdpbiBhY2Nlc3MgYnkgcHVycG9zZTogdGhlIGFwcCBzaG91bGQgbm90IGJlIGVtYmVkZGFibGUgYW55d2hlcmVcbiAgICAgICAgICAgIGNvcnNQcmVmbGlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHRJbnRlZ3JhdGlvbjogbGFtYmRhSW50ZWdyYXRpb24sXG4gICAgICAgICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzoge1xuICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXBpR2F0ZXdheS5hZGRSb3V0ZXMoe1xuICAgICAgICAgICAgaW50ZWdyYXRpb246IGxhbWJkYUludGVncmF0aW9uLFxuICAgICAgICAgICAgcGF0aDogJy97cHJveHkrfScsXG4gICAgICAgICAgICBtZXRob2RzOiBbSHR0cE1ldGhvZC5HRVQsIEh0dHBNZXRob2QuSEVBRF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhcGlHYXRld2F5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRoYXQgcm91dGVzIGluY29taW5nIHJlcXVlc3RzIHRvIHRoZSBOdXh0IExhbWJkYSBmdW5jdGlvbiAodmlhIHRoZSBBUEkgZ2F0ZXdheSlcbiAgICAgKiBvciB0aGUgUzMgYXNzZXRzIGZvbGRlciAod2l0aCBjYWNoaW5nKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVDbG91ZEZyb250RGlzdHJpYnV0aW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IERpc3RyaWJ1dGlvbiB7XG4gICAgICAgIGNvbnN0IGNkbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNkbmA7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBEaXN0cmlidXRpb24odGhpcywgY2RuTmFtZSwge1xuICAgICAgICAgICAgZG9tYWluTmFtZXM6IFtwcm9wcy5kb21haW5dLFxuICAgICAgICAgICAgY29tbWVudDogY2RuTmFtZSxcbiAgICAgICAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IFNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAxOCxcbiAgICAgICAgICAgIGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4odGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1nbG9iYWwtY2VydGlmaWNhdGVgLCBwcm9wcy5nbG9iYWxUbHNDZXJ0aWZpY2F0ZUFybiksXG4gICAgICAgICAgICBodHRwVmVyc2lvbjogSHR0cFZlcnNpb24uSFRUUDJfQU5EXzMsXG4gICAgICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IHRoaXMuY3JlYXRlTnV4dEFwcFJvdXRlQmVoYXZpb3IocHJvcHMpLFxuICAgICAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczogdGhpcy5zZXR1cENsb3VkRnJvbnRSb3V0aW5nKHByb3BzKSxcbiAgICAgICAgICAgIHByaWNlQ2xhc3M6IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMTAwLCAvLyBVc2Ugb25seSBOb3J0aCBBbWVyaWNhIGFuZCBFdXJvcGVcbiAgICAgICAgICAgIGxvZ0J1Y2tldDogdGhpcy5hY2Nlc3NMb2dzQnVja2V0LFxuICAgICAgICAgICAgbG9nRmlsZVByZWZpeDogcHJvcHMuZW5hYmxlQWNjZXNzTG9nc0FuYWx5c2lzID8gQ2xvdWRGcm9udEFjY2Vzc0xvZ3NBbmFseXNpcy5nZXRMb2dGaWxlUHJlZml4KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBsb2dJbmNsdWRlc0Nvb2tpZXM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIGluY29taW5nIHJlcXVlc3RzIHRvIHRoZSBOdXh0IHJlbmRlciBMYW1iZGEgZnVuY3Rpb24gKHZpYSBBUEkgZ2F0ZXdheSkuXG4gICAgICogQWRkaXRpb25hbGx5LCB0aGlzIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RzIEhUVFAgcmVxdWVzdHMgdG8gSFRUUFMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTnV4dEFwcFJvdXRlQmVoYXZpb3IocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogQmVoYXZpb3JPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9yaWdpbjogbmV3IEh0dHBPcmlnaW4oYCR7dGhpcy5hcGlHYXRld2F5Lmh0dHBBcGlJZH0uZXhlY3V0ZS1hcGkuJHt0aGlzLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uQXR0ZW1wdHM6IDIsXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMiksXG4gICAgICAgICAgICAgICAgcmVhZFRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICAgICAgICAgIHByb3RvY29sUG9saWN5OiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQUQsXG4gICAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNhY2hlUG9saWN5OiB0aGlzLmNyZWF0ZVNzckNhY2hlUG9saWN5KHByb3BzKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwQ2xvdWRGcm9udFJvdXRpbmcocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGxldCByb3V0aW5nQmVoYXZpb3VyczogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiA9IHt9O1xuXG4gICAgICAgIC8vIFNwZWNpZmljIG9uZXMgZmlyc3RcbiAgICAgICAgaWYgKHByb3BzLmVuYWJsZVNpdGVtYXApIHtcbiAgICAgICAgICAgIHJvdXRpbmdCZWhhdmlvdXJzID0gey4uLnJvdXRpbmdCZWhhdmlvdXJzLCAuLi50aGlzLmNyZWF0ZVNpdGVtYXBSb3V0ZUJlaGF2aW9yKCl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcm91dGluZ0JlaGF2aW91cnMgPSB7Li4ucm91dGluZ0JlaGF2aW91cnMsIC4uLnRoaXMuY3JlYXRlU3RhdGljQXNzZXRzUm91dGVCZWhhdmlvcigpfTtcblxuICAgICAgICByZXR1cm4gcm91dGluZ0JlaGF2aW91cnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNhY2hlIHBvbGljeSBmb3IgdGhlIE51eHQgYXBwIHJvdXRlIGJlaGF2aW9yIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICAgKiBFdmVuIHRob3VnaCB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIFNTUiByZXF1ZXN0cywgd2Ugc3RpbGwgaGF2ZSB0byBjcmVhdGUgdGhpcyBjYWNoZSBwb2xpY3kgaW4gb3JkZXIgdG9cbiAgICAgKiBmb3J3YXJkIHJlcXVpcmVkIGNvb2tpZXMsIHF1ZXJ5IHBhcmFtcyBhbmQgaGVhZGVycy4gVGhpcyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLCBiZWNhdXNlIGlmIG5vdGhpbmdcbiAgICAgKiBpcyBjYWNoZWQsIG9uZSB3b3VsZCBleHBlY3QsIHRoYXQgYW55dGhpbmcgd291bGQvY291bGQgYmUgZm9yd2FyZGVkLCBidXQgYW55d2F5Li4uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTc3JDYWNoZVBvbGljeShwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBJQ2FjaGVQb2xpY3kge1xuICAgICAgICByZXR1cm4gbmV3IENhY2hlUG9saWN5KHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2FjaGUtcG9saWN5YCwge1xuICAgICAgICAgICAgY2FjaGVQb2xpY3lOYW1lOiBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNkbi1jYWNoZS1wb2xpY3lgLFxuICAgICAgICAgICAgY29tbWVudDogYERlZmluZXMgd2hpY2ggcmVxdWVzdCBkYXRhIHRvIHBhc3MgdG8gdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBvcmlnaW4gYW5kIGhvdyB0aGUgY2FjaGUga2V5IGlzIGNhbGN1bGF0ZWQuYCxcbiAgICAgICAgICAgIGRlZmF1bHRUdGw6IER1cmF0aW9uLnNlY29uZHMoMCksXG4gICAgICAgICAgICBtaW5UdGw6IER1cmF0aW9uLnNlY29uZHMoMCksXG4gICAgICAgICAgICBtYXhUdGw6IER1cmF0aW9uLmRheXMoMzY1KSxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IHByb3BzLmFsbG93UXVlcnlQYXJhbXMgPyBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmFsbG93UXVlcnlQYXJhbXMpIDogKHByb3BzLmRlbnlRdWVyeVBhcmFtcyA/IENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvci5kZW55TGlzdCguLi5wcm9wcy5kZW55UXVlcnlQYXJhbXMpIDogQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbCgpKSxcbiAgICAgICAgICAgIGhlYWRlckJlaGF2aW9yOiBwcm9wcy5hbGxvd0hlYWRlcnMgPyBDYWNoZUhlYWRlckJlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5hbGxvd0hlYWRlcnMpIDogQ2FjaGVIZWFkZXJCZWhhdmlvci5ub25lKCksXG4gICAgICAgICAgICBjb29raWVCZWhhdmlvcjogcHJvcHMuYWxsb3dDb29raWVzID8gQ2FjaGVDb29raWVCZWhhdmlvci5hbGxvd0xpc3QoLi4ucHJvcHMuYWxsb3dDb29raWVzKSA6IENhY2hlQ29va2llQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdCcm90bGk6IHRydWUsXG4gICAgICAgICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0d6aXA6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIGluY29taW5nIHJlcXVlc3RzIGZvciB0aGUgc3RhdGljIGFzc2V0c1xuICAgICAqIHRvIHRoZSBTMyBidWNrZXQgdGhhdCBob2xkcyB0aGVzZSBzdGF0aWMgYXNzZXRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVN0YXRpY0Fzc2V0c1JvdXRlQmVoYXZpb3IoKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHN0YXRpY0Fzc2V0c0NhY2hlQ29uZmlnOiBCZWhhdmlvck9wdGlvbnMgPSB7XG4gICAgICAgICAgICBvcmlnaW46IG5ldyBTM09yaWdpbih0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldCwge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25BdHRlbXB0czogMixcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzKSxcbiAgICAgICAgICAgICAgICBvcmlnaW5BY2Nlc3NJZGVudGl0eTogdGhpcy5jZG5BY2Nlc3NJZGVudGl0eSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRCxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBydWxlczogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiA9IHt9O1xuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0Q29uZmlncy5mb3JFYWNoKGFzc2V0ID0+IHtcbiAgICAgICAgICAgIHJ1bGVzW2Ake2Fzc2V0LnRhcmdldH0ke2Fzc2V0LnBhdHRlcm59YF0gPSBzdGF0aWNBc3NldHNDYWNoZUNvbmZpZ1xuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBydWxlc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIGluY29taW5nIHJlcXVlc3RzIGZvciB0aGUgc2l0ZW1hcCBhc3NldHNcbiAgICAgKiB0byB0aGUgUzMgYnVja2V0IHRoYXQgaG9sZHMgdGhlc2Ugc2l0ZW1hcCBhc3NldHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlU2l0ZW1hcFJvdXRlQmVoYXZpb3IoKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGlmICghdGhpcy5zaXRlbWFwQnVja2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXRlbWFwIGJ1Y2tldCBtdXN0IGV4aXN0IGJlZm9yZSBjcmVhdGluZyBzaXRlbWFwIHJvdXRlIGJlaGF2aW9yLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpdGVtYXBDYWNoZUNvbmZpZzogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgb3JpZ2luOiBuZXcgUzNPcmlnaW4odGhpcy5zaXRlbWFwQnVja2V0LCB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbkF0dGVtcHRzOiAyLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMpLFxuICAgICAgICAgICAgICAgIG9yaWdpbkFjY2Vzc0lkZW50aXR5OiB0aGlzLmNkbkFjY2Vzc0lkZW50aXR5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgY2FjaGVkTWV0aG9kczogQ2FjaGVkTWV0aG9kcy5DQUNIRV9HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgY2FjaGVQb2xpY3k6IENhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICAgICAgcnVsZXNbJypzaXRlbWFwLnhtbCddID0gc2l0ZW1hcENhY2hlQ29uZmlnO1xuICAgICAgICBydWxlc1snKnNpdGVtYXAtZ29uZS54bWwnXSA9IHNpdGVtYXBDYWNoZUNvbmZpZztcbiAgICAgICAgcnVsZXNbJy9zaXRlbWFwcy8qJ10gPSBzaXRlbWFwQ2FjaGVDb25maWc7XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZHMgdGhlIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwIGFzIGRlZmluZWQgaW4ge0BzZWUgZ2V0TnV4dEFwcFN0YXRpY0Fzc2V0Q29uZmlnc30gdG8gdGhlIHN0YXRpYyBhc3NldHMgUzMgYnVja2V0LlxuICAgICAqIEluIG9yZGVyIHRvIGVuYWJsZSBhIHplcm8tZG93bnRpbWUgZGVwbG95bWVudCB3aXRoIG1pbmltYWwgc3RvcmFnZSBsb2FkLFxuICAgICAqIHdlIGRlcGxveSB0aGUgc3RhdGljIGFzc2V0cyBvZiBldmVyeSBkZXBsb3ltZW50IGludG8gdGhlIHNhbWUgZm9sZGVyIGJ1dCBtYXJrIHRoZW0gd2l0aCBhIGRlcGxveW1lbnQgcmV2aXNpb24uXG4gICAgICogQnkgZG9pbmcgc28sIHRoZSBmaWxlcyBvZiBwcmV2aW91cyBkZXBsb3ltZW50cyBhcmUgcmV0YWluZWQgdG8gYWxsb3cgY2xpZW50cyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggYW4gb2xkZXIgcmV2aXNpb25cbiAgICAgKiBidXQgZ2V0cyBjbGVhbmVkIHVwIGFmdGVyIGEgc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIHZpYSB0aGUgY2xlYW51cCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEZXBsb3ltZW50cygpOiBCdWNrZXREZXBsb3ltZW50W10ge1xuICAgICAgICAvLyBSZXR1cm5zIGEgZGVwbG95bWVudCBmb3IgZXZlcnkgY29uZmlndXJlZCBzdGF0aWMgYXNzZXQgdHlwZSB0byByZXNwZWN0IHRoZSBkaWZmZXJlbnQgY2FjaGUgc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGljQXNzZXRDb25maWdzLmZpbHRlcihhc3NldCA9PiBmcy5leGlzdHNTeW5jKGFzc2V0LnNvdXJjZSkpLm1hcCgoYXNzZXQsIGFzc2V0SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFzc2V0cy1kZXBsb3ltZW50LSR7YXNzZXRJbmRleH1gLCB7XG4gICAgICAgICAgICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldChhc3NldC5zb3VyY2UsIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZTogYXNzZXQuZXhjbHVkZSxcbiAgICAgICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IHRoaXMuc3RhdGljQXNzZXRzQnVja2V0LFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBhc3NldC50YXJnZXQucmVwbGFjZSgvXlxcLysvZywgJycpLCAvLyBSZW1vdmUgbGVhZGluZyBzbGFzaFxuICAgICAgICAgICAgICAgIHBydW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzdG9yYWdlQ2xhc3M6IFN0b3JhZ2VDbGFzcy5TVEFOREFSRCxcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbJyonXSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBbYXNzZXQucGF0dGVybl0sXG4gICAgICAgICAgICAgICAgY2FjaGVDb250cm9sOiBhc3NldC5jYWNoZUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGFzc2V0LmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbjogYXNzZXQuaW52YWxpZGF0ZU9uQ2hhbmdlID8gdGhpcy5jZG4gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uUGF0aHM6IGFzc2V0LmludmFsaWRhdGVPbkNoYW5nZSA/IFtgLyR7YXNzZXQucGF0dGVybn1gXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX0RBWSxcblxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGJ1aWxkIHJldmlzaW9uIG9uIGV2ZXJ5IGFzc2V0IHRvIGFsbG93IGNsZWFudXAgb2Ygb3V0ZGF0ZWQgYXNzZXRzXG4gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiB0aGlzLmRlcGxveW1lbnRSZXZpc2lvbixcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8gU29tZSBOdXh0IGFwcGxpY2F0aW9ucyBoYXZlIGEgbG90IG9mIGFzc2V0cyB0byBkZXBsb3kgd2hlcmVieSB0aGUgZnVuY3Rpb24gbWlnaHQgcnVuIG91dCBvZiBtZW1vcnkuXG4gICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBhIGhpZ2ggbWVtb3J5IGxpbWl0IG1pZ2h0IHNwZWVkIHVwIGRlcGxveW1lbnRzLlxuICAgICAgICAgICAgICAgIG1lbW9yeUxpbWl0OiAxNzkyXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyB0aGUgaG9zdGVkIHpvbmUgYXQgd2hpY2ggdGhlIEROUyByZWNvcmRzIHNoYWxsIGJlIGNyZWF0ZWQgdG8gYWNjZXNzIHRoZSBOdXh0IGFwcCBvbiB0aGUgaW50ZXJuZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZEhvc3RlZFpvbmUocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogSUhvc3RlZFpvbmUge1xuICAgICAgICBjb25zdCBkb21haW5QYXJ0cyA9IHByb3BzLmRvbWFpbi5zcGxpdCgnLicpO1xuXG4gICAgICAgIHJldHVybiBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWhvc3RlZC16b25lYCwge1xuICAgICAgICAgICAgaG9zdGVkWm9uZUlkOiBwcm9wcy5ob3N0ZWRab25lSWQsXG4gICAgICAgICAgICB6b25lTmFtZTogZG9tYWluUGFydHNbZG9tYWluUGFydHMubGVuZ3RoIC0gMV0sIC8vIFN1cHBvcnQgc3ViZG9tYWluc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBETlMgcmVjb3JkcyB0byBhY2Nlc3MgdGhlIE51eHQgYXBwIG9uIHRoZSBpbnRlcm5ldCB2aWEgdGhlIGN1c3RvbSBkb21haW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRG5zUmVjb3Jkcyhwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaG9zdGVkWm9uZSA9IHRoaXMuZmluZEhvc3RlZFpvbmUocHJvcHMpO1xuICAgICAgICBjb25zdCBkbnNUYXJnZXQgPSBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuY2RuKSk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgcmVjb3JkIGZvciBJUHY0XG4gICAgICAgIG5ldyBBUmVjb3JkKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0taXB2NC1yZWNvcmRgLCB7XG4gICAgICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5kb21haW4sXG4gICAgICAgICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgICAgICAgdGFyZ2V0OiBkbnNUYXJnZXQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlY29yZCBmb3IgSVB2NlxuICAgICAgICBuZXcgQWFhYVJlY29yZCh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWlwdjYtcmVjb3JkYCwge1xuICAgICAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluLFxuICAgICAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICAgIHRhcmdldDogZG5zVGFyZ2V0LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIHJ1bGUgdG8gcGluZyB0aGUgTnV4dCBhcHAgTGFtYmRhIGZ1bmN0aW9uIGV2ZXJ5IDUgbWludXRlcyBpbiBvcmRlciB0byBrZWVwIGl0IHdhcm1cbiAgICAgKiBhbmQgc3BlZWQgdXAgaW5pdGlhbCBTU1IgcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQXBwUGluZ1J1bGUocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZha2VBcGlHYXRld2F5RXZlbnREYXRhID0ge1xuICAgICAgICAgICAgXCJ2ZXJzaW9uXCI6IFwiMi4wXCIsXG4gICAgICAgICAgICBcInJvdXRlS2V5XCI6IFwiR0VUIC97cHJveHkrfVwiLFxuICAgICAgICAgICAgXCJyYXdQYXRoXCI6IFwiL1wiLFxuICAgICAgICAgICAgXCJyYXdRdWVyeVN0cmluZ1wiOiBcIlwiLFxuICAgICAgICAgICAgXCJoZWFkZXJzXCI6IHt9LFxuICAgICAgICAgICAgXCJyZXF1ZXN0Q29udGV4dFwiOiB7XG4gICAgICAgICAgICAgICAgXCJkb21haW5OYW1lXCI6IHByb3BzLmRvbWFpbixcbiAgICAgICAgICAgICAgICBcImh0dHBcIjoge1xuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhdGhcIjogXCIvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJIVFRQLzEuMVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG5ldyBSdWxlKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tcGluZ2VyLXJ1bGVgLCB7XG4gICAgICAgICAgICBydWxlTmFtZTogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1waW5nZXJgLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQaW5ncyB0aGUgTGFtYmRhIGZ1bmN0aW9uIG9mIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gYXBwIGV2ZXJ5IDUgbWludXRlcyB0byBrZWVwIGl0IHdhcm0uYCxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShEdXJhdGlvbi5taW51dGVzKDUpKSxcbiAgICAgICAgICAgIHRhcmdldHM6IFtuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy5hcHBMYW1iZGFGdW5jdGlvbiwge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBSdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdChmYWtlQXBpR2F0ZXdheUV2ZW50RGF0YSlcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIHJ1bGUgdGhhdCBydW5zIGV2ZXJ5IHR1ZXNkYXkgYXQgMDM6MzAgQU0gR01UIHRvIHRyaWdnZXJcbiAgICAgKiBvdXIgY2xlYW51cCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2xlYW51cFRyaWdnZXJSdWxlKCk6IHZvaWQge1xuICAgICAgICBuZXcgUnVsZSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXNjaGVkdWxlci1ydWxlYCwge1xuICAgICAgICAgICAgcnVsZU5hbWU6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tc2NoZWR1bGVyYCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVHJpZ2dlcnMgYSBjbGVhbnVwIG9mIHRoZSBvdXRkYXRlZCBzdGF0aWMgYXNzZXRzIGF0IHRoZSAke3RoaXMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWV9IFMzIGJ1Y2tldC5gLFxuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKHt3ZWVrRGF5OiAnMycsIGhvdXI6ICczJywgbWludXRlOiAnMzAnfSksXG4gICAgICAgICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMuY2xlYW51cExhbWJkYUZ1bmN0aW9uKV0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTMyBidWNrZXQgdG8gc3RvcmUgdGhlIGFjY2VzcyBsb2dzIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUFjY2Vzc0xvZ3NCdWNrZXQoKTogQnVja2V0IHtcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYWNjZXNzLWxvZ3NgO1xuICAgICAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIGJ1Y2tldE5hbWUsIHtcbiAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgb2JqZWN0T3duZXJzaGlwOiBPYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX1BSRUZFUlJFRCxcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIHN0YWNrIGlzIGRlc3Ryb3llZCwgd2UgZXhwZWN0IGV2ZXJ5dGhpbmcgdG8gYmUgZGVsZXRlZFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLmNkbkFjY2Vzc0lkZW50aXR5KTtcblxuICAgICAgICByZXR1cm4gYnVja2V0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQWNjZXNzTG9nc0FuYWx5c2lzKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXMge1xuICAgICAgICBpZiAoIXRoaXMuYWNjZXNzTG9nc0J1Y2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY2Nlc3MgYnVja2V0IG5vdCBzZXQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXModGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hY2Nlc3MtbG9ncy1hbmFseXNpc2AsIHtcbiAgICAgICAgICAgIGJ1Y2tldDogdGhpcy5hY2Nlc3NMb2dzQnVja2V0LFxuICAgICAgICAgICAgcmVzb3VyY2VQcmVmaXg6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYWNjZXNzLWxvZ3NgLFxuICAgICAgICAgICAgYWNjZXNzTG9nQ29va2llczogcHJvcHMuYWNjZXNzTG9nQ29va2llcyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
506
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnV4dFNlcnZlckFwcFN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTnV4dFNlcnZlckFwcFN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUEyRDtBQUUzRCwrRUFBK0Q7QUFDL0QsK0RBZ0JvQztBQUNwQyx1REFBb0c7QUFDcEcsK0NBTTRCO0FBQzVCLHlEQUFtRztBQUNuRyxxRUFBcUY7QUFDckYsK0VBQXdFO0FBQ3hFLHlFQUFpRTtBQUNqRSxpRkFBK0Q7QUFDL0QsbURBQW1EO0FBQ25ELHNHQUFtRjtBQUNuRiw0RUFBa0c7QUFDbEcsZ0VBQXVGO0FBQ3ZGLHlCQUF5QjtBQUN6Qix1REFBdUU7QUFDdkUsdUVBQThEO0FBQzlELDZCQUE2QjtBQUM3QiwyQkFBaUM7QUFFakMsdUdBQWtHO0FBRWxHOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxtQkFBSztJQXFGekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4Qjs7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqRixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSxrREFBNEIsRUFBQyxNQUFBLEtBQUssQ0FBQyxPQUFPLG1DQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFMUQsSUFBSSxLQUFL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TUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLDJEQUE0QixDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsdUJBQXVCLEVBQUU7WUFDM0YsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDN0IsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixjQUFjO1lBQ3RELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBM21CRCxnREEybUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2t9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7Q2VydGlmaWNhdGV9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQge1xuICAgIEFsbG93ZWRNZXRob2RzLFxuICAgIEJlaGF2aW9yT3B0aW9ucyxcbiAgICBDYWNoZUNvb2tpZUJlaGF2aW9yLFxuICAgIENhY2hlZE1ldGhvZHMsXG4gICAgQ2FjaGVIZWFkZXJCZWhhdmlvcixcbiAgICBDYWNoZVBvbGljeSxcbiAgICBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IsXG4gICAgRGlzdHJpYnV0aW9uLCBIdHRwVmVyc2lvbixcbiAgICBJQ2FjaGVQb2xpY3ksXG4gICAgSU9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICAgIE9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICAgIE9yaWdpblByb3RvY29sUG9saWN5LFxuICAgIFByaWNlQ2xhc3MsXG4gICAgU2VjdXJpdHlQb2xpY3lQcm90b2NvbCxcbiAgICBWaWV3ZXJQcm90b2NvbFBvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgTGF5ZXJWZXJzaW9uLCBSdW50aW1lLCBUcmFjaW5nfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja1B1YmxpY0FjY2VzcyxcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0QWNjZXNzQ29udHJvbCxcbiAgICBCdWNrZXRFbmNyeXB0aW9uLFxuICAgIE9iamVjdE93bmVyc2hpcFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0FhYWFSZWNvcmQsIEFSZWNvcmQsIEhvc3RlZFpvbmUsIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHtCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UsIFN0b3JhZ2VDbGFzc30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQge0h0dHBPcmlnaW4sIFMzT3JpZ2lufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiO1xuaW1wb3J0IHtDbG91ZEZyb250VGFyZ2V0fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHtIdHRwTWV0aG9kfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3NcIjtcbmltcG9ydCB7UmV0ZW50aW9uRGF5c30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQge0h0dHBMYW1iZGFJbnRlZ3JhdGlvbn0gZnJvbSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnMtYWxwaGEnO1xuaW1wb3J0IHtEb21haW5OYW1lLCBFbmRwb2ludFR5cGUsIEh0dHBBcGksIFNlY3VyaXR5UG9saWN5fSBmcm9tIFwiQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1hbHBoYVwiO1xuaW1wb3J0IHtnZXROdXh0QXBwU3RhdGljQXNzZXRDb25maWdzLCBTdGF0aWNBc3NldENvbmZpZ30gZnJvbSBcIi4uL051eHRBcHBTdGF0aWNBc3NldHNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHtSdWxlLCBSdWxlVGFyZ2V0SW5wdXQsIFNjaGVkdWxlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHtMYW1iZGFGdW5jdGlvbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHt3cml0ZUZpbGVTeW5jfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7TnV4dFNlcnZlckFwcFN0YWNrUHJvcHN9IGZyb20gXCIuL051eHRTZXJ2ZXJBcHBTdGFja1Byb3BzXCI7XG5pbXBvcnQge0Nsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXN9IGZyb20gXCIuLi9hY2Nlc3MtbG9ncy1hbmFseXNpcy9DbG91ZEZyb250QWNjZXNzTG9nc0FuYWx5c2lzXCI7XG5cbi8qKlxuICogQ0RLIHN0YWNrIHRvIGRlcGxveSBhIGR5bmFtaWMgTnV4dCBhcHAgKHRhcmdldD1zZXJ2ZXIpIG9uIEFXUyB3aXRoIExhbWJkYSwgQXBpR2F0ZXdheSwgUzMgYW5kIENsb3VkRnJvbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOdXh0U2VydmVyQXBwU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaWRlbnRpZmllciBwcmVmaXggb2YgdGhlIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZUlkUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgZGVwbG95bWVudCB0aGF0IGlzIHVzZWQgdG8gdGFnIHRoZSBzdGF0aWMgYXNzZXRzIG9mIHRoZSBkZXBsb3ltZW50XG4gICAgICogdG8gbGF0ZXIgYmUgYWJsZSB0byBjbGVhbiB1cCBvdXRkYXRlZCBhc3NldHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95bWVudFJldmlzaW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaWRlbnRpdHkgdG8gdXNlIGZvciBhY2Nlc3NpbmcgdGhlIGRlcGxveW1lbnQgYXNzZXRzIG9uIFMzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkbkFjY2Vzc0lkZW50aXR5OiBJT3JpZ2luQWNjZXNzSWRlbnRpdHk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBkZXBsb3ltZW50IGFzc2V0cyBnZXRzIHN0b3JlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljQXNzZXRzQnVja2V0OiBCdWNrZXQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBhY2Nlc3MgbG9ncyBvZiB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gZ2V0cyBzdG9yZWQuXG4gICAgICovXG4gICAgcHVibGljIGFjY2Vzc0xvZ3NCdWNrZXQ6IEJ1Y2tldHx1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBzaXRlbWFwIGFzc2V0cyBnZXRzIHN0b3JlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2l0ZW1hcEJ1Y2tldDogQnVja2V0fHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBOdXh0IGFwcCBvbiB0aGUgc2VydmVyIHNpZGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwTGFtYmRhRnVuY3Rpb246IEZ1bmN0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IGNsZWFudXBzIHRoZSBvdXRkYXRlZCBzdGF0aWMgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGVhbnVwTGFtYmRhRnVuY3Rpb246IEZ1bmN0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVGhlIEFQSSBnYXRld2F5IHRvIG1ha2UgdGhlIExhbWJkYSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIE51eHQgYXBwIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcGlHYXRld2F5OiBIdHRwQXBpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZ3MgZm9yIHRoZSBzdGF0aWMgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcCB0aGF0IHNoYWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldENvbmZpZ3M6IFN0YXRpY0Fzc2V0Q29uZmlnW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gb3JpZ2luIGZvciB0aGUgQVBJIGdhdGV3YXkgdG8gcm91dGUgaW5jb21pbmcgcmVxdWVzdHMgdG8gdGhlIE51eHQgTGFtYmRhIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgaHR0cE9yaWdpbjogSHR0cE9yaWdpbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjYWNoZSBwb2xpY3kgZm9yIHRoZSBOdXh0IGFwcCByb3V0ZSBiZWhhdmlvcnMgb2YgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwQ2FjaGVQb2xpY3k6IENhY2hlUG9saWN5O1xuXG4gICAgLyoqXG4gICAgICogVGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIGluY29taW5nIHJlcXVlc3RzIHRvIHRoZSBOdXh0IExhbWJkYSBmdW5jdGlvbiAodmlhIHRoZSBBUEkgZ2F0ZXdheSlcbiAgICAgKiBvciB0aGUgUzMgYXNzZXRzIGZvbGRlciAod2l0aCBjYWNoaW5nKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZG46IERpc3RyaWJ1dGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgICAgICB0aGlzLnJlc291cmNlSWRQcmVmaXggPSBgJHtwcm9wcy5wcm9qZWN0fS0ke3Byb3BzLnNlcnZpY2V9LSR7cHJvcHMuZW52aXJvbm1lbnR9YDtcblxuICAgICAgICAvLyBOdXh0IGFwcCByZXNvdXJjZXNcbiAgICAgICAgdGhpcy5kZXBsb3ltZW50UmV2aXNpb24gPSB0aGlzLmNyZWF0ZURlcGxveW1lbnRSZXZpc2lvbihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRDb25maWdzID0gZ2V0TnV4dEFwcFN0YXRpY0Fzc2V0Q29uZmlncyhwcm9wcy5yb290RGlyID8/ICcuJyk7XG4gICAgICAgIHRoaXMuY2RuQWNjZXNzSWRlbnRpdHkgPSB0aGlzLmNyZWF0ZUNkbkFjY2Vzc0lkZW50aXR5KCk7XG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRzQnVja2V0ID0gdGhpcy5jcmVhdGVTdGF0aWNBc3NldHNCdWNrZXQoKTtcblxuICAgICAgICBpZiAocHJvcHMuZW5hYmxlQWNjZXNzTG9nc0FuYWx5c2lzKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2Vzc0xvZ3NCdWNrZXQgPSB0aGlzLmNyZWF0ZUFjY2Vzc0xvZ3NCdWNrZXQoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQWNjZXNzTG9nc0FuYWx5c2lzKHByb3BzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5lbmFibGVTaXRlbWFwKSB7XG4gICAgICAgICAgICB0aGlzLnNpdGVtYXBCdWNrZXQgPSB0aGlzLmNyZWF0ZVNpdGVtYXBCdWNrZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwTGFtYmRhRnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUFwcExhbWJkYUZ1bmN0aW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5hcGlHYXRld2F5ID0gdGhpcy5jcmVhdGVBcGlHYXRld2F5KHByb3BzKTtcbiAgICAgICAgdGhpcy5odHRwT3JpZ2luID0gdGhpcy5jcmVhdGVOdXh0QXBwSHR0cE9yaWdpbigpO1xuICAgICAgICB0aGlzLmFwcENhY2hlUG9saWN5ID0gdGhpcy5jcmVhdGVOdXh0QXBwQ2FjaGVQb2xpY3kocHJvcHMpXG4gICAgICAgIHRoaXMuY2RuID0gdGhpcy5jcmVhdGVDbG91ZEZyb250RGlzdHJpYnV0aW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVEZXBsb3ltZW50cygpO1xuICAgICAgICB0aGlzLmNyZWF0ZURuc1JlY29yZHMocHJvcHMpO1xuICAgICAgICB0aGlzLmNyZWF0ZUFwcFBpbmdSdWxlKHByb3BzKTtcblxuICAgICAgICAvLyBTdGF0aWMgYXNzZXRzIGNsZWFudXAgcmVzb3VyY2VzXG4gICAgICAgIHRoaXMuY2xlYW51cExhbWJkYUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVDbGVhbnVwTGFtYmRhRnVuY3Rpb24ocHJvcHMpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNsZWFudXBUcmlnZ2VyUnVsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGN1cnJlbnQgZGVwbG95bWVudCByZXZpc2lvbiBmaWxlIGluIHRoZSBwdWJsaWMgZm9sZGVyIG9mIHRoZSBOdXh0IGFwcCB0byBiZSBhY2Nlc3NpYmxlXG4gICAgICogYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgcmV2aXNpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVEZXBsb3ltZW50UmV2aXNpb24ocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmV2aXNpb25GaWxlUGF0aCA9IGAke3Byb3BzLnJvb3REaXIgPz8gJy4nfS8ub3V0cHV0L3B1YmxpYy9hcHAtcmV2aXNpb25gO1xuICAgICAgICBjb25zdCBhcHBSZXZpc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgICAgICB3cml0ZUZpbGVTeW5jKHJldmlzaW9uRmlsZVBhdGgsIGFwcFJldmlzaW9uLCB7ZW5jb2Rpbmc6ICd1dGYtOCd9KTtcblxuICAgICAgICByZXR1cm4gYXBwUmV2aXNpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgaWRlbnRpdHkgdG8gYWNjZXNzIHRoZSBTMyBkZXBsb3ltZW50IGFzc2V0IGZpbGVzIHZpYSB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2RuQWNjZXNzSWRlbnRpdHkoKTogSU9yaWdpbkFjY2Vzc0lkZW50aXR5IHtcbiAgICAgICAgY29uc3Qgb3JpZ2luQWNjZXNzSWRlbnRpdHlOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jZG4tczMtYWNjZXNzYDtcbiAgICAgICAgcmV0dXJuIG5ldyBPcmlnaW5BY2Nlc3NJZGVudGl0eSh0aGlzLCBvcmlnaW5BY2Nlc3NJZGVudGl0eU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGJ1Y2tldCB0byBzdG9yZSB0aGUgc3RhdGljIGRlcGxveW1lbnQgYXNzZXQgZmlsZXMgb2YgdGhlIE51eHQgYXBwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVN0YXRpY0Fzc2V0c0J1Y2tldCgpOiBCdWNrZXQge1xuICAgICAgICBjb25zdCBidWNrZXROYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hc3NldHNgO1xuICAgICAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIGJ1Y2tldE5hbWUsIHtcbiAgICAgICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgICAgICBidWNrZXROYW1lLFxuICAgICAgICAgICAgLy8gVGhlIGJ1Y2tldCBhbmQgYWxsIG9mIGl0cyBvYmplY3RzIGNhbiBiZSBkZWxldGVkLCBiZWNhdXNlIGFsbCB0aGUgY29udGVudCBpcyBtYW5hZ2VkIGluIHRoaXMgcHJvamVjdFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBvYmplY3RPd25lcnNoaXA6IE9iamVjdE93bmVyc2hpcC5CVUNLRVRfT1dORVJfRU5GT1JDRUQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLmNkbkFjY2Vzc0lkZW50aXR5KTtcblxuICAgICAgICByZXR1cm4gYnVja2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGJ1Y2tldCB0byBzdG9yZSB0aGUgc2l0ZW1hcCBhc3NldHMgb2YgdGhlIE51eHQgYXBwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVNpdGVtYXBCdWNrZXQoKTogQnVja2V0IHtcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tc2l0ZW1hcGA7XG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBCdWNrZXQodGhpcywgYnVja2V0TmFtZSwge1xuICAgICAgICAgICAgYnVja2V0TmFtZSxcbiAgICAgICAgICAgIGFjY2Vzc0NvbnRyb2w6IEJ1Y2tldEFjY2Vzc0NvbnRyb2wuUFJJVkFURSxcbiAgICAgICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICAgICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgICAgICAgLy8gVGhlIGJ1Y2tldCBhbmQgYWxsIG9mIGl0cyBvYmplY3RzIGNhbiBiZSBkZWxldGVkLCBiZWNhdXNlIGFsbCB0aGUgY29udGVudCBpcyBtYW5hZ2VkIGluIHRoaXMgcHJvamVjdFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLmNkbkFjY2Vzc0lkZW50aXR5KTtcblxuICAgICAgICByZXR1cm4gYnVja2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIE51eHQgYXBwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUFwcExhbWJkYUZ1bmN0aW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY05hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFwcC1mdW5jdGlvbmA7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbih0aGlzLCBmdW5jTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUmVuZGVycyB0aGUgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9IE51eHQgYXBwLmAsXG4gICAgICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICAgICAgaGFuZGxlcjogYCR7cHJvcHMuZW50cnlwb2ludCA/PyAnaW5kZXgnfS5oYW5kbGVyYCxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGAke3Byb3BzLnJvb3REaXIgPz8gJy4nIH0vLm91dHB1dC9zZXJ2ZXJgLCB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZTogWycqKi5zdmcnLCAnKiouaWNvJywgJyoqLnBuZycsICcqKi5qcGcnLCAnKiouanMubWFwJ10sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSA/PyAxNzkyLFxuICAgICAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgICAgICAgIGFsbG93UHVibGljU3VibmV0OiBmYWxzZSxcbiAgICAgICAgICAgIHRyYWNpbmc6IHByb3BzLmVuYWJsZVRyYWNpbmcgPyBUcmFjaW5nLkFDVElWRSA6IFRyYWNpbmcuRElTQUJMRUQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIE5PREVfT1BUSU9OUzogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgICAgICAgICAgICAgICAuLi5KU09OLnBhcnNlKHByb3BzLmVudHJ5cG9pbnRFbnYgPz8gJ3t9JyksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBjbGVhbnVwcyB0aGUgb3V0ZGF0ZWQgc3RhdGljIGFzc2V0cyBvZiB0aGUgTnV4dCBhcHAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2xlYW51cExhbWJkYUZ1bmN0aW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lOiBzdHJpbmcgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNsZWFudXAtZnVuY3Rpb25gO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQXV0by1kZWxldGVzIHRoZSBvdXRkYXRlZCBzdGF0aWMgYXNzZXRzIGluIHRoZSAke3RoaXMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWV9IFMzIGJ1Y2tldC5gLFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgICAgIGxheWVyczogW25ldyBMYXllclZlcnNpb24odGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1sYXllcmAsIHtcbiAgICAgICAgICAgICAgICBsYXllclZlcnNpb25OYW1lOiBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWxheWVyYCxcbiAgICAgICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vZnVuY3Rpb25zL2Fzc2V0cy1jbGVhbnVwL2J1aWxkL2xheWVyJykpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW1J1bnRpbWUuTk9ERUpTXzE4X1hdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUHJvdmlkZXMgdGhlIG5vZGVfbW9kdWxlcyByZXF1aXJlZCBmb3IgdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBsYW1iZGEgZnVuY3Rpb24uYFxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hc3NldHMtY2xlYW51cC9idWlsZC9hcHAnKSksXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgU1RBVElDX0FTU0VUU19CVUNLRVQ6IHRoaXMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICAgICAgT1VUREFURURfQVNTRVRTX1JFVEVOVElPTl9EQVlTOiBgJHtwcm9wcy5vdXRkYXRlZEFzc2V0c1JldGVudGlvbkRheXMgPz8gMzB9YCxcbiAgICAgICAgICAgICAgICBFTlZJUk9OTUVOVDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBncmFudCBmdW5jdGlvbiBhY2Nlc3MgdG8gUzMgYnVja2V0XG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRzQnVja2V0LmdyYW50UmVhZChyZXN1bHQpO1xuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5ncmFudERlbGV0ZShyZXN1bHQpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgQVBJIGdhdGV3YXkgdG8gbWFrZSB0aGUgTnV4dCBhcHAgcmVuZGVyIExhbWJkYSBmdW5jdGlvbiBwdWJsaWNseSBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQXBpR2F0ZXdheShwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBIdHRwQXBpIHtcbiAgICAgICAgY29uc3QgYXBpTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYXBpYDtcbiAgICAgICAgY29uc3QgbGFtYmRhSW50ZWdyYXRpb24gPSBuZXcgSHR0cExhbWJkYUludGVncmF0aW9uKGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tbGFtYmRhLWludGVncmF0aW9uYCwgdGhpcy5hcHBMYW1iZGFGdW5jdGlvbik7XG5cbiAgICAgICAgLy8gV2Ugd2FudCB0aGUgQVBJIGdhdGV3YXkgdG8gYmUgYWNjZXNzaWJsZSBieSB0aGUgY3VzdG9tIGRvbWFpbiBuYW1lLlxuICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSBhY2Nlc3MgdGhlIGdhdGV3YXkgdmlhIENsb3VkRnJvbnQgKGZvciBhdXRvIGh0dHAgdG8gaHR0cHMgcmVkaXJlY3RzKSwgdGhpcyBpcyByZXF1aXJlZFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIHJlZGlyZWN0IHRoZSBvcmlnaW5hbCAnSG9zdCcgaGVhZGVyIHRvIHRoZSBOdXh0IGFwcGxpY2F0aW9uLCBpZiByZXF1ZXN0ZWQuXG4gICAgICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBuZXcgRG9tYWluTmFtZSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFwaS1kb21haW5gLCB7XG4gICAgICAgICAgICBkb21haW5OYW1lOiBwcm9wcy5kb21haW4sXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tcmVnaW9uYWwtY2VydGlmaWNhdGVgLCBwcm9wcy5yZWdpb25hbFRsc0NlcnRpZmljYXRlQXJuKSxcbiAgICAgICAgICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlLlJFR0lPTkFMLFxuICAgICAgICAgICAgc2VjdXJpdHlQb2xpY3k6IFNlY3VyaXR5UG9saWN5LlRMU18xXzJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYXBpR2F0ZXdheSA9IG5ldyBIdHRwQXBpKHRoaXMsIGFwaU5hbWUsIHtcbiAgICAgICAgICAgIGFwaU5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYENvbm5lY3RzIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gd2l0aCB0aGUgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9IExhbWJkYSBmdW5jdGlvbiB0byBtYWtlIGl0IHB1YmxpY2x5IGF2YWlsYWJsZS5gLFxuICAgICAgICAgICAgLy8gVGhlIGFwcCBkb2VzIG5vdCBhbGxvdyBhbnkgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBieSBwdXJwb3NlOiB0aGUgYXBwIHNob3VsZCBub3QgYmUgZW1iZWRkYWJsZSBhbnl3aGVyZVxuICAgICAgICAgICAgY29yc1ByZWZsaWdodDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVmYXVsdEludGVncmF0aW9uOiBsYW1iZGFJbnRlZ3JhdGlvbixcbiAgICAgICAgICAgIGRlZmF1bHREb21haW5NYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBhcGlHYXRld2F5LmFkZFJvdXRlcyh7XG4gICAgICAgICAgICBpbnRlZ3JhdGlvbjogbGFtYmRhSW50ZWdyYXRpb24sXG4gICAgICAgICAgICBwYXRoOiAnL3twcm94eSt9JyxcbiAgICAgICAgICAgIG1ldGhvZHM6IFtIdHRwTWV0aG9kLkdFVCwgSHR0cE1ldGhvZC5IRUFEXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFwaUdhdGV3YXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdGhhdCByb3V0ZXMgaW5jb21pbmcgcmVxdWVzdHMgdG8gdGhlIE51eHQgTGFtYmRhIGZ1bmN0aW9uICh2aWEgdGhlIEFQSSBnYXRld2F5KVxuICAgICAqIG9yIHRoZSBTMyBhc3NldHMgZm9sZGVyICh3aXRoIGNhY2hpbmcpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNsb3VkRnJvbnREaXN0cmlidXRpb24ocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogRGlzdHJpYnV0aW9uIHtcbiAgICAgICAgY29uc3QgY2RuTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2RuYDtcblxuICAgICAgICByZXR1cm4gbmV3IERpc3RyaWJ1dGlvbih0aGlzLCBjZG5OYW1lLCB7XG4gICAgICAgICAgICBkb21haW5OYW1lczogW3Byb3BzLmRvbWFpbl0sXG4gICAgICAgICAgICBjb21tZW50OiBjZG5OYW1lLFxuICAgICAgICAgICAgbWluaW11bVByb3RvY29sVmVyc2lvbjogU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDE4LFxuICAgICAgICAgICAgY2VydGlmaWNhdGU6IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybih0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWdsb2JhbC1jZXJ0aWZpY2F0ZWAsIHByb3BzLmdsb2JhbFRsc0NlcnRpZmljYXRlQXJuKSxcbiAgICAgICAgICAgIGh0dHBWZXJzaW9uOiBIdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgICAgICAgIGRlZmF1bHRCZWhhdmlvcjogdGhpcy5jcmVhdGVOdXh0QXBwUm91dGVCZWhhdmlvcigpLFxuICAgICAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczogdGhpcy5zZXR1cENsb3VkRnJvbnRSb3V0aW5nKHByb3BzKSxcbiAgICAgICAgICAgIHByaWNlQ2xhc3M6IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMTAwLCAvLyBVc2Ugb25seSBOb3J0aCBBbWVyaWNhIGFuZCBFdXJvcGVcbiAgICAgICAgICAgIGxvZ0J1Y2tldDogdGhpcy5hY2Nlc3NMb2dzQnVja2V0LFxuICAgICAgICAgICAgbG9nRmlsZVByZWZpeDogcHJvcHMuZW5hYmxlQWNjZXNzTG9nc0FuYWx5c2lzID8gQ2xvdWRGcm9udEFjY2Vzc0xvZ3NBbmFseXNpcy5nZXRMb2dGaWxlUHJlZml4KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBsb2dJbmNsdWRlc0Nvb2tpZXM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGJlaGF2aW9yIG9yaWdpbiB0byByb3V0ZSBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgTnV4dCByZW5kZXIgTGFtYmRhIGZ1bmN0aW9uICh2aWEgQVBJIGdhdGV3YXkpLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTnV4dEFwcEh0dHBPcmlnaW4oKTogSHR0cE9yaWdpbiB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cE9yaWdpbihgJHt0aGlzLmFwaUdhdGV3YXkuaHR0cEFwaUlkfS5leGVjdXRlLWFwaS4ke3RoaXMucmVnaW9ufS5hbWF6b25hd3MuY29tYCwge1xuICAgICAgICAgICAgY29ubmVjdGlvbkF0dGVtcHRzOiAyLFxuICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMiksXG4gICAgICAgICAgICByZWFkVGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgICAgICBwcm90b2NvbFBvbGljeTogT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUFNfT05MWSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGJlaGF2aW9yIGZvciB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gcm91dGUgaW5jb21pbmcgd2ViIHJlcXVlc3RzXG4gICAgICogdG8gdGhlIE51eHQgcmVuZGVyIExhbWJkYSBmdW5jdGlvbiAodmlhIEFQSSBnYXRld2F5KS5cbiAgICAgKiBBZGRpdGlvbmFsbHksIHRoaXMgYXV0b21hdGljYWxseSByZWRpcmVjdHMgSFRUUCByZXF1ZXN0cyB0byBIVFRQUy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZU51eHRBcHBSb3V0ZUJlaGF2aW9yKCk6IEJlaGF2aW9yT3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcmlnaW46IHRoaXMuaHR0cE9yaWdpbixcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRCxcbiAgICAgICAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2FjaGVQb2xpY3k6IHRoaXMuYXBwQ2FjaGVQb2xpY3lcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwQ2xvdWRGcm9udFJvdXRpbmcocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGxldCByb3V0aW5nQmVoYXZpb3VyczogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiA9IHt9O1xuXG4gICAgICAgIC8vIFNwZWNpZmljIG9uZXMgZmlyc3RcbiAgICAgICAgaWYgKHByb3BzLmVuYWJsZUFwaSkge1xuICAgICAgICAgICAgcm91dGluZ0JlaGF2aW91cnMgPSB7Li4ucm91dGluZ0JlaGF2aW91cnMsIC4uLnRoaXMuY3JlYXRlQXBpUm91dGVCZWhhdmlvcigpfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZW5hYmxlU2l0ZW1hcCkge1xuICAgICAgICAgICAgcm91dGluZ0JlaGF2aW91cnMgPSB7Li4ucm91dGluZ0JlaGF2aW91cnMsIC4uLnRoaXMuY3JlYXRlU2l0ZW1hcFJvdXRlQmVoYXZpb3IoKX07XG4gICAgICAgIH1cblxuICAgICAgICByb3V0aW5nQmVoYXZpb3VycyA9IHsuLi5yb3V0aW5nQmVoYXZpb3VycywgLi4udGhpcy5jcmVhdGVTdGF0aWNBc3NldHNSb3V0ZUJlaGF2aW9yKCl9O1xuXG4gICAgICAgIHJldHVybiByb3V0aW5nQmVoYXZpb3VycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2FjaGUgcG9saWN5IGZvciB0aGUgTnV4dCBhcHAgcm91dGUgYmVoYXZpb3Igb2YgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTnV4dEFwcENhY2hlUG9saWN5KHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IENhY2hlUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVBvbGljeSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNhY2hlLXBvbGljeWAsIHtcbiAgICAgICAgICAgIGNhY2hlUG9saWN5TmFtZTogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jZG4tY2FjaGUtcG9saWN5YCxcbiAgICAgICAgICAgIGNvbW1lbnQ6IGBEZWZpbmVzIHdoaWNoIHJlcXVlc3QgZGF0YSB0byBwYXNzIHRvIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gb3JpZ2luIGFuZCBob3cgdGhlIGNhY2hlIGtleSBpcyBjYWxjdWxhdGVkLmAsXG4gICAgICAgICAgICBkZWZhdWx0VHRsOiBEdXJhdGlvbi5zZWNvbmRzKDApLFxuICAgICAgICAgICAgbWluVHRsOiBEdXJhdGlvbi5zZWNvbmRzKDApLFxuICAgICAgICAgICAgbWF4VHRsOiBEdXJhdGlvbi5kYXlzKDM2NSksXG4gICAgICAgICAgICBxdWVyeVN0cmluZ0JlaGF2aW9yOiBwcm9wcy5hbGxvd1F1ZXJ5UGFyYW1zID8gQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5hbGxvd1F1ZXJ5UGFyYW1zKSA6IChwcm9wcy5kZW55UXVlcnlQYXJhbXMgPyBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuZGVueUxpc3QoLi4ucHJvcHMuZGVueVF1ZXJ5UGFyYW1zKSA6IENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvci5hbGwoKSksXG4gICAgICAgICAgICBoZWFkZXJCZWhhdmlvcjogcHJvcHMuYWxsb3dIZWFkZXJzID8gQ2FjaGVIZWFkZXJCZWhhdmlvci5hbGxvd0xpc3QoLi4ucHJvcHMuYWxsb3dIZWFkZXJzKSA6IENhY2hlSGVhZGVyQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgICAgICAgY29va2llQmVoYXZpb3I6IHByb3BzLmFsbG93Q29va2llcyA/IENhY2hlQ29va2llQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmFsbG93Q29va2llcykgOiBDYWNoZUNvb2tpZUJlaGF2aW9yLm5vbmUoKSxcbiAgICAgICAgICAgIGVuYWJsZUFjY2VwdEVuY29kaW5nQnJvdGxpOiB0cnVlLFxuICAgICAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdHemlwOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYmVoYXZpb3IgZm9yIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByb3V0ZSBtYXRjaGluZyBOdXh0IGFwcCBBUEkgcmVxdWVzdHMgdG8gdGhlIEFQSSBnYXRld2F5LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQXBpUm91dGVCZWhhdmlvcigpOiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+IHtcbiAgICAgICAgY29uc3QgYXBpQmVoYXZpb3I6IEJlaGF2aW9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG9yaWdpbjogdGhpcy5odHRwT3JpZ2luLFxuICAgICAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMLFxuICAgICAgICAgICAgY2FjaGVkTWV0aG9kczogQ2FjaGVkTWV0aG9kcy5DQUNIRV9HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgY2FjaGVQb2xpY3k6IHRoaXMuYXBwQ2FjaGVQb2xpY3ksXG4gICAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuSFRUUFNfT05MWVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+ID0ge307XG4gICAgICAgIHJ1bGVzWycvYXBpLyonXSA9IGFwaUJlaGF2aW9yO1xuXG4gICAgICAgIHJldHVybiBydWxlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYmVoYXZpb3IgZm9yIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByb3V0ZSBtYXRjaGluZyBpbmNvbWluZyByZXF1ZXN0cyBmb3IgdGhlIHN0YXRpYyBhc3NldHNcbiAgICAgKiB0byB0aGUgUzMgYnVja2V0IHRoYXQgaG9sZHMgdGhlc2Ugc3RhdGljIGFzc2V0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNBc3NldHNSb3V0ZUJlaGF2aW9yKCk6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCBzdGF0aWNBc3NldHNDYWNoZUNvbmZpZzogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgb3JpZ2luOiBuZXcgUzNPcmlnaW4odGhpcy5zdGF0aWNBc3NldHNCdWNrZXQsIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uQXR0ZW1wdHM6IDIsXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMyksXG4gICAgICAgICAgICAgICAgb3JpZ2luQWNjZXNzSWRlbnRpdHk6IHRoaXMuY2RuQWNjZXNzSWRlbnRpdHksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICAgICAgICBjYWNoZWRNZXRob2RzOiBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICAgICAgICBjYWNoZVBvbGljeTogQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRUQsXG4gICAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldENvbmZpZ3MuZm9yRWFjaChhc3NldCA9PiB7XG4gICAgICAgICAgICBydWxlc1tgJHthc3NldC50YXJnZXR9JHthc3NldC5wYXR0ZXJufWBdID0gc3RhdGljQXNzZXRzQ2FjaGVDb25maWdcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gcnVsZXNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYmVoYXZpb3IgZm9yIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByb3V0ZSBtYXRjaGluZyBpbmNvbWluZyByZXF1ZXN0cyBmb3IgdGhlIHNpdGVtYXAgYXNzZXRzXG4gICAgICogdG8gdGhlIFMzIGJ1Y2tldCB0aGF0IGhvbGRzIHRoZXNlIHNpdGVtYXAgYXNzZXRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVNpdGVtYXBSb3V0ZUJlaGF2aW9yKCk6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4ge1xuICAgICAgICBpZiAoIXRoaXMuc2l0ZW1hcEJ1Y2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2l0ZW1hcCBidWNrZXQgbXVzdCBleGlzdCBiZWZvcmUgY3JlYXRpbmcgc2l0ZW1hcCByb3V0ZSBiZWhhdmlvci5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaXRlbWFwQ2FjaGVDb25maWc6IEJlaGF2aW9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG9yaWdpbjogbmV3IFMzT3JpZ2luKHRoaXMuc2l0ZW1hcEJ1Y2tldCwge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25BdHRlbXB0czogMixcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzKSxcbiAgICAgICAgICAgICAgICBvcmlnaW5BY2Nlc3NJZGVudGl0eTogdGhpcy5jZG5BY2Nlc3NJZGVudGl0eSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRCxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQU1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+ID0ge307XG4gICAgICAgIHJ1bGVzWycqc2l0ZW1hcC54bWwnXSA9IHNpdGVtYXBDYWNoZUNvbmZpZztcbiAgICAgICAgcnVsZXNbJypzaXRlbWFwLWdvbmUueG1sJ10gPSBzaXRlbWFwQ2FjaGVDb25maWc7XG4gICAgICAgIHJ1bGVzWycvc2l0ZW1hcHMvKiddID0gc2l0ZW1hcENhY2hlQ29uZmlnO1xuXG4gICAgICAgIHJldHVybiBydWxlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGxvYWRzIHRoZSBzdGF0aWMgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcCBhcyBkZWZpbmVkIGluIHtAc2VlIGdldE51eHRBcHBTdGF0aWNBc3NldENvbmZpZ3N9IHRvIHRoZSBzdGF0aWMgYXNzZXRzIFMzIGJ1Y2tldC5cbiAgICAgKiBJbiBvcmRlciB0byBlbmFibGUgYSB6ZXJvLWRvd250aW1lIGRlcGxveW1lbnQgd2l0aCBtaW5pbWFsIHN0b3JhZ2UgbG9hZCxcbiAgICAgKiB3ZSBkZXBsb3kgdGhlIHN0YXRpYyBhc3NldHMgb2YgZXZlcnkgZGVwbG95bWVudCBpbnRvIHRoZSBzYW1lIGZvbGRlciBidXQgbWFyayB0aGVtIHdpdGggYSBkZXBsb3ltZW50IHJldmlzaW9uLlxuICAgICAqIEJ5IGRvaW5nIHNvLCB0aGUgZmlsZXMgb2YgcHJldmlvdXMgZGVwbG95bWVudHMgYXJlIHJldGFpbmVkIHRvIGFsbG93IGNsaWVudHMgdG8gY29udGludWUgdG8gd29yayB3aXRoIGFuIG9sZGVyIHJldmlzaW9uXG4gICAgICogYnV0IGdldHMgY2xlYW5lZCB1cCBhZnRlciBhIHNwZWNpZmllZCBwZXJpb2Qgb2YgdGltZSB2aWEgdGhlIGNsZWFudXAgTGFtYmRhIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY29uZmlndXJlRGVwbG95bWVudHMoKTogQnVja2V0RGVwbG95bWVudFtdIHtcbiAgICAgICAgLy8gUmV0dXJucyBhIGRlcGxveW1lbnQgZm9yIGV2ZXJ5IGNvbmZpZ3VyZWQgc3RhdGljIGFzc2V0IHR5cGUgdG8gcmVzcGVjdCB0aGUgZGlmZmVyZW50IGNhY2hlIHNldHRpbmdzXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRpY0Fzc2V0Q29uZmlncy5maWx0ZXIoYXNzZXQgPT4gZnMuZXhpc3RzU3luYyhhc3NldC5zb3VyY2UpKS5tYXAoKGFzc2V0LCBhc3NldEluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hc3NldHMtZGVwbG95bWVudC0ke2Fzc2V0SW5kZXh9YCwge1xuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFtTb3VyY2UuYXNzZXQoYXNzZXQuc291cmNlLCB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IGFzc2V0LmV4Y2x1ZGUsXG4gICAgICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldCxcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogYXNzZXQudGFyZ2V0LnJlcGxhY2UoL15cXC8rL2csICcnKSwgLy8gUmVtb3ZlIGxlYWRpbmcgc2xhc2hcbiAgICAgICAgICAgICAgICBwcnVuZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc3RvcmFnZUNsYXNzOiBTdG9yYWdlQ2xhc3MuU1RBTkRBUkQsXG4gICAgICAgICAgICAgICAgZXhjbHVkZTogWycqJ10sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogW2Fzc2V0LnBhdHRlcm5dLFxuICAgICAgICAgICAgICAgIGNhY2hlQ29udHJvbDogYXNzZXQuY2FjaGVDb250cm9sLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBhc3NldC5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBkaXN0cmlidXRpb246IGFzc2V0LmludmFsaWRhdGVPbkNoYW5nZSA/IHRoaXMuY2RuIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvblBhdGhzOiBhc3NldC5pbnZhbGlkYXRlT25DaGFuZ2UgPyBbYC8ke2Fzc2V0LnBhdHRlcm59YF0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9EQVksXG5cbiAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBidWlsZCByZXZpc2lvbiBvbiBldmVyeSBhc3NldCB0byBhbGxvdyBjbGVhbnVwIG9mIG91dGRhdGVkIGFzc2V0c1xuICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogdGhpcy5kZXBsb3ltZW50UmV2aXNpb24sXG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIC8vIFNvbWUgTnV4dCBhcHBsaWNhdGlvbnMgaGF2ZSBhIGxvdCBvZiBhc3NldHMgdG8gZGVwbG95IHdoZXJlYnkgdGhlIGZ1bmN0aW9uIG1pZ2h0IHJ1biBvdXQgb2YgbWVtb3J5LlxuICAgICAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgYSBoaWdoIG1lbW9yeSBsaW1pdCBtaWdodCBzcGVlZCB1cCBkZXBsb3ltZW50cy5cbiAgICAgICAgICAgICAgICBtZW1vcnlMaW1pdDogMTc5MlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgdGhlIGhvc3RlZCB6b25lIGF0IHdoaWNoIHRoZSBETlMgcmVjb3JkcyBzaGFsbCBiZSBjcmVhdGVkIHRvIGFjY2VzcyB0aGUgTnV4dCBhcHAgb24gdGhlIGludGVybmV0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbmRIb3N0ZWRab25lKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IElIb3N0ZWRab25lIHtcbiAgICAgICAgY29uc3QgZG9tYWluUGFydHMgPSBwcm9wcy5kb21haW4uc3BsaXQoJy4nKTtcblxuICAgICAgICByZXR1cm4gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXModGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1ob3N0ZWQtem9uZWAsIHtcbiAgICAgICAgICAgIGhvc3RlZFpvbmVJZDogcHJvcHMuaG9zdGVkWm9uZUlkLFxuICAgICAgICAgICAgem9uZU5hbWU6IGRvbWFpblBhcnRzW2RvbWFpblBhcnRzLmxlbmd0aCAtIDFdLCAvLyBTdXBwb3J0IHN1YmRvbWFpbnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgRE5TIHJlY29yZHMgdG8gYWNjZXNzIHRoZSBOdXh0IGFwcCBvbiB0aGUgaW50ZXJuZXQgdmlhIHRoZSBjdXN0b20gZG9tYWluLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZURuc1JlY29yZHMocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhvc3RlZFpvbmUgPSB0aGlzLmZpbmRIb3N0ZWRab25lKHByb3BzKTtcbiAgICAgICAgY29uc3QgZG5zVGFyZ2V0ID0gUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgQ2xvdWRGcm9udFRhcmdldCh0aGlzLmNkbikpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlY29yZCBmb3IgSVB2NFxuICAgICAgICBuZXcgQVJlY29yZCh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWlwdjQtcmVjb3JkYCwge1xuICAgICAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluLFxuICAgICAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICAgIHRhcmdldDogZG5zVGFyZ2V0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDcmVhdGUgYSByZWNvcmQgZm9yIElQdjZcbiAgICAgICAgbmV3IEFhYWFSZWNvcmQodGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1pcHY2LXJlY29yZGAsIHtcbiAgICAgICAgICAgIHJlY29yZE5hbWU6IHByb3BzLmRvbWFpbixcbiAgICAgICAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICAgICAgICB0YXJnZXQ6IGRuc1RhcmdldCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNjaGVkdWxlZCBydWxlIHRvIHBpbmcgdGhlIE51eHQgYXBwIExhbWJkYSBmdW5jdGlvbiBldmVyeSA1IG1pbnV0ZXMgaW4gb3JkZXIgdG8ga2VlcCBpdCB3YXJtXG4gICAgICogYW5kIHNwZWVkIHVwIGluaXRpYWwgU1NSIHJlcXVlc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUFwcFBpbmdSdWxlKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmYWtlQXBpR2F0ZXdheUV2ZW50RGF0YSA9IHtcbiAgICAgICAgICAgIFwidmVyc2lvblwiOiBcIjIuMFwiLFxuICAgICAgICAgICAgXCJyb3V0ZUtleVwiOiBcIkdFVCAve3Byb3h5K31cIixcbiAgICAgICAgICAgIFwicmF3UGF0aFwiOiBcIi9cIixcbiAgICAgICAgICAgIFwicmF3UXVlcnlTdHJpbmdcIjogXCJcIixcbiAgICAgICAgICAgIFwiaGVhZGVyc1wiOiB7fSxcbiAgICAgICAgICAgIFwicmVxdWVzdENvbnRleHRcIjoge1xuICAgICAgICAgICAgICAgIFwiZG9tYWluTmFtZVwiOiBwcm9wcy5kb21haW4sXG4gICAgICAgICAgICAgICAgXCJodHRwXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRob2RcIjogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCI6IFwiL1wiLFxuICAgICAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiSFRUUC8xLjFcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBuZXcgUnVsZSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXBpbmdlci1ydWxlYCwge1xuICAgICAgICAgICAgcnVsZU5hbWU6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tcGluZ2VyYCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUGluZ3MgdGhlIExhbWJkYSBmdW5jdGlvbiBvZiB0aGUgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9IGFwcCBldmVyeSA1IG1pbnV0ZXMgdG8ga2VlcCBpdCB3YXJtLmAsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLnJhdGUoRHVyYXRpb24ubWludXRlcyg1KSksXG4gICAgICAgICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMuYXBwTGFtYmRhRnVuY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBldmVudDogUnVsZVRhcmdldElucHV0LmZyb21PYmplY3QoZmFrZUFwaUdhdGV3YXlFdmVudERhdGEpXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNjaGVkdWxlZCBydWxlIHRoYXQgcnVucyBldmVyeSB0dWVzZGF5IGF0IDAzOjMwIEFNIEdNVCB0byB0cmlnZ2VyXG4gICAgICogb3VyIGNsZWFudXAgTGFtYmRhIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNsZWFudXBUcmlnZ2VyUnVsZSgpOiB2b2lkIHtcbiAgICAgICAgbmV3IFJ1bGUodGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1zY2hlZHVsZXItcnVsZWAsIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lOiBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXNjaGVkdWxlcmAsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFRyaWdnZXJzIGEgY2xlYW51cCBvZiB0aGUgb3V0ZGF0ZWQgc3RhdGljIGFzc2V0cyBhdCB0aGUgJHt0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lfSBTMyBidWNrZXQuYCxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuY3Jvbih7d2Vla0RheTogJzMnLCBob3VyOiAnMycsIG1pbnV0ZTogJzMwJ30pLFxuICAgICAgICAgICAgdGFyZ2V0czogW25ldyBMYW1iZGFGdW5jdGlvbih0aGlzLmNsZWFudXBMYW1iZGFGdW5jdGlvbildLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgUzMgYnVja2V0IHRvIHN0b3JlIHRoZSBhY2Nlc3MgbG9ncyBvZiB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVBY2Nlc3NMb2dzQnVja2V0KCk6IEJ1Y2tldCB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldE5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFjY2Vzcy1sb2dzYDtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCBidWNrZXROYW1lLCB7XG4gICAgICAgICAgICBidWNrZXROYW1lLFxuICAgICAgICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IEJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgICAgICAgIG9iamVjdE93bmVyc2hpcDogT2JqZWN0T3duZXJzaGlwLkJVQ0tFVF9PV05FUl9QUkVGRVJSRUQsXG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBzdGFjayBpcyBkZXN0cm95ZWQsIHdlIGV4cGVjdCBldmVyeXRoaW5nIHRvIGJlIGRlbGV0ZWRcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5jZG5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAgICAgcmV0dXJuIGJ1Y2tldDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUFjY2Vzc0xvZ3NBbmFseXNpcyhwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBDbG91ZEZyb250QWNjZXNzTG9nc0FuYWx5c2lzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2Vzc0xvZ3NCdWNrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQWNjZXNzIGJ1Y2tldCBub3Qgc2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDbG91ZEZyb250QWNjZXNzTG9nc0FuYWx5c2lzKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYWNjZXNzLWxvZ3MtYW5hbHlzaXNgLCB7XG4gICAgICAgICAgICBidWNrZXQ6IHRoaXMuYWNjZXNzTG9nc0J1Y2tldCxcbiAgICAgICAgICAgIHJlc291cmNlUHJlZml4OiBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFjY2Vzcy1sb2dzYCxcbiAgICAgICAgICAgIGFjY2Vzc0xvZ0Nvb2tpZXM6IHByb3BzLmFjY2Vzc0xvZ0Nvb2tpZXMsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -113,6 +113,16 @@ export class NuxtServerAppStack extends Stack {
|
|
|
113
113
|
*/
|
|
114
114
|
private staticAssetConfigs: StaticAssetConfig[];
|
|
115
115
|
|
|
116
|
+
/**
|
|
117
|
+
* The CloudFront distribution origin for the API gateway to route incoming requests to the Nuxt Lambda function.
|
|
118
|
+
*/
|
|
119
|
+
private httpOrigin: HttpOrigin;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The cache policy for the Nuxt app route behaviors of the CloudFront distribution.
|
|
123
|
+
*/
|
|
124
|
+
private appCachePolicy: CachePolicy;
|
|
125
|
+
|
|
116
126
|
/**
|
|
117
127
|
* The CloudFront distribution to route incoming requests to the Nuxt Lambda function (via the API gateway)
|
|
118
128
|
* or the S3 assets folder (with caching).
|
|
@@ -143,6 +153,8 @@ export class NuxtServerAppStack extends Stack {
|
|
|
143
153
|
|
|
144
154
|
this.appLambdaFunction = this.createAppLambdaFunction(props);
|
|
145
155
|
this.apiGateway = this.createApiGateway(props);
|
|
156
|
+
this.httpOrigin = this.createNuxtAppHttpOrigin();
|
|
157
|
+
this.appCachePolicy = this.createNuxtAppCachePolicy(props)
|
|
146
158
|
this.cdn = this.createCloudFrontDistribution(props);
|
|
147
159
|
this.configureDeployments();
|
|
148
160
|
this.createDnsRecords(props);
|
|
@@ -345,7 +357,7 @@ export class NuxtServerAppStack extends Stack {
|
|
|
345
357
|
minimumProtocolVersion: SecurityPolicyProtocol.TLS_V1_2_2018,
|
|
346
358
|
certificate: Certificate.fromCertificateArn(this, `${this.resourceIdPrefix}-global-certificate`, props.globalTlsCertificateArn),
|
|
347
359
|
httpVersion: HttpVersion.HTTP2_AND_3,
|
|
348
|
-
defaultBehavior: this.createNuxtAppRouteBehavior(
|
|
360
|
+
defaultBehavior: this.createNuxtAppRouteBehavior(),
|
|
349
361
|
additionalBehaviors: this.setupCloudFrontRouting(props),
|
|
350
362
|
priceClass: PriceClass.PRICE_CLASS_100, // Use only North America and Europe
|
|
351
363
|
logBucket: this.accessLogsBucket,
|
|
@@ -355,24 +367,30 @@ export class NuxtServerAppStack extends Stack {
|
|
|
355
367
|
}
|
|
356
368
|
|
|
357
369
|
/**
|
|
358
|
-
* Creates
|
|
370
|
+
* Creates the CloudFront distribution behavior origin to route incoming requests to the Nuxt render Lambda function (via API gateway).
|
|
371
|
+
*/
|
|
372
|
+
private createNuxtAppHttpOrigin(): HttpOrigin {
|
|
373
|
+
return new HttpOrigin(`${this.apiGateway.httpApiId}.execute-api.${this.region}.amazonaws.com`, {
|
|
374
|
+
connectionAttempts: 2,
|
|
375
|
+
connectionTimeout: Duration.seconds(2),
|
|
376
|
+
readTimeout: Duration.seconds(10),
|
|
377
|
+
protocolPolicy: OriginProtocolPolicy.HTTPS_ONLY,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Creates a behavior for the CloudFront distribution to route incoming web requests
|
|
383
|
+
* to the Nuxt render Lambda function (via API gateway).
|
|
359
384
|
* Additionally, this automatically redirects HTTP requests to HTTPS.
|
|
360
|
-
*
|
|
361
|
-
* @private
|
|
362
385
|
*/
|
|
363
|
-
private createNuxtAppRouteBehavior(
|
|
386
|
+
private createNuxtAppRouteBehavior(): BehaviorOptions {
|
|
364
387
|
return {
|
|
365
|
-
origin:
|
|
366
|
-
connectionAttempts: 2,
|
|
367
|
-
connectionTimeout: Duration.seconds(2),
|
|
368
|
-
readTimeout: Duration.seconds(10),
|
|
369
|
-
protocolPolicy: OriginProtocolPolicy.HTTPS_ONLY,
|
|
370
|
-
}),
|
|
388
|
+
origin: this.httpOrigin,
|
|
371
389
|
allowedMethods: AllowedMethods.ALLOW_GET_HEAD,
|
|
372
390
|
compress: true,
|
|
373
391
|
viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
374
392
|
originRequestPolicy: undefined,
|
|
375
|
-
cachePolicy: this.
|
|
393
|
+
cachePolicy: this.appCachePolicy
|
|
376
394
|
};
|
|
377
395
|
}
|
|
378
396
|
|
|
@@ -380,6 +398,9 @@ export class NuxtServerAppStack extends Stack {
|
|
|
380
398
|
let routingBehaviours: Record<string, BehaviorOptions> = {};
|
|
381
399
|
|
|
382
400
|
// Specific ones first
|
|
401
|
+
if (props.enableApi) {
|
|
402
|
+
routingBehaviours = {...routingBehaviours, ...this.createApiRouteBehavior()};
|
|
403
|
+
}
|
|
383
404
|
if (props.enableSitemap) {
|
|
384
405
|
routingBehaviours = {...routingBehaviours, ...this.createSitemapRouteBehavior()};
|
|
385
406
|
}
|
|
@@ -391,11 +412,8 @@ export class NuxtServerAppStack extends Stack {
|
|
|
391
412
|
|
|
392
413
|
/**
|
|
393
414
|
* Creates a cache policy for the Nuxt app route behavior of the CloudFront distribution.
|
|
394
|
-
* Even though we don't want to cache SSR requests, we still have to create this cache policy in order to
|
|
395
|
-
* forward required cookies, query params and headers. This doesn't make any sense, because if nothing
|
|
396
|
-
* is cached, one would expect, that anything would/could be forwarded, but anyway...
|
|
397
415
|
*/
|
|
398
|
-
private
|
|
416
|
+
private createNuxtAppCachePolicy(props: NuxtServerAppStackProps): CachePolicy {
|
|
399
417
|
return new CachePolicy(this, `${this.resourceIdPrefix}-cache-policy`, {
|
|
400
418
|
cachePolicyName: `${this.resourceIdPrefix}-cdn-cache-policy`,
|
|
401
419
|
comment: `Defines which request data to pass to the ${this.resourceIdPrefix} origin and how the cache key is calculated.`,
|
|
@@ -410,6 +428,25 @@ export class NuxtServerAppStack extends Stack {
|
|
|
410
428
|
});
|
|
411
429
|
}
|
|
412
430
|
|
|
431
|
+
/**
|
|
432
|
+
* Creates a behavior for the CloudFront distribution to route matching Nuxt app API requests to the API gateway.
|
|
433
|
+
*/
|
|
434
|
+
private createApiRouteBehavior(): Record<string, BehaviorOptions> {
|
|
435
|
+
const apiBehavior: BehaviorOptions = {
|
|
436
|
+
origin: this.httpOrigin,
|
|
437
|
+
compress: true,
|
|
438
|
+
allowedMethods: AllowedMethods.ALLOW_ALL,
|
|
439
|
+
cachedMethods: CachedMethods.CACHE_GET_HEAD_OPTIONS,
|
|
440
|
+
cachePolicy: this.appCachePolicy,
|
|
441
|
+
viewerProtocolPolicy: ViewerProtocolPolicy.HTTPS_ONLY
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
const rules: Record<string, BehaviorOptions> = {};
|
|
445
|
+
rules['/api/*'] = apiBehavior;
|
|
446
|
+
|
|
447
|
+
return rules;
|
|
448
|
+
}
|
|
449
|
+
|
|
413
450
|
/**
|
|
414
451
|
* Creates a behavior for the CloudFront distribution to route matching incoming requests for the static assets
|
|
415
452
|
* to the S3 bucket that holds these static assets.
|
|
@@ -31,6 +31,11 @@ export interface NuxtServerAppStackProps extends NuxtAppStackProps {
|
|
|
31
31
|
* Whether to enable a global Sitemap bucket which is permanently accessible through multiple deployments.
|
|
32
32
|
*/
|
|
33
33
|
readonly enableSitemap?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Whether to enable (HTTPS only) API access to the Nuxt app via the `/api` path which support all HTTP methods.
|
|
36
|
+
* See https://nuxt.com/docs/guide/directory-structure/server#recipes for details.
|
|
37
|
+
*/
|
|
38
|
+
readonly enableApi?: boolean;
|
|
34
39
|
/**
|
|
35
40
|
* Whether to enable reporting of CloudFront access logs via Athena.
|
|
36
41
|
*/
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJOdXh0U2VydmVyQXBwU3RhY2tQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOdXh0QXBwU3RhY2tQcm9wc30gZnJvbSBcIi4uL051eHRBcHBTdGFja1Byb3BzXCI7XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcHJvcHMgcmVxdWlyZWQgZm9yIHRoZSB7QHNlZSBOdXh0U2VydmVyQXBwU3RhY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzIGV4dGVuZHMgTnV4dEFwcFN0YWNrUHJvcHMge1xuXG4gICAgLyoqXG4gICAgICogVGhlIEFSTiBvZiB0aGUgY2VydGlmaWNhdGUgdG8gdXNlIGF0IHRoZSBBcGlHYXRld2F5IGZvciB0aGUgTnV4dCBhcHAgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIHZpYSB0aGUgY3VzdG9tIGRvbWFpblxuICAgICAqIGFuZCB0byBwcm92aWRlIHRoZSBjdXN0b20gZG9tYWluIHRvIHRoZSBOdXh0IGFwcCB2aWEgdGhlICdIb3N0JyBoZWFkZXIgZm9yIHNlcnZlciBzaWRlIHJlbmRlcmluZyB1c2UgY2FzZXMuXG4gICAgICogVGhlIGNlcnRpZmljYXRlIG11c3QgYmUgaXNzdWVkIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyBzcGVjaWZpZWQgdmlhICdlbnYucmVnaW9uJyBhcyBBcGlHYXRld2F5IHdvcmtzIHJlZ2lvbmFsbHkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmVnaW9uYWxUbHNDZXJ0aWZpY2F0ZUFybjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZpbGUgbmFtZSAod2l0aG91dCBleHRlbnNpb24pIG9mIHRoZSBMYW1iZGEgZW50cnlwb2ludCB3aXRoaW4gdGhlICdzZXJ2ZXInIGRpcmVjdG9yeSBleHBvcnRpbmcgYSBoYW5kbGVyLlxuICAgICAqIERlZmF1bHRzIHRvIFwiaW5kZXhcIi5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbnRyeXBvaW50Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBKU09OIHNlcmlhbGl6ZWQgc3RyaW5nIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW50cnlwb2ludEVudj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBtZW1vcnkgc2l6ZSB0byBhcHBseSB0byB0aGUgTnV4dCBhcHAncyBMYW1iZGEuXG4gICAgICogRGVmYXVsdHMgdG8gMTc5Mk1CIChvcHRpbWl6ZWQgZm9yIGNvc3RzIGFuZCBwZXJmb3JtYW5jZSBmb3Igc3RhbmRhcmQgTnV4dCBhcHBzKS5cbiAgICAgKi9cbiAgICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBlbmFibGUgQVdTIFgtUmF5IGZvciB0aGUgTnV4dCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlVHJhY2luZz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBhIGdsb2JhbCBTaXRlbWFwIGJ1Y2tldCB3aGljaCBpcyBwZXJtYW5lbnRseSBhY2Nlc3NpYmxlIHRocm91Z2ggbXVsdGlwbGUgZGVwbG95bWVudHMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlU2l0ZW1hcD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSAoSFRUUFMgb25seSkgQVBJIGFjY2VzcyB0byB0aGUgTnV4dCBhcHAgdmlhIHRoZSBgL2FwaWAgcGF0aCB3aGljaCBzdXBwb3J0IGFsbCBIVFRQIG1ldGhvZHMuXG4gICAgICogU2VlIGh0dHBzOi8vbnV4dC5jb20vZG9jcy9ndWlkZS9kaXJlY3Rvcnktc3RydWN0dXJlL3NlcnZlciNyZWNpcGVzIGZvciBkZXRhaWxzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuYWJsZUFwaT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSByZXBvcnRpbmcgb2YgQ2xvdWRGcm9udCBhY2Nlc3MgbG9ncyB2aWEgQXRoZW5hLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVuYWJsZUFjY2Vzc0xvZ3NBbmFseXNpcz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBjb29raWUgbmFtZXMgdG8gaW5jbHVkZSBpbiB0aGUgYWNjZXNzIGxvZ3MgKHdoaXRlbGlzdCkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgYWNjZXNzTG9nQ29va2llcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBkYXlzIHRvIHJldGFpbiBzdGF0aWMgYXNzZXRzIG9mIG91dGRhdGVkIGRlcGxveW1lbnRzIGluIHRoZSBTMyBidWNrZXQuXG4gICAgICogVXNlZnVsIHRvIGFsbG93IHVzZXJzIHRvIHN0aWxsIGFjY2VzcyBvbGQgYXNzZXRzIGFmdGVyIGEgbmV3IGRlcGxveW1lbnQgd2hlbiB0aGV5IGFyZSBzdGlsbCBicm93c2luZyBvbiBhbiBvbGQgdmVyc2lvbi5cbiAgICAgKiBEZWZhdWx0cyB0byAzMCBkYXlzLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG91dGRhdGVkQXNzZXRzUmV0ZW50aW9uRGF5cz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGhlYWRlcnMgdG8gcGFzcyB0byB0aGUgTnV4dCBhcHAgb24gU1NSIHJlcXVlc3RzLlxuICAgICAqIFRoZSBtb3JlIGhlYWRlcnMgYXJlIHBhc3NlZCwgdGhlIHdlYWtlciB0aGUgY2FjaGUgcGVyZm9ybWFuY2Ugd2lsbCBiZSwgYXMgdGhlIGNhY2hlIGtleVxuICAgICAqIGlzIGJhc2VkIG9uIHRoZSBoZWFkZXJzLlxuICAgICAqIE5vIGhlYWRlcnMgYXJlIHBhc3NlZCBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93SGVhZGVycz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29va2llcyB0byBwYXNzIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogVGhlIG1vcmUgY29va2llcyBhcmUgcGFzc2VkLCB0aGUgd2Vha2VyIHRoZSBjYWNoZSBwZXJmb3JtYW5jZSB3aWxsIGJlLCBhcyB0aGUgY2FjaGUga2V5XG4gICAgICogaXMgYmFzZWQgb24gdGhlIGNvb2tpZXMuXG4gICAgICogTm8gY29va2llcyBhcmUgcGFzc2VkIGJ5IGRlZmF1bHQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgYWxsb3dDb29raWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBxdWVyeSBwYXJhbSBrZXlzIHRvIHBhc3MgdG8gdGhlIE51eHQgYXBwIG9uIFNTUiByZXF1ZXN0cy5cbiAgICAgKiBUaGUgbW9yZSBxdWVyeSBwYXJhbXMgYXJlIHBhc3NlZCwgdGhlIHdlYWtlciB0aGUgY2FjaGUgcGVyZm9ybWFuY2Ugd2lsbCBiZSwgYXMgdGhlIGNhY2hlIGtleVxuICAgICAqIGlzIGJhc2VkIG9uIHRoZSBxdWVyeSBwYXJhbXMuXG4gICAgICogTm90ZSB0aGF0IHRoaXMgY29uZmlnIGNhbiBub3QgYmUgY29tYmluZWQgd2l0aCB7QHNlZSBkZW55UXVlcnlQYXJhbXN9LlxuICAgICAqIElmIGJvdGggYXJlIHNwZWNpZmllZCwgdGhlIHtAc2VlIGRlbnlRdWVyeVBhcmFtc30gd2lsbCBiZSBpZ25vcmVkLlxuICAgICAqIEFsbCBxdWVyeSBwYXJhbXMgYXJlIHBhc3NlZCBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93UXVlcnlQYXJhbXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHF1ZXJ5IHBhcmFtIGtleXMgdG8gZGVueSBwYXNzaW5nIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIHByZXZlbnQgc3BlY2lmaWMgZXh0ZXJuYWwgcXVlcnkgcGFyYW1zLCBlLmcuLCBmYmNsaWQsIHV0bV9jYW1wYWlnbiwgLi4uLFxuICAgICAqIHRvIGltcHJvdmUgY2FjaGUgcGVyZm9ybWFuY2UsIGFzIHRoZSBjYWNoZSBrZXkgaXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeSBwYXJhbXMuXG4gICAgICogTm90ZSB0aGF0IHRoaXMgY29uZmlnIGNhbiBub3QgYmUgY29tYmluZWQgd2l0aCB7QHNlZSBhbGxvd1F1ZXJ5UGFyYW1zfS5cbiAgICAgKiBJZiBib3RoIGFyZSBzcGVjaWZpZWQsIHRoZSB7QHNlZSBkZW55UXVlcnlQYXJhbXN9IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKiBBbGwgcXVlcnkgcGFyYW1zIGFyZSBwYXNzZWQgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZW55UXVlcnlQYXJhbXM/OiBzdHJpbmdbXTtcbn0iXX0=
|
|
@@ -39,6 +39,12 @@ export interface NuxtServerAppStackProps extends NuxtAppStackProps {
|
|
|
39
39
|
*/
|
|
40
40
|
readonly enableSitemap?: boolean;
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Whether to enable (HTTPS only) API access to the Nuxt app via the `/api` path which support all HTTP methods.
|
|
44
|
+
* See https://nuxt.com/docs/guide/directory-structure/server#recipes for details.
|
|
45
|
+
*/
|
|
46
|
+
readonly enableApi?: boolean;
|
|
47
|
+
|
|
42
48
|
/**
|
|
43
49
|
* Whether to enable reporting of CloudFront access logs via Athena.
|
|
44
50
|
*/
|