@energycap/energycap-sdk-angular 8.2507.6271 → 8.2507.6272
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/api/bill.service.d.ts +2 -2
- package/api/spanClasspropertyinfoPermissionPermissionsExportBillsRunspan.service.d.ts +2 -2
- package/esm2022/api/bill.service.mjs +3 -3
- package/esm2022/api/spanClasspropertyinfoPermissionPermissionsExportBillsRunspan.service.mjs +3 -3
- package/fesm2022/energycap-energycap-sdk-angular.mjs +4 -4
- package/fesm2022/energycap-energycap-sdk-angular.mjs.map +1 -1
- package/package.json +1 -1
package/esm2022/api/spanClasspropertyinfoPermissionPermissionsExportBillsRunspan.service.mjs
CHANGED
|
@@ -121,7 +121,7 @@ export class SpanClasspropertyinfoPermissionPermissionsExportBillsRunspanService
|
|
|
121
121
|
}));
|
|
122
122
|
}
|
|
123
123
|
/**
|
|
124
|
-
* Retrieves text of a standard EnergyCAP bill export file for AP and
|
|
124
|
+
* Retrieves text of a standard EnergyCAP bill export file for AP, GL and payment purposes. Maximum of 10000 bills can be processed at one time. Only bills with the following conditions are included in the export file: 1) approved bills (if the approval system is enabled in workflow settings) 2) bill is in a closed batch (if after batch or after batch approval is set in the workflow settings) 3) bill is not held for export 4) bill is not void 5) bill is within the user's topmost setting. 6) bill in not already exported
|
|
125
125
|
*
|
|
126
126
|
* @param body
|
|
127
127
|
*/
|
|
@@ -387,7 +387,7 @@ export class SpanClasspropertyinfoPermissionPermissionsExportBillsRunspanService
|
|
|
387
387
|
return this.http.request(RequestMethod.Put, path, requestOptions);
|
|
388
388
|
}
|
|
389
389
|
/**
|
|
390
|
-
* Retrieves text of a standard EnergyCAP bill export file for AP and
|
|
390
|
+
* Retrieves text of a standard EnergyCAP bill export file for AP, GL and payment purposes. Maximum of 10000 bills can be processed at one time. Only bills with the following conditions are included in the export file: 1) approved bills (if the approval system is enabled in workflow settings) 2) bill is in a closed batch (if after batch or after batch approval is set in the workflow settings) 3) bill is not held for export 4) bill is not void 5) bill is within the user's topmost setting. 6) bill in not already exported
|
|
391
391
|
*
|
|
392
392
|
* @param body
|
|
393
393
|
*/
|
|
@@ -720,4 +720,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
720
720
|
}] }, { type: i2.Configuration, decorators: [{
|
|
721
721
|
type: Optional
|
|
722
722
|
}] }] });
|
|
723
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhbkNsYXNzcHJvcGVydHlpbmZvUGVybWlzc2lvblBlcm1pc3Npb25zRXhwb3J0QmlsbHNSdW5zcGFuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvc3BhbkNsYXNzcHJvcGVydHlpbmZvUGVybWlzc2lvblBlcm1pc3Npb25zRXhwb3J0QmlsbHNSdW5zcGFuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBMkIsZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBYyxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQW9CLHNCQUFzQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBb0QsZ0JBQWdCLENBQUM7QUFRbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUE4QyxjQUFjLENBQUM7QUFHakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQUVyRixNQUFNLGFBQWEsR0FBRztJQUNsQixHQUFHLEVBQUUsS0FBSztJQUNWLElBQUksRUFBRSxNQUFNO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFJRixNQUFNLE9BQU8sbUVBQW1FO0lBTXREO0lBSlosUUFBUSxHQUFHLG1CQUFtQixDQUFDO0lBQ2xDLGNBQWMsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNoRCxhQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFFMUQsWUFBc0IsSUFBZ0IsRUFBZ0MsUUFBZ0IsRUFBYyxhQUE0QjtRQUExRyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2xDLElBQUksUUFBUSxF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RSxVQUFVOzswQkFPa0MsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBcUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDguMjUwN1xyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9ICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQmlsbEV4cG9ydCB9IGZyb20gJy4uL21vZGVsL2JpbGxFeHBvcnQnO1xyXG5pbXBvcnQgeyBCaWxsRXhwb3J0T3B0aW9ucyB9IGZyb20gJy4uL21vZGVsL2JpbGxFeHBvcnRPcHRpb25zJztcclxuaW1wb3J0IHsgQmlsbFVuZXhwb3J0IH0gZnJvbSAnLi4vbW9kZWwvYmlsbFVuZXhwb3J0JztcclxuaW1wb3J0IHsgQmlsbFVuZXhwb3J0T3B0aW9ucyB9IGZyb20gJy4uL21vZGVsL2JpbGxVbmV4cG9ydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBVcGRhdGVSZXN1bHQgfSBmcm9tICcuLi9tb2RlbC91cGRhdGVSZXN1bHQnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3BhbkNsYXNzcHJvcGVydHlpbmZvUGVybWlzc2lvblBlcm1pc3Npb25zRXhwb3J0QmlsbHNSdW5zcGFuU2VydmljZSB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHBzOi8vbG9jYWxob3N0JztcclxuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGlmIChiYXNlUGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcblx0XHRcdHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBFeHRlbmRzIG9iamVjdCBieSBjb3Bpbmcgbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gb2JqQSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcclxuICAgICAqIEBwYXJhbSBvYmpCIHNvdXJjZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHRlbmRPYmo8VDEsVDI+KG9iakE6IFQxLCBvYmpCOiBUMikge1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9iakIpe1xyXG4gICAgICAgICAgICBpZihvYmpCLmhhc093blByb3BlcnR5KGtleSkpe1xyXG4gICAgICAgICAgICAgICAgKG9iakEgYXMgYW55KVtrZXldID0gKG9iakIgYXMgYW55KVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8VDEmVDI+b2JqQTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25zdW1lcyBzdHJpbmdbXSBtaW1lLXR5cGVzXHJcbiAgICAgKiBAcmV0dXJuIHRydWU6IGNvbnN1bWVzIGNvbnRhaW5zICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgZmFsc2U6IG90aGVyd2lzZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNhbkNvbnN1bWVGb3JtKGNvbnN1bWVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7XHJcbiAgICAgICAgZm9yIChsZXQgY29uc3VtZSBvZiBjb25zdW1lcykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0IGFsbCBhY2NvdW50IGJpbGxzIHRvIGFwIG9yIGdsICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhY2NvdW50SWQgVGhlIGFjY291bnQgdG8gZXhwb3J0IGFsbCBiaWxsc1xyXG4gICAgICogQHBhcmFtIGJvZHkgQmlsbCBFeHBvcnQgT3B0aW9uc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWNjb3VudEJpbGxMaXN0RXhwb3J0KGFjY291bnRJZDogbnVtYmVyLCBib2R5PzogQmlsbEV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjb3VudEJpbGxMaXN0RXhwb3J0V2l0aEh0dHBJbmZvKGFjY291bnRJZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmV4cG9ydCBhY2NvdW50IGJpbGxzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhY2NvdW50SWQgVGhlIGFjY291bnQgZm9yIHdoaWNoIHRvIHVuZXhwb3J0IGFsbCBiaWxsc1xyXG4gICAgICogQHBhcmFtIGJvZHkgVmFsdWUgb2YgXFwmcXVvdDthcFxcJnF1b3Q7IGZvciBBL1AgdW5leHBvcnQsIG9yIFxcJnF1b3Q7Z2xcXCZxdW90OyBmb3IgR0wgdW5leHBvcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFjY291bnRCaWxsTGlzdFVuZXhwb3J0KGFjY291bnRJZDogbnVtYmVyLCBib2R5PzogQmlsbFVuZXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxVcGRhdGVSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY2NvdW50QmlsbExpc3RVbmV4cG9ydFdpdGhIdHRwSW5mbyhhY2NvdW50SWQsIGJvZHksIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0IGFsbCBiaWxscyBpbiBhIGxpc3QgdG8gYXAgb3IgZ2wgIE1heGltdW0gb2YgMTAwMDAgYmlsbHMgY2FuIGJlIHByb2Nlc3NlZCBhdCBvbmUgdGltZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGxpc3RJZCBUaGUgbGlzdCBpZGVudGlmaWVyXHJcbiAgICAgKiBAcGFyYW0gYm9keSBCaWxsIEV4cG9ydCBPcHRpb25zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBvcnRCaWxsTGlzdChsaXN0SWQ6IG51bWJlciwgYm9keT86IEJpbGxFeHBvcnRPcHRpb25zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydEJpbGxMaXN0V2l0aEh0dHBJbmZvKGxpc3RJZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGV4dCBvZiBhIHN0YW5kYXJkIEVuZXJneUNBUCBiaWxsIGV4cG9ydCBmaWxlIGZvciBBUCBhbmQgR0wgcHVycG9zZXMuICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuICBPbmx5IGJpbGxzIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgZXhwb3J0IGZpbGU6ICAgMSkgYXBwcm92ZWQgYmlsbHMgKGlmIHRoZSBhcHByb3ZhbCBzeXN0ZW0gaXMgZW5hYmxlZCBpbiB3b3JrZmxvdyBzZXR0aW5ncykgIDIpIGJpbGwgaXMgaW4gYSBjbG9zZWQgYmF0Y2ggKGlmIGFmdGVyIGJhdGNoIG9yIGFmdGVyIGJhdGNoIGFwcHJvdmFsIGlzIHNldCBpbiB0aGUgd29ya2Zsb3cgc2V0dGluZ3MpICAzKSBiaWxsIGlzIG5vdCBoZWxkIGZvciBleHBvcnQgIDQpIGJpbGwgaXMgbm90IHZvaWQgIDUpIGJpbGwgaXMgd2l0aGluIHRoZSB1c2VyJiMzOTtzIHRvcG1vc3Qgc2V0dGluZy4gIDYpIGJpbGwgaW4gbm90IGFscmVhZHkgZXhwb3J0ZWRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBvcnRCaWxscyhib2R5PzogQmlsbEV4cG9ydCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRCaWxsc1dpdGhIdHRwSW5mbyhib2R5LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cG9ydCBhbGwgbWV0ZXIgYmlsbHMgdG8gYXAgb3IgZ2wgIE1heGltdW0gb2YgMTAwMDAgYmlsbHMgY2FuIGJlIHByb2Nlc3NlZCBhdCBvbmUgdGltZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG1ldGVySWQgVGhlIG1ldGVyIHRvIGV4cG9ydCBhbGwgYmlsbHNcclxuICAgICAqIEBwYXJhbSBib2R5IEJpbGwgRXhwb3J0IE9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1ldGVyQmlsbExpc3RFeHBvcnQobWV0ZXJJZDogbnVtYmVyLCBib2R5PzogQmlsbEV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0ZXJCaWxsTGlzdEV4cG9ydFdpdGhIdHRwSW5mbyhtZXRlcklkLCBib2R5LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuZXhwb3J0IG1ldGVyIGJpbGxzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBtZXRlcklkIFRoZSBtZXRlciBmb3Igd2hpY2ggdG8gdW5leHBvcnQgYWxsIGJpbGxzXHJcbiAgICAgKiBAcGFyYW0gYm9keSBWYWx1ZSBvZiBcXCZxdW90O2FwXFwmcXVvdDsgZm9yIEEvUCB1bmV4cG9ydCwgb3IgXFwmcXVvdDtnbFxcJnF1b3Q7IGZvciBHTCB1bmV4cG9ydFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWV0ZXJCaWxsTGlzdFVuZXhwb3J0KG1ldGVySWQ6IG51bWJlciwgYm9keT86IEJpbGxVbmV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8VXBkYXRlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0ZXJCaWxsTGlzdFVuZXhwb3J0V2l0aEh0dHBJbmZvKG1ldGVySWQsIGJvZHksIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5leHBvcnQgYmlsbCBsaXN0XHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBsaXN0SWQgVGhlIGxpc3QgaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgVmFsdWUgb2YgXFwmcXVvdDthcFxcJnF1b3Q7IGZvciBBL1AgdW5leHBvcnQsIG9yIFxcJnF1b3Q7Z2xcXCZxdW90OyBmb3IgR0wgdW5leHBvcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVuZXhwb3J0QmlsbExpc3QobGlzdElkOiBudW1iZXIsIGJvZHk/OiBCaWxsVW5leHBvcnRPcHRpb25zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPFVwZGF0ZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVuZXhwb3J0QmlsbExpc3RXaXRoSHR0cEluZm8obGlzdElkLCBib2R5LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8VXBkYXRlUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIG9uZSBvciBtb3JlIGJpbGxzIGFzIHVuZXhwb3J0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBib2R5IEFuIGFycmF5IG9mIGJpbGwgaWRzIHRvIGJlIG1hcmtlZCBhcyB1bmV4cG9ydGVkIGFuZCBleHBvcnQgbW9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxscyhib2R5PzogQmlsbFVuZXhwb3J0LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPFVwZGF0ZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVuZXhwb3J0QmlsbHNXaXRoSHR0cEluZm8oYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPFVwZGF0ZVJlc3VsdD4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyBvbmUgb3IgbW9yZSBiaWxscyBhcyB1bmV4cG9ydGVkLiBUaGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZCBhcmUgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGd1aWQgcGFzc2VkIGluLiAgIFRoZSBndWlkIGlzIGdlbmVyYXRlZCB3aGVuIGJpbGxzIGFyZSBleHBvcnRlZCB2aWEgdGhlIGJpbGwgZXhwb3J0IGVuZCBwb2ludCwgYW5kIHRoZSBndWlkIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIHJlc3BvbnNlIGluIGEgZmllbGQgbmFtZWQgRWMtR3VpZC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJpbGxFeHBvcnRHdWlkIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxsc0J5R3VpZChiaWxsRXhwb3J0R3VpZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPFVwZGF0ZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVuZXhwb3J0QmlsbHNCeUd1aWRXaXRoSHR0cEluZm8oYmlsbEV4cG9ydEd1aWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cG9ydCBhbGwgYWNjb3VudCBiaWxscyB0byBhcCBvciBnbCAgTWF4aW11bSBvZiAxMDAwMCBiaWxscyBjYW4gYmUgcHJvY2Vzc2VkIGF0IG9uZSB0aW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudElkIFRoZSBhY2NvdW50IHRvIGV4cG9ydCBhbGwgYmlsbHNcclxuICAgICAqIEBwYXJhbSBib2R5IEJpbGwgRXhwb3J0IE9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFjY291bnRCaWxsTGlzdEV4cG9ydFdpdGhIdHRwSW5mbyhhY2NvdW50SWQ6IG51bWJlciwgYm9keT86IEJpbGxFeHBvcnRPcHRpb25zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92My9hY2NvdW50LyR7YWNjb3VudElkfS9saXN0L2JpbGwvZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYWNjb3VudElkJyArICd9JywgU3RyaW5nKGFjY291bnRJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYWNjb3VudElkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYWNjb3VudElkID09PSBudWxsIHx8IGFjY291bnRJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFjY291bnRJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGFjY291bnRCaWxsTGlzdEV4cG9ydC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgY29uc3VtZXNbMF0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkgPT0gbnVsbCA/ICcnIDogKGNvbnN1bWVzWzBdID09ICdhcHBsaWNhdGlvbi9qc29uJyA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogYm9keSksIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwNjEyXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8YW55PihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5leHBvcnQgYWNjb3VudCBiaWxsc1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudElkIFRoZSBhY2NvdW50IGZvciB3aGljaCB0byB1bmV4cG9ydCBhbGwgYmlsbHNcclxuICAgICAqIEBwYXJhbSBib2R5IFZhbHVlIG9mIFxcJnF1b3Q7YXBcXCZxdW90OyBmb3IgQS9QIHVuZXhwb3J0LCBvciBcXCZxdW90O2dsXFwmcXVvdDsgZm9yIEdMIHVuZXhwb3J0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhY2NvdW50QmlsbExpc3RVbmV4cG9ydFdpdGhIdHRwSW5mbyhhY2NvdW50SWQ6IG51bWJlciwgYm9keT86IEJpbGxVbmV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFVwZGF0ZVJlc3VsdD4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YzL2FjY291bnQvJHthY2NvdW50SWR9L2xpc3QvYmlsbC91bmV4cG9ydCdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ2FjY291bnRJZCcgKyAnfScsIFN0cmluZyhhY2NvdW50SWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2FjY291bnRJZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKGFjY291bnRJZCA9PT0gbnVsbCB8fCBhY2NvdW50SWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBhY2NvdW50SWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBhY2NvdW50QmlsbExpc3RVbmV4cG9ydC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cG9ydCBhbGwgYmlsbHMgaW4gYSBsaXN0IHRvIGFwIG9yIGdsICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBsaXN0SWQgVGhlIGxpc3QgaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgQmlsbCBFeHBvcnQgT3B0aW9uc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhwb3J0QmlsbExpc3RXaXRoSHR0cEluZm8obGlzdElkOiBudW1iZXIsIGJvZHk/OiBCaWxsRXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvbGlzdC8ke2xpc3RJZH0vZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnbGlzdElkJyArICd9JywgU3RyaW5nKGxpc3RJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnbGlzdElkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAobGlzdElkID09PSBudWxsIHx8IGxpc3RJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGxpc3RJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGV4cG9ydEJpbGxMaXN0LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBjb25zdW1lc1swXSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgYm9keTogYm9keSA9PSBudWxsID8gJycgOiAoY29uc3VtZXNbMF0gPT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBib2R5KSwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTA2MTJcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxhbnk+KFJlcXVlc3RNZXRob2QuUHV0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGV4dCBvZiBhIHN0YW5kYXJkIEVuZXJneUNBUCBiaWxsIGV4cG9ydCBmaWxlIGZvciBBUCBhbmQgR0wgcHVycG9zZXMuICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuICBPbmx5IGJpbGxzIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgZXhwb3J0IGZpbGU6ICAgMSkgYXBwcm92ZWQgYmlsbHMgKGlmIHRoZSBhcHByb3ZhbCBzeXN0ZW0gaXMgZW5hYmxlZCBpbiB3b3JrZmxvdyBzZXR0aW5ncykgIDIpIGJpbGwgaXMgaW4gYSBjbG9zZWQgYmF0Y2ggKGlmIGFmdGVyIGJhdGNoIG9yIGFmdGVyIGJhdGNoIGFwcHJvdmFsIGlzIHNldCBpbiB0aGUgd29ya2Zsb3cgc2V0dGluZ3MpICAzKSBiaWxsIGlzIG5vdCBoZWxkIGZvciBleHBvcnQgIDQpIGJpbGwgaXMgbm90IHZvaWQgIDUpIGJpbGwgaXMgd2l0aGluIHRoZSB1c2VyJiMzOTtzIHRvcG1vc3Qgc2V0dGluZy4gIDYpIGJpbGwgaW4gbm90IGFscmVhZHkgZXhwb3J0ZWRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBvcnRCaWxsc1dpdGhIdHRwSW5mbyhib2R5PzogQmlsbEV4cG9ydCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvYmlsbC9leHBvcnQnO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgY29uc3VtZXNbMF0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkgPT0gbnVsbCA/ICcnIDogKGNvbnN1bWVzWzBdID09ICdhcHBsaWNhdGlvbi9qc29uJyA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogYm9keSksIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwNjEyXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8YW55PihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0IGFsbCBtZXRlciBiaWxscyB0byBhcCBvciBnbCAgTWF4aW11bSBvZiAxMDAwMCBiaWxscyBjYW4gYmUgcHJvY2Vzc2VkIGF0IG9uZSB0aW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbWV0ZXJJZCBUaGUgbWV0ZXIgdG8gZXhwb3J0IGFsbCBiaWxsc1xyXG4gICAgICogQHBhcmFtIGJvZHkgQmlsbCBFeHBvcnQgT3B0aW9uc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWV0ZXJCaWxsTGlzdEV4cG9ydFdpdGhIdHRwSW5mbyhtZXRlcklkOiBudW1iZXIsIGJvZHk/OiBCaWxsRXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvbWV0ZXIvJHttZXRlcklkfS9saXN0L2JpbGwvZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnbWV0ZXJJZCcgKyAnfScsIFN0cmluZyhtZXRlcklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdtZXRlcklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAobWV0ZXJJZCA9PT0gbnVsbCB8fCBtZXRlcklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbWV0ZXJJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIG1ldGVyQmlsbExpc3RFeHBvcnQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PGFueT4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuZXhwb3J0IG1ldGVyIGJpbGxzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBtZXRlcklkIFRoZSBtZXRlciBmb3Igd2hpY2ggdG8gdW5leHBvcnQgYWxsIGJpbGxzXHJcbiAgICAgKiBAcGFyYW0gYm9keSBWYWx1ZSBvZiBcXCZxdW90O2FwXFwmcXVvdDsgZm9yIEEvUCB1bmV4cG9ydCwgb3IgXFwmcXVvdDtnbFxcJnF1b3Q7IGZvciBHTCB1bmV4cG9ydFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWV0ZXJCaWxsTGlzdFVuZXhwb3J0V2l0aEh0dHBJbmZvKG1ldGVySWQ6IG51bWJlciwgYm9keT86IEJpbGxVbmV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFVwZGF0ZVJlc3VsdD4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YzL21ldGVyLyR7bWV0ZXJJZH0vbGlzdC9iaWxsL3VuZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnbWV0ZXJJZCcgKyAnfScsIFN0cmluZyhtZXRlcklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdtZXRlcklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAobWV0ZXJJZCA9PT0gbnVsbCB8fCBtZXRlcklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbWV0ZXJJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIG1ldGVyQmlsbExpc3RVbmV4cG9ydC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuZXhwb3J0IGJpbGwgbGlzdFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbGlzdElkIFRoZSBsaXN0IGlkZW50aWZpZXJcclxuICAgICAqIEBwYXJhbSBib2R5IFZhbHVlIG9mIFxcJnF1b3Q7YXBcXCZxdW90OyBmb3IgQS9QIHVuZXhwb3J0LCBvciBcXCZxdW90O2dsXFwmcXVvdDsgZm9yIEdMIHVuZXhwb3J0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1bmV4cG9ydEJpbGxMaXN0V2l0aEh0dHBJbmZvKGxpc3RJZDogbnVtYmVyLCBib2R5PzogQmlsbFVuZXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8VXBkYXRlUmVzdWx0Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvbGlzdC8ke2xpc3RJZH0vdW5leHBvcnQnXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyR7JyArICdsaXN0SWQnICsgJ30nLCBTdHJpbmcobGlzdElkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdsaXN0SWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmIChsaXN0SWQgPT09IG51bGwgfHwgbGlzdElkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbGlzdElkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdW5leHBvcnRCaWxsTGlzdC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIG9uZSBvciBtb3JlIGJpbGxzIGFzIHVuZXhwb3J0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBib2R5IEFuIGFycmF5IG9mIGJpbGwgaWRzIHRvIGJlIG1hcmtlZCBhcyB1bmV4cG9ydGVkIGFuZCBleHBvcnQgbW9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxsc1dpdGhIdHRwSW5mbyhib2R5PzogQmlsbFVuZXhwb3J0LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92My9iaWxsL3VuZXhwb3J0JztcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBjb25zdW1lc1swXSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgYm9keTogYm9keSA9PSBudWxsID8gJycgOiAoY29uc3VtZXNbMF0gPT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBib2R5KSwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTA2MTJcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxVcGRhdGVSZXN1bHQ+KFJlcXVlc3RNZXRob2QuUHV0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyBvbmUgb3IgbW9yZSBiaWxscyBhcyB1bmV4cG9ydGVkLiBUaGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZCBhcmUgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGd1aWQgcGFzc2VkIGluLiAgIFRoZSBndWlkIGlzIGdlbmVyYXRlZCB3aGVuIGJpbGxzIGFyZSBleHBvcnRlZCB2aWEgdGhlIGJpbGwgZXhwb3J0IGVuZCBwb2ludCwgYW5kIHRoZSBndWlkIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIHJlc3BvbnNlIGluIGEgZmllbGQgbmFtZWQgRWMtR3VpZC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJpbGxFeHBvcnRHdWlkIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxsc0J5R3VpZFdpdGhIdHRwSW5mbyhiaWxsRXhwb3J0R3VpZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92My9iaWxsL3VuZXhwb3J0LyR7YmlsbEV4cG9ydEd1aWR9J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYmlsbEV4cG9ydEd1aWQnICsgJ30nLCBTdHJpbmcoYmlsbEV4cG9ydEd1aWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2JpbGxFeHBvcnRHdWlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYmlsbEV4cG9ydEd1aWQgPT09IG51bGwgfHwgYmlsbEV4cG9ydEd1aWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBiaWxsRXhwb3J0R3VpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVuZXhwb3J0QmlsbHNCeUd1aWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
723
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhbkNsYXNzcHJvcGVydHlpbmZvUGVybWlzc2lvblBlcm1pc3Npb25zRXhwb3J0QmlsbHNSdW5zcGFuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcGkvc3BhbkNsYXNzcHJvcGVydHlpbmZvUGVybWlzc2lvblBlcm1pc3Npb25zRXhwb3J0QmlsbHNSdW5zcGFuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBMkIsZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBYyxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQW9CLHNCQUFzQixDQUFDO0FBSXpGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBb0QsZ0JBQWdCLENBQUM7QUFRbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUE4QyxjQUFjLENBQUM7QUFHakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQUVyRixNQUFNLGFBQWEsR0FBRztJQUNsQixHQUFHLEVBQUUsS0FBSztJQUNWLElBQUksRUFBRSxNQUFNO0lBQ1osR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFJRixNQUFNLE9BQU8sbUVBQW1FO0lBTXREO0lBSlosUUFBUSxHQUFHLG1CQUFtQixDQUFDO0lBQ2xDLGNBQWMsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNoRCxhQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7SUFFMUQsWUFBc0IsSUFBZ0IsRUFBZ0MsUUFBZ0IsRUFBYyxhQUE0QjtRQUExRyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2xDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxhQUFhLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0QsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVMsQ0FBUSxJQUFRLEVBQUUsSUFBUTtRQUN2QyxLQUFJLElBQUksR0FBRyxJQUFJLElBQUksRUFBQyxDQUFDO1lBQ2pCLElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDO2dCQUN4QixJQUFZLENBQUMsR0FBRyxDQUFDLEdBQUksSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBYyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGNBQWMsQ0FBQyxRQUFrQjtRQUNyQyxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNuQyxLQUFLLElBQUksT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsSUFBd0IsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDek4sT0FBTyxJQUFJLENBQUMsaUNBQWlDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQzthQUMxRyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBMkIsRUFBRSxFQUFFO1lBQ2hDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNULENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHVCQUF1QixDQUFDLFNBQWlCLEVBQUUsSUFBMEIsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDN04sT0FBTyxJQUFJLENBQUMsbUNBQW1DLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQzthQUM1RyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBb0MsRUFBRSxFQUFFO1lBQ3pDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNULENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxNQUFjLEVBQUUsSUFBd0IsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDL00sT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQzthQUNoRyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBMkIsRUFBRSxFQUFFO1lBQ2hDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNULENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLElBQWlCLEVBQUUsc0JBQWtGLEVBQUUsdUJBQStEO1FBQ3JMLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQzthQUNyRixJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBMkIsRUFBRSxFQUFFO1lBQ2hDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNULENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxJQUF3QixFQUFFLHNCQUFrRixFQUFFLHVCQUErRDtRQUNyTixPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDO2FBQ3RHLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxRQUEyQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFBO0lBQ1QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kscUJBQXFCLENBQUMsT0FBZSxFQUFFLElBQTBCLEVBQUUsc0JBQWtGLEVBQUUsdUJBQStEO1FBQ3pOLE9BQU8sSUFBSSxDQUFDLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLENBQUM7YUFDeEcsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLFFBQW9DLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sU0FBUyxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUE7SUFDVCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsSUFBMEIsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDbk4sT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQzthQUNsRyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBb0MsRUFBRSxFQUFFO1lBQ3pDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNULENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLElBQW1CLEVBQUUsc0JBQWtGLEVBQUUsdUJBQStEO1FBQ3pMLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQzthQUN2RixJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBb0MsRUFBRSxFQUFFO1lBQ3pDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNULENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CLENBQUMsY0FBc0IsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDbE0sT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMsY0FBYyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDO2FBQ3ZHLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxRQUFvQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFBO0lBQ1QsQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0ksaUNBQWlDLENBQUMsU0FBaUIsRUFBRSxJQUF3QixFQUFFLHNCQUFrRixFQUFFLHVCQUErRDtRQUNyTyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLCtDQUErQzthQUMvRCxPQUFPLENBQUMsSUFBSSxHQUFHLFdBQVcsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFbEUsSUFBSSxlQUEyQixDQUFDO1FBRWhDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxpRUFBaUU7UUFDakUsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHdGQUF3RixDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsR0FBYSxFQUN4QixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUdELE1BQU0sUUFBUSxHQUFhO1lBQ3ZCLGtCQUFrQjtTQUNyQixDQUFDO1FBQ0YsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5ELElBQUksY0FBYyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxrREFBa0Q7WUFDL0ksTUFBTSxFQUFFLGVBQWU7WUFDdkIsZUFBZSxFQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNsRCxPQUFPLEVBQUUsVUFBd0I7U0FDcEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQU0sYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksbUNBQW1DLENBQUMsU0FBaUIsRUFBRSxJQUEwQixFQUFFLHNCQUFrRixFQUFFLHVCQUErRDtRQUN6TyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLGlEQUFpRDthQUNqRSxPQUFPLENBQUMsSUFBSSxHQUFHLFdBQVcsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFbEUsSUFBSSxlQUEyQixDQUFDO1FBRWhDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxpRUFBaUU7UUFDakUsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDBGQUEwRixDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsR0FBYTtZQUNyQixrQkFBa0I7U0FDckIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFHRCxNQUFNLFFBQVEsR0FBYTtZQUN2QixrQkFBa0I7U0FDckIsQ0FBQztRQUNGLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLGNBQWMsR0FBRztZQUNqQixPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsa0RBQWtEO1lBQy9JLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGVBQWUsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbEQsT0FBTyxFQUFFLFVBQXdCO1NBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFlLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLDBCQUEwQixDQUFDLE1BQWMsRUFBRSxJQUF3QixFQUFFLHNCQUFrRixFQUFFLHVCQUErRDtRQUMzTixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLCtCQUErQjthQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFNUQsSUFBSSxlQUEyQixDQUFDO1FBRWhDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsR0FBYSxFQUN4QixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUdELE1BQU0sUUFBUSxHQUFhO1lBQ3ZCLGtCQUFrQjtTQUNyQixDQUFDO1FBQ0YsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5ELElBQUksY0FBYyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxrREFBa0Q7WUFDL0ksTUFBTSxFQUFFLGVBQWU7WUFDdkIsZUFBZSxFQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNsRCxPQUFPLEVBQUUsVUFBd0I7U0FDcEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQU0sYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx1QkFBdUIsQ0FBQyxJQUFpQixFQUFFLHNCQUFrRixFQUFFLHVCQUErRDtRQUNqTSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDO1FBRW5ELElBQUksZUFBMkIsQ0FBQztRQUVoQyxJQUFJLHNCQUFzQixFQUFFLENBQUM7WUFDekIsSUFBSSxPQUFPLHNCQUFzQixDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDcEQsZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLGVBQWUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUM3RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBR0QsaUNBQWlDO1FBQ2pDLElBQUksUUFBUSxHQUFhLEVBQ3hCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUM5RyxDQUFDO1FBR0QsTUFBTSxRQUFRLEdBQWE7WUFDdkIsa0JBQWtCO1NBQ3JCLENBQUM7UUFDRixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkQsSUFBSSxjQUFjLEdBQUc7WUFDakIsT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLGtEQUFrRDtZQUMvSSxNQUFNLEVBQUUsZUFBZTtZQUN2QixlQUFlLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ2xELE9BQU8sRUFBRSxVQUF3QjtTQUNwQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBTSxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSwrQkFBK0IsQ0FBQyxPQUFlLEVBQUUsSUFBd0IsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDak8sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRywyQ0FBMkM7YUFDM0QsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTlELElBQUksZUFBMkIsQ0FBQztRQUVoQyxJQUFJLHNCQUFzQixFQUFFLENBQUM7WUFDekIsSUFBSSxPQUFPLHNCQUFzQixDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDcEQsZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLGVBQWUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUM3RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsK0RBQStEO1FBQy9ELElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxRQUFRLEdBQWEsRUFDeEIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFHRCxNQUFNLFFBQVEsR0FBYTtZQUN2QixrQkFBa0I7U0FDckIsQ0FBQztRQUNGLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLGNBQWMsR0FBRztZQUNqQixPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsa0RBQWtEO1lBQy9JLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGVBQWUsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbEQsT0FBTyxFQUFFLFVBQXdCO1NBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGlDQUFpQyxDQUFDLE9BQWUsRUFBRSxJQUEwQixFQUFFLHNCQUFrRixFQUFFLHVCQUErRDtRQUNyTyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLDZDQUE2QzthQUM3RCxPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFOUQsSUFBSSxlQUEyQixDQUFDO1FBRWhDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCwrREFBK0Q7UUFDL0QsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7UUFDNUcsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsR0FBYTtZQUNyQixrQkFBa0I7U0FDckIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFHRCxNQUFNLFFBQVEsR0FBYTtZQUN2QixrQkFBa0I7U0FDckIsQ0FBQztRQUNGLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLGNBQWMsR0FBRztZQUNqQixPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsa0RBQWtEO1lBQy9JLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGVBQWUsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbEQsT0FBTyxFQUFFLFVBQXdCO1NBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFlLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLDRCQUE0QixDQUFDLE1BQWMsRUFBRSxJQUEwQixFQUFFLHNCQUFrRixFQUFFLHVCQUErRDtRQUMvTixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLGlDQUFpQzthQUNqRCxPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFNUQsSUFBSSxlQUEyQixDQUFDO1FBRWhDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLGdGQUFnRixDQUFDLENBQUM7UUFDdEcsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsR0FBYTtZQUNyQixrQkFBa0I7U0FDckIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFHRCxNQUFNLFFBQVEsR0FBYTtZQUN2QixrQkFBa0I7U0FDckIsQ0FBQztRQUNGLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLGNBQWMsR0FBRztZQUNqQixPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsa0RBQWtEO1lBQy9JLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGVBQWUsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbEQsT0FBTyxFQUFFLFVBQXdCO1NBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFlLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0kseUJBQXlCLENBQUMsSUFBbUIsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDck0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQztRQUVyRCxJQUFJLGVBQTJCLENBQUM7UUFFaEMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ3pCLElBQUksT0FBTyxzQkFBc0IsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3BELGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7aUJBQU0sQ0FBQztnQkFDSixlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixlQUFlLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDN0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUdELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsR0FBYTtZQUNyQixrQkFBa0I7U0FDckIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFHRCxNQUFNLFFBQVEsR0FBYTtZQUN2QixrQkFBa0I7U0FDckIsQ0FBQztRQUNGLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLGNBQWMsR0FBRztZQUNqQixPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsa0RBQWtEO1lBQy9JLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGVBQWUsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbEQsT0FBTyxFQUFFLFVBQXdCO1NBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFlLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksK0JBQStCLENBQUMsY0FBc0IsRUFBRSxzQkFBa0YsRUFBRSx1QkFBK0Q7UUFDOU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyx5Q0FBeUM7YUFDekQsT0FBTyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFNUUsSUFBSSxlQUEyQixDQUFDO1FBRWhDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sc0JBQXNCLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxzRUFBc0U7UUFDdEUsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLDJGQUEyRixDQUFDLENBQUM7UUFDakgsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLFFBQVEsR0FBYTtZQUNyQixrQkFBa0I7U0FDckIsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFHRCxNQUFNLFFBQVEsR0FBYSxFQUMxQixDQUFDO1FBRUYsSUFBSSxjQUFjLEdBQUc7WUFDakIsT0FBTyxFQUFFLE9BQU87WUFDaEIsTUFBTSxFQUFFLGVBQWU7WUFDdkIsZUFBZSxFQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNsRCxPQUFPLEVBQUUsVUFBd0I7U0FDcEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQWUsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDcEYsQ0FBQzt3R0EzeEJRLG1FQUFtRSw0Q0FNakIsU0FBUzs0R0FOM0QsbUVBQW1FOzs0RkFBbkUsbUVBQW1FO2tCQUQvRSxVQUFVOzswQkFPa0MsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBcUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDguMjUwN1xyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9ICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQmlsbEV4cG9ydCB9IGZyb20gJy4uL21vZGVsL2JpbGxFeHBvcnQnO1xyXG5pbXBvcnQgeyBCaWxsRXhwb3J0T3B0aW9ucyB9IGZyb20gJy4uL21vZGVsL2JpbGxFeHBvcnRPcHRpb25zJztcclxuaW1wb3J0IHsgQmlsbFVuZXhwb3J0IH0gZnJvbSAnLi4vbW9kZWwvYmlsbFVuZXhwb3J0JztcclxuaW1wb3J0IHsgQmlsbFVuZXhwb3J0T3B0aW9ucyB9IGZyb20gJy4uL21vZGVsL2JpbGxVbmV4cG9ydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBVcGRhdGVSZXN1bHQgfSBmcm9tICcuLi9tb2RlbC91cGRhdGVSZXN1bHQnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3BhbkNsYXNzcHJvcGVydHlpbmZvUGVybWlzc2lvblBlcm1pc3Npb25zRXhwb3J0QmlsbHNSdW5zcGFuU2VydmljZSB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHBzOi8vbG9jYWxob3N0JztcclxuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGlmIChiYXNlUGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcblx0XHRcdHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBFeHRlbmRzIG9iamVjdCBieSBjb3Bpbmcgbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gb2JqQSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcclxuICAgICAqIEBwYXJhbSBvYmpCIHNvdXJjZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHRlbmRPYmo8VDEsVDI+KG9iakE6IFQxLCBvYmpCOiBUMikge1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9iakIpe1xyXG4gICAgICAgICAgICBpZihvYmpCLmhhc093blByb3BlcnR5KGtleSkpe1xyXG4gICAgICAgICAgICAgICAgKG9iakEgYXMgYW55KVtrZXldID0gKG9iakIgYXMgYW55KVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8VDEmVDI+b2JqQTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25zdW1lcyBzdHJpbmdbXSBtaW1lLXR5cGVzXHJcbiAgICAgKiBAcmV0dXJuIHRydWU6IGNvbnN1bWVzIGNvbnRhaW5zICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgZmFsc2U6IG90aGVyd2lzZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNhbkNvbnN1bWVGb3JtKGNvbnN1bWVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7XHJcbiAgICAgICAgZm9yIChsZXQgY29uc3VtZSBvZiBjb25zdW1lcykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0IGFsbCBhY2NvdW50IGJpbGxzIHRvIGFwIG9yIGdsICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhY2NvdW50SWQgVGhlIGFjY291bnQgdG8gZXhwb3J0IGFsbCBiaWxsc1xyXG4gICAgICogQHBhcmFtIGJvZHkgQmlsbCBFeHBvcnQgT3B0aW9uc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWNjb3VudEJpbGxMaXN0RXhwb3J0KGFjY291bnRJZDogbnVtYmVyLCBib2R5PzogQmlsbEV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjb3VudEJpbGxMaXN0RXhwb3J0V2l0aEh0dHBJbmZvKGFjY291bnRJZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmV4cG9ydCBhY2NvdW50IGJpbGxzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhY2NvdW50SWQgVGhlIGFjY291bnQgZm9yIHdoaWNoIHRvIHVuZXhwb3J0IGFsbCBiaWxsc1xyXG4gICAgICogQHBhcmFtIGJvZHkgVmFsdWUgb2YgXFwmcXVvdDthcFxcJnF1b3Q7IGZvciBBL1AgdW5leHBvcnQsIG9yIFxcJnF1b3Q7Z2xcXCZxdW90OyBmb3IgR0wgdW5leHBvcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFjY291bnRCaWxsTGlzdFVuZXhwb3J0KGFjY291bnRJZDogbnVtYmVyLCBib2R5PzogQmlsbFVuZXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxVcGRhdGVSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY2NvdW50QmlsbExpc3RVbmV4cG9ydFdpdGhIdHRwSW5mbyhhY2NvdW50SWQsIGJvZHksIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0IGFsbCBiaWxscyBpbiBhIGxpc3QgdG8gYXAgb3IgZ2wgIE1heGltdW0gb2YgMTAwMDAgYmlsbHMgY2FuIGJlIHByb2Nlc3NlZCBhdCBvbmUgdGltZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGxpc3RJZCBUaGUgbGlzdCBpZGVudGlmaWVyXHJcbiAgICAgKiBAcGFyYW0gYm9keSBCaWxsIEV4cG9ydCBPcHRpb25zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBvcnRCaWxsTGlzdChsaXN0SWQ6IG51bWJlciwgYm9keT86IEJpbGxFeHBvcnRPcHRpb25zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydEJpbGxMaXN0V2l0aEh0dHBJbmZvKGxpc3RJZCwgYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGV4dCBvZiBhIHN0YW5kYXJkIEVuZXJneUNBUCBiaWxsIGV4cG9ydCBmaWxlIGZvciBBUCwgR0wgYW5kIHBheW1lbnQgcHVycG9zZXMuICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuICBPbmx5IGJpbGxzIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgZXhwb3J0IGZpbGU6ICAgMSkgYXBwcm92ZWQgYmlsbHMgKGlmIHRoZSBhcHByb3ZhbCBzeXN0ZW0gaXMgZW5hYmxlZCBpbiB3b3JrZmxvdyBzZXR0aW5ncykgIDIpIGJpbGwgaXMgaW4gYSBjbG9zZWQgYmF0Y2ggKGlmIGFmdGVyIGJhdGNoIG9yIGFmdGVyIGJhdGNoIGFwcHJvdmFsIGlzIHNldCBpbiB0aGUgd29ya2Zsb3cgc2V0dGluZ3MpICAzKSBiaWxsIGlzIG5vdCBoZWxkIGZvciBleHBvcnQgIDQpIGJpbGwgaXMgbm90IHZvaWQgIDUpIGJpbGwgaXMgd2l0aGluIHRoZSB1c2VyJiMzOTtzIHRvcG1vc3Qgc2V0dGluZy4gIDYpIGJpbGwgaW4gbm90IGFscmVhZHkgZXhwb3J0ZWRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBvcnRCaWxscyhib2R5PzogQmlsbEV4cG9ydCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRCaWxsc1dpdGhIdHRwSW5mbyhib2R5LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cG9ydCBhbGwgbWV0ZXIgYmlsbHMgdG8gYXAgb3IgZ2wgIE1heGltdW0gb2YgMTAwMDAgYmlsbHMgY2FuIGJlIHByb2Nlc3NlZCBhdCBvbmUgdGltZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG1ldGVySWQgVGhlIG1ldGVyIHRvIGV4cG9ydCBhbGwgYmlsbHNcclxuICAgICAqIEBwYXJhbSBib2R5IEJpbGwgRXhwb3J0IE9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1ldGVyQmlsbExpc3RFeHBvcnQobWV0ZXJJZDogbnVtYmVyLCBib2R5PzogQmlsbEV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0ZXJCaWxsTGlzdEV4cG9ydFdpdGhIdHRwSW5mbyhtZXRlcklkLCBib2R5LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuZXhwb3J0IG1ldGVyIGJpbGxzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBtZXRlcklkIFRoZSBtZXRlciBmb3Igd2hpY2ggdG8gdW5leHBvcnQgYWxsIGJpbGxzXHJcbiAgICAgKiBAcGFyYW0gYm9keSBWYWx1ZSBvZiBcXCZxdW90O2FwXFwmcXVvdDsgZm9yIEEvUCB1bmV4cG9ydCwgb3IgXFwmcXVvdDtnbFxcJnF1b3Q7IGZvciBHTCB1bmV4cG9ydFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWV0ZXJCaWxsTGlzdFVuZXhwb3J0KG1ldGVySWQ6IG51bWJlciwgYm9keT86IEJpbGxVbmV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8VXBkYXRlUmVzdWx0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0ZXJCaWxsTGlzdFVuZXhwb3J0V2l0aEh0dHBJbmZvKG1ldGVySWQsIGJvZHksIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5leHBvcnQgYmlsbCBsaXN0XHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBsaXN0SWQgVGhlIGxpc3QgaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgVmFsdWUgb2YgXFwmcXVvdDthcFxcJnF1b3Q7IGZvciBBL1AgdW5leHBvcnQsIG9yIFxcJnF1b3Q7Z2xcXCZxdW90OyBmb3IgR0wgdW5leHBvcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVuZXhwb3J0QmlsbExpc3QobGlzdElkOiBudW1iZXIsIGJvZHk/OiBCaWxsVW5leHBvcnRPcHRpb25zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPFVwZGF0ZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVuZXhwb3J0QmlsbExpc3RXaXRoSHR0cEluZm8obGlzdElkLCBib2R5LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8VXBkYXRlUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIG9uZSBvciBtb3JlIGJpbGxzIGFzIHVuZXhwb3J0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBib2R5IEFuIGFycmF5IG9mIGJpbGwgaWRzIHRvIGJlIG1hcmtlZCBhcyB1bmV4cG9ydGVkIGFuZCBleHBvcnQgbW9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxscyhib2R5PzogQmlsbFVuZXhwb3J0LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPFVwZGF0ZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVuZXhwb3J0QmlsbHNXaXRoSHR0cEluZm8oYm9keSwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPFVwZGF0ZVJlc3VsdD4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyBvbmUgb3IgbW9yZSBiaWxscyBhcyB1bmV4cG9ydGVkLiBUaGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZCBhcmUgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGd1aWQgcGFzc2VkIGluLiAgIFRoZSBndWlkIGlzIGdlbmVyYXRlZCB3aGVuIGJpbGxzIGFyZSBleHBvcnRlZCB2aWEgdGhlIGJpbGwgZXhwb3J0IGVuZCBwb2ludCwgYW5kIHRoZSBndWlkIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIHJlc3BvbnNlIGluIGEgZmllbGQgbmFtZWQgRWMtR3VpZC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJpbGxFeHBvcnRHdWlkIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxsc0J5R3VpZChiaWxsRXhwb3J0R3VpZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPFVwZGF0ZVJlc3VsdD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVuZXhwb3J0QmlsbHNCeUd1aWRXaXRoSHR0cEluZm8oYmlsbEV4cG9ydEd1aWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cG9ydCBhbGwgYWNjb3VudCBiaWxscyB0byBhcCBvciBnbCAgTWF4aW11bSBvZiAxMDAwMCBiaWxscyBjYW4gYmUgcHJvY2Vzc2VkIGF0IG9uZSB0aW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudElkIFRoZSBhY2NvdW50IHRvIGV4cG9ydCBhbGwgYmlsbHNcclxuICAgICAqIEBwYXJhbSBib2R5IEJpbGwgRXhwb3J0IE9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFjY291bnRCaWxsTGlzdEV4cG9ydFdpdGhIdHRwSW5mbyhhY2NvdW50SWQ6IG51bWJlciwgYm9keT86IEJpbGxFeHBvcnRPcHRpb25zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92My9hY2NvdW50LyR7YWNjb3VudElkfS9saXN0L2JpbGwvZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYWNjb3VudElkJyArICd9JywgU3RyaW5nKGFjY291bnRJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYWNjb3VudElkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYWNjb3VudElkID09PSBudWxsIHx8IGFjY291bnRJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFjY291bnRJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGFjY291bnRCaWxsTGlzdEV4cG9ydC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgY29uc3VtZXNbMF0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkgPT0gbnVsbCA/ICcnIDogKGNvbnN1bWVzWzBdID09ICdhcHBsaWNhdGlvbi9qc29uJyA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogYm9keSksIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwNjEyXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8YW55PihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5leHBvcnQgYWNjb3VudCBiaWxsc1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudElkIFRoZSBhY2NvdW50IGZvciB3aGljaCB0byB1bmV4cG9ydCBhbGwgYmlsbHNcclxuICAgICAqIEBwYXJhbSBib2R5IFZhbHVlIG9mIFxcJnF1b3Q7YXBcXCZxdW90OyBmb3IgQS9QIHVuZXhwb3J0LCBvciBcXCZxdW90O2dsXFwmcXVvdDsgZm9yIEdMIHVuZXhwb3J0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhY2NvdW50QmlsbExpc3RVbmV4cG9ydFdpdGhIdHRwSW5mbyhhY2NvdW50SWQ6IG51bWJlciwgYm9keT86IEJpbGxVbmV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFVwZGF0ZVJlc3VsdD4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YzL2FjY291bnQvJHthY2NvdW50SWR9L2xpc3QvYmlsbC91bmV4cG9ydCdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ2FjY291bnRJZCcgKyAnfScsIFN0cmluZyhhY2NvdW50SWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2FjY291bnRJZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKGFjY291bnRJZCA9PT0gbnVsbCB8fCBhY2NvdW50SWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBhY2NvdW50SWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBhY2NvdW50QmlsbExpc3RVbmV4cG9ydC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cG9ydCBhbGwgYmlsbHMgaW4gYSBsaXN0IHRvIGFwIG9yIGdsICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBsaXN0SWQgVGhlIGxpc3QgaWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGJvZHkgQmlsbCBFeHBvcnQgT3B0aW9uc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhwb3J0QmlsbExpc3RXaXRoSHR0cEluZm8obGlzdElkOiBudW1iZXIsIGJvZHk/OiBCaWxsRXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvbGlzdC8ke2xpc3RJZH0vZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnbGlzdElkJyArICd9JywgU3RyaW5nKGxpc3RJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnbGlzdElkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAobGlzdElkID09PSBudWxsIHx8IGxpc3RJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGxpc3RJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGV4cG9ydEJpbGxMaXN0LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBjb25zdW1lc1swXSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgYm9keTogYm9keSA9PSBudWxsID8gJycgOiAoY29uc3VtZXNbMF0gPT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBib2R5KSwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTA2MTJcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxhbnk+KFJlcXVlc3RNZXRob2QuUHV0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGV4dCBvZiBhIHN0YW5kYXJkIEVuZXJneUNBUCBiaWxsIGV4cG9ydCBmaWxlIGZvciBBUCwgR0wgYW5kIHBheW1lbnQgcHVycG9zZXMuICBNYXhpbXVtIG9mIDEwMDAwIGJpbGxzIGNhbiBiZSBwcm9jZXNzZWQgYXQgb25lIHRpbWUuICBPbmx5IGJpbGxzIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgZXhwb3J0IGZpbGU6ICAgMSkgYXBwcm92ZWQgYmlsbHMgKGlmIHRoZSBhcHByb3ZhbCBzeXN0ZW0gaXMgZW5hYmxlZCBpbiB3b3JrZmxvdyBzZXR0aW5ncykgIDIpIGJpbGwgaXMgaW4gYSBjbG9zZWQgYmF0Y2ggKGlmIGFmdGVyIGJhdGNoIG9yIGFmdGVyIGJhdGNoIGFwcHJvdmFsIGlzIHNldCBpbiB0aGUgd29ya2Zsb3cgc2V0dGluZ3MpICAzKSBiaWxsIGlzIG5vdCBoZWxkIGZvciBleHBvcnQgIDQpIGJpbGwgaXMgbm90IHZvaWQgIDUpIGJpbGwgaXMgd2l0aGluIHRoZSB1c2VyJiMzOTtzIHRvcG1vc3Qgc2V0dGluZy4gIDYpIGJpbGwgaW4gbm90IGFscmVhZHkgZXhwb3J0ZWRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJvZHkgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBvcnRCaWxsc1dpdGhIdHRwSW5mbyhib2R5PzogQmlsbEV4cG9ydCwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvYmlsbC9leHBvcnQnO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgY29uc3VtZXNbMF0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHkgPT0gbnVsbCA/ICcnIDogKGNvbnN1bWVzWzBdID09ICdhcHBsaWNhdGlvbi9qc29uJyA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogYm9keSksIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEwNjEyXHJcbiAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6dGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcclxuICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyBhcyAncmVzcG9uc2UnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8YW55PihSZXF1ZXN0TWV0aG9kLlB1dCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwb3J0IGFsbCBtZXRlciBiaWxscyB0byBhcCBvciBnbCAgTWF4aW11bSBvZiAxMDAwMCBiaWxscyBjYW4gYmUgcHJvY2Vzc2VkIGF0IG9uZSB0aW1lLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbWV0ZXJJZCBUaGUgbWV0ZXIgdG8gZXhwb3J0IGFsbCBiaWxsc1xyXG4gICAgICogQHBhcmFtIGJvZHkgQmlsbCBFeHBvcnQgT3B0aW9uc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWV0ZXJCaWxsTGlzdEV4cG9ydFdpdGhIdHRwSW5mbyhtZXRlcklkOiBudW1iZXIsIGJvZHk/OiBCaWxsRXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvbWV0ZXIvJHttZXRlcklkfS9saXN0L2JpbGwvZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnbWV0ZXJJZCcgKyAnfScsIFN0cmluZyhtZXRlcklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdtZXRlcklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAobWV0ZXJJZCA9PT0gbnVsbCB8fCBtZXRlcklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbWV0ZXJJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIG1ldGVyQmlsbExpc3RFeHBvcnQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PGFueT4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuZXhwb3J0IG1ldGVyIGJpbGxzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBtZXRlcklkIFRoZSBtZXRlciBmb3Igd2hpY2ggdG8gdW5leHBvcnQgYWxsIGJpbGxzXHJcbiAgICAgKiBAcGFyYW0gYm9keSBWYWx1ZSBvZiBcXCZxdW90O2FwXFwmcXVvdDsgZm9yIEEvUCB1bmV4cG9ydCwgb3IgXFwmcXVvdDtnbFxcJnF1b3Q7IGZvciBHTCB1bmV4cG9ydFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWV0ZXJCaWxsTGlzdFVuZXhwb3J0V2l0aEh0dHBJbmZvKG1ldGVySWQ6IG51bWJlciwgYm9keT86IEJpbGxVbmV4cG9ydE9wdGlvbnMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFVwZGF0ZVJlc3VsdD4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YzL21ldGVyLyR7bWV0ZXJJZH0vbGlzdC9iaWxsL3VuZXhwb3J0J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnbWV0ZXJJZCcgKyAnfScsIFN0cmluZyhtZXRlcklkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdtZXRlcklkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAobWV0ZXJJZCA9PT0gbnVsbCB8fCBtZXRlcklkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbWV0ZXJJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIG1ldGVyQmlsbExpc3RVbmV4cG9ydC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuZXhwb3J0IGJpbGwgbGlzdFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbGlzdElkIFRoZSBsaXN0IGlkZW50aWZpZXJcclxuICAgICAqIEBwYXJhbSBib2R5IFZhbHVlIG9mIFxcJnF1b3Q7YXBcXCZxdW90OyBmb3IgQS9QIHVuZXhwb3J0LCBvciBcXCZxdW90O2dsXFwmcXVvdDsgZm9yIEdMIHVuZXhwb3J0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1bmV4cG9ydEJpbGxMaXN0V2l0aEh0dHBJbmZvKGxpc3RJZDogbnVtYmVyLCBib2R5PzogQmlsbFVuZXhwb3J0T3B0aW9ucywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8VXBkYXRlUmVzdWx0Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjMvbGlzdC8ke2xpc3RJZH0vdW5leHBvcnQnXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyR7JyArICdsaXN0SWQnICsgJ30nLCBTdHJpbmcobGlzdElkKSk7XHJcblxyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnM6IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaCA9PT0gJ3N0cmluZycpIHsgXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbVN0cmluZzogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVhZGVycy5rZXlzKCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLmRlZmF1bHRIZWFkZXJzLmdldEFsbChrZXkpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdsaXN0SWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmIChsaXN0SWQgPT09IG51bGwgfHwgbGlzdElkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbGlzdElkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdW5leHBvcnRCaWxsTGlzdC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxyXG4gICAgICAgIGxldCBwcm9kdWNlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0VDSS1QVUJMSUMtREFTSEJPQVJELUtFWScsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnN1bWVzWzBdKTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBib2R5OiBib2R5ID09IG51bGwgPyAnJyA6IChjb25zdW1lc1swXSA9PSAnYXBwbGljYXRpb24vanNvbicgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IGJvZHkpLCAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMDYxMlxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIG9uZSBvciBtb3JlIGJpbGxzIGFzIHVuZXhwb3J0ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBib2R5IEFuIGFycmF5IG9mIGJpbGwgaWRzIHRvIGJlIG1hcmtlZCBhcyB1bmV4cG9ydGVkIGFuZCBleHBvcnQgbW9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxsc1dpdGhIdHRwSW5mbyhib2R5PzogQmlsbFVuZXhwb3J0LCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92My9iaWxsL3VuZXhwb3J0JztcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBjb25zdW1lc1swXSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgYm9keTogYm9keSA9PSBudWxsID8gJycgOiAoY29uc3VtZXNbMF0gPT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBib2R5KSwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTA2MTJcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxVcGRhdGVSZXN1bHQ+KFJlcXVlc3RNZXRob2QuUHV0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyBvbmUgb3IgbW9yZSBiaWxscyBhcyB1bmV4cG9ydGVkLiBUaGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZCBhcmUgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGd1aWQgcGFzc2VkIGluLiAgIFRoZSBndWlkIGlzIGdlbmVyYXRlZCB3aGVuIGJpbGxzIGFyZSBleHBvcnRlZCB2aWEgdGhlIGJpbGwgZXhwb3J0IGVuZCBwb2ludCwgYW5kIHRoZSBndWlkIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIHJlc3BvbnNlIGluIGEgZmllbGQgbmFtZWQgRWMtR3VpZC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJpbGxFeHBvcnRHdWlkIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgYmlsbHMgdG8gYmUgdW5leHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5leHBvcnRCaWxsc0J5R3VpZFdpdGhIdHRwSW5mbyhiaWxsRXhwb3J0R3VpZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxVcGRhdGVSZXN1bHQ+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92My9iaWxsL3VuZXhwb3J0LyR7YmlsbEV4cG9ydEd1aWR9J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYmlsbEV4cG9ydEd1aWQnICsgJ30nLCBTdHJpbmcoYmlsbEV4cG9ydEd1aWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2JpbGxFeHBvcnRHdWlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYmlsbEV4cG9ydEd1aWQgPT09IG51bGwgfHwgYmlsbEV4cG9ydEd1aWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBiaWxsRXhwb3J0R3VpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVuZXhwb3J0QmlsbHNCeUd1aWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFVwZGF0ZVJlc3VsdD4oUmVxdWVzdE1ldGhvZC5QdXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -6420,7 +6420,7 @@ class BillService {
|
|
|
6420
6420
|
}));
|
|
6421
6421
|
}
|
|
6422
6422
|
/**
|
|
6423
|
-
* Retrieves text of a standard EnergyCAP bill export file for AP and
|
|
6423
|
+
* Retrieves text of a standard EnergyCAP bill export file for AP, GL and payment purposes. Maximum of 10000 bills can be processed at one time. Only bills with the following conditions are included in the export file: 1) approved bills (if the approval system is enabled in workflow settings) 2) bill is in a closed batch (if after batch or after batch approval is set in the workflow settings) 3) bill is not held for export 4) bill is not void 5) bill is within the user's topmost setting. 6) bill in not already exported
|
|
6424
6424
|
*
|
|
6425
6425
|
* @param body
|
|
6426
6426
|
*/
|
|
@@ -7803,7 +7803,7 @@ class BillService {
|
|
|
7803
7803
|
return this.http.request(RequestMethod$2O.Get, path, requestOptions);
|
|
7804
7804
|
}
|
|
7805
7805
|
/**
|
|
7806
|
-
* Retrieves text of a standard EnergyCAP bill export file for AP and
|
|
7806
|
+
* Retrieves text of a standard EnergyCAP bill export file for AP, GL and payment purposes. Maximum of 10000 bills can be processed at one time. Only bills with the following conditions are included in the export file: 1) approved bills (if the approval system is enabled in workflow settings) 2) bill is in a closed batch (if after batch or after batch approval is set in the workflow settings) 3) bill is not held for export 4) bill is not void 5) bill is within the user's topmost setting. 6) bill in not already exported
|
|
7807
7807
|
*
|
|
7808
7808
|
* @param body
|
|
7809
7809
|
*/
|
|
@@ -107110,7 +107110,7 @@ class SpanClasspropertyinfoPermissionPermissionsExportBillsRunspanService {
|
|
|
107110
107110
|
}));
|
|
107111
107111
|
}
|
|
107112
107112
|
/**
|
|
107113
|
-
* Retrieves text of a standard EnergyCAP bill export file for AP and
|
|
107113
|
+
* Retrieves text of a standard EnergyCAP bill export file for AP, GL and payment purposes. Maximum of 10000 bills can be processed at one time. Only bills with the following conditions are included in the export file: 1) approved bills (if the approval system is enabled in workflow settings) 2) bill is in a closed batch (if after batch or after batch approval is set in the workflow settings) 3) bill is not held for export 4) bill is not void 5) bill is within the user's topmost setting. 6) bill in not already exported
|
|
107114
107114
|
*
|
|
107115
107115
|
* @param body
|
|
107116
107116
|
*/
|
|
@@ -107376,7 +107376,7 @@ class SpanClasspropertyinfoPermissionPermissionsExportBillsRunspanService {
|
|
|
107376
107376
|
return this.http.request(RequestMethod$I.Put, path, requestOptions);
|
|
107377
107377
|
}
|
|
107378
107378
|
/**
|
|
107379
|
-
* Retrieves text of a standard EnergyCAP bill export file for AP and
|
|
107379
|
+
* Retrieves text of a standard EnergyCAP bill export file for AP, GL and payment purposes. Maximum of 10000 bills can be processed at one time. Only bills with the following conditions are included in the export file: 1) approved bills (if the approval system is enabled in workflow settings) 2) bill is in a closed batch (if after batch or after batch approval is set in the workflow settings) 3) bill is not held for export 4) bill is not void 5) bill is within the user's topmost setting. 6) bill in not already exported
|
|
107380
107380
|
*
|
|
107381
107381
|
* @param body
|
|
107382
107382
|
*/
|