cdk-assets 3.1.1 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/asset-manifest.d.ts +1 -1
- package/lib/asset-manifest.js +1 -1
- package/lib/aws-types.d.ts +1 -1
- package/lib/aws-types.js +1 -1
- package/lib/aws.d.ts +2 -2
- package/lib/aws.js +1 -1
- package/lib/private/asset-handler.d.ts +3 -3
- package/lib/private/asset-handler.js +1 -1
- package/lib/private/docker-credentials.d.ts +2 -2
- package/lib/private/docker-credentials.js +1 -1
- package/lib/private/docker.d.ts +3 -3
- package/lib/private/docker.js +1 -1
- package/lib/private/handlers/container-images.d.ts +2 -2
- package/lib/private/handlers/container-images.js +1 -1
- package/lib/private/handlers/files.d.ts +2 -2
- package/lib/private/handlers/files.js +1 -1
- package/lib/private/placeholders.d.ts +1 -1
- package/lib/private/placeholders.js +1 -1
- package/lib/private/shell.d.ts +1 -1
- package/lib/private/shell.js +1 -1
- package/lib/progress.d.ts +2 -2
- package/lib/progress.js +1 -1
- package/lib/publishing.d.ts +4 -4
- package/lib/publishing.js +1 -1
- package/package.json +8 -8
package/lib/aws-types.js
CHANGED
|
@@ -141,4 +141,4 @@ exports.EncryptionType = {
|
|
|
141
141
|
KMS: 'KMS',
|
|
142
142
|
KMS_DSSE: 'KMS_DSSE',
|
|
143
143
|
};
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBc0RVLFFBQUEsb0JBQW9CLEdBQUc7SUFDbEMsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsWUFBWSxFQUFFLGNBQWM7Q0FDcEIsQ0FBQztBQWlHRSxRQUFBLHdCQUF3QixHQUFHO0lBQ3RDLEVBQUUsRUFBRSxJQUFJO0lBQ1IsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFlBQVksRUFBRSxjQUFjO0lBQzVCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsWUFBWSxFQUFFLGNBQWM7SUFDNUIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsYUFBYSxFQUFFLGVBQWU7SUFDOUIsYUFBYSxFQUFFLGVBQWU7SUFDOUIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7Q0FDZCxDQUFDO0FBaUJFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLEdBQUcsRUFBRSxLQUFLO0NBQ0YsQ0FBQztBQUlFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFNBQVMsRUFBRSxXQUFXO0NBQ2QsQ0FBQztBQUlFLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsY0FBYyxFQUFFLGVBQWU7Q0FDdkIsQ0FBQztBQTBIRSxRQUFBLGNBQWMsR0FBRztJQUM1QixTQUFTLEVBQUUsV0FBVztDQUNkLENBQUM7QUFJRSxRQUFBLG1CQUFtQixHQUFHO0lBQ2pDLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtDQUNSLENBQUM7QUFNRSxRQUFBLGtCQUFrQixHQUFHO0lBQ2hDLFlBQVksRUFBRSxjQUFjO0lBQzVCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsbUJBQW1CLEVBQUUscUJBQXFCO0lBQzFDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4QyxJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFdBQVcsRUFBRSxhQUFhO0NBQ2xCLENBQUM7QUEyU0UsUUFBQSxlQUFlLEdBQUc7SUFDN0Isa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLGFBQWEsRUFBRSxlQUFlO0lBQzlCLHlCQUF5QixFQUFFLDJCQUEyQjtJQUN0RCxpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsaUJBQWlCLEVBQUUsbUJBQW1CO0NBQzlCLENBQUM7QUFJRSxRQUFBLGNBQWMsR0FBRztJQUM1QixVQUFVLEVBQUUsWUFBWTtJQUN4QixVQUFVLEVBQUUsWUFBWTtDQUNoQixDQUFDO0FBSUUsUUFBQSx5QkFBeUIsR0FBRztJQUN2QyxHQUFHLEVBQUUsS0FBSztJQUNWLEVBQUUsRUFBRSxJQUFJO0NBQ0EsQ0FBQztBQUtFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFlBQVksRUFBRSxjQUFjO0lBQzVCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsbUJBQW1CLEVBQUUscUJBQXFCO0lBQzFDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4QyxJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFdBQVcsRUFBRSxhQUFhO0NBQ2xCLENBQUM7QUE4a0JFLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7Q0FDWixDQUFDO0FBb0RFLFFBQUEsVUFBVSxHQUFHO0lBQ3hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QyxXQUFXLEVBQUUsYUFBYTtJQUMxQixPQUFPLEVBQUUsU0FBUztJQUNsQix3QkFBd0IsRUFBRSwwQkFBMEI7SUFDcEQsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ3RDLGNBQWMsRUFBRSxnQkFBZ0I7Q0FDeEIsQ0FBQztBQUlFLFFBQUEsZUFBZSxHQUFHO0lBQzdCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLElBQUksRUFBRSxNQUFNO0lBQ1osYUFBYSxFQUFFLGVBQWU7SUFDOUIsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixTQUFTLEVBQUUsV0FBVztDQUNkLENBQUM7QUEySkUsUUFBQSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUUsV0FBVztJQUN0QixPQUFPLEVBQUUsU0FBUztDQUNWLENBQUM7QUFnQkUsUUFBQSxjQUFjLEdBQUc7SUFDNUIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsR0FBRyxFQUFFLEtBQUs7SUFDVixRQUFRLEVBQUUsVUFBVTtDQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgZnJvbSB0aGUgU0RLIHYzXG4gKiBjbGllbnRzLiBJbnN0ZWFkIG9mIGV4cG9zaW5nIHRoZSBTREsgdHlwZXMgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHdlXG4gKiBleHBvc2UgdGhlc2UsIHNoaWVsZGluZyBjb25zdW1lcnMgZnJvbSBicmVha2luZyBjaGFuZ2VzIGluIGEgcG9zc2libGVcbiAqIG1pZ3JhdGlvbiB0byBhbiBTREsgdjQuXG4gKi9cblxuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBsYXN0IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQgZm9yIHRoaXMgb3BlcmF0aW9uLlxuICAgKi9cbiAgaHR0cFN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbGFzdCByZXF1ZXN0IHNlbnQgZm9yIHRoaXMgb3BlcmF0aW9uLiBPZnRlblxuICAgKiByZXF1ZXN0ZWQgYnkgQVdTIHNlcnZpY2UgdGVhbXMgdG8gYWlkIGluIGRlYnVnZ2luZy5cbiAgICovXG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgc2Vjb25kYXJ5IGlkZW50aWZpZXIgZm9yIHRoZSBsYXN0IHJlcXVlc3Qgc2VudC4gVXNlZCBmb3IgZGVidWdnaW5nLlxuICAgKi9cbiAgZXh0ZW5kZWRSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIHRlcnRpYXJ5IGlkZW50aWZpZXIgZm9yIHRoZSBsYXN0IHJlcXVlc3Qgc2VudC4gVXNlZCBmb3IgZGVidWdnaW5nLlxuICAgKi9cbiAgY2ZJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZC5cbiAgICovXG4gIGF0dGVtcHRzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoYXQgd2FzIHNwZW50IHdhaXRpbmcgYmV0d2VlblxuICAgKiByZXRyeSBhdHRlbXB0cy5cbiAgICovXG4gIHRvdGFsUmV0cnlEZWxheT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUJlYXJlciB7XG4gIC8qKlxuICAgKiBNZXRhZGF0YSBwZXJ0YWluaW5nIHRvIHRoaXMgcmVxdWVzdC5cbiAgICovXG4gICRtZXRhZGF0YTogUmVzcG9uc2VNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZElucHV0IHtcbiAgLyoqXG4gICAqIDxwPlRoZSBuYW1lIG9mIHRoZSBidWNrZXQgZnJvbSB3aGljaCB0aGUgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGlzXG4gICAqICAgICAgICAgIHJldHJpZXZlZC48L3A+XG4gICAqIDxwPk5vdGU6IFRvIHN1cHBseSB0aGUgTXVsdGktcmVnaW9uIEFjY2VzcyBQb2ludCAoTVJBUCkgdG8gQnVja2V0LCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBcIkBhd3Mtc2RrL3NpZ25hdHVyZS12NC1jcnRcIiBwYWNrYWdlIHRvIHlvdXIgcHJvamVjdCBkZXBlbmRlbmNpZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgZ28gdG8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzLXYzI2tub3duLWlzc3VlczwvcD5cbiAgICovXG4gIEJ1Y2tldDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogPHA+VGhlIGFjY291bnQgSUQgb2YgdGhlIGV4cGVjdGVkIGJ1Y2tldCBvd25lci4gSWYgdGhlIGFjY291bnQgSUQgdGhhdCB5b3UgcHJvdmlkZSBkb2VzIG5vdCBtYXRjaCB0aGUgYWN0dWFsIG93bmVyIG9mIHRoZSBidWNrZXQsIHRoZSByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgc3RhdHVzIGNvZGUgPGNvZGU+NDAzIEZvcmJpZGRlbjwvY29kZT4gKGFjY2VzcyBkZW5pZWQpLjwvcD5cbiAgICovXG4gIEV4cGVjdGVkQnVja2V0T3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTaWRlRW5jcnlwdGlvbiA9IHtcbiAgQUVTMjU2OiAnQUVTMjU2JyxcbiAgYXdzX2ttczogJ2F3czprbXMnLFxuICBhd3Nfa21zX2Rzc2U6ICdhd3M6a21zOmRzc2UnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZUVuY3J5cHRpb24gPSAodHlwZW9mIFNlcnZlclNpZGVFbmNyeXB0aW9uKVtrZXlvZiB0eXBlb2YgU2VydmVyU2lkZUVuY3J5cHRpb25dO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0IHtcbiAgLyoqXG4gICAqIDxwPlNlcnZlci1zaWRlIGVuY3J5cHRpb24gYWxnb3JpdGhtIHRvIHVzZSBmb3IgdGhlIGRlZmF1bHQgZW5jcnlwdGlvbi48L3A+XG4gICAqL1xuICBTU0VBbGdvcml0aG06IFNlcnZlclNpZGVFbmNyeXB0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogPHA+QW1hem9uIFdlYiBTZXJ2aWNlcyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGN1c3RvbWVyIEFtYXpvbiBXZWIgU2VydmljZXMgS01TIGtleSBJRCB0byB1c2UgZm9yIHRoZSBkZWZhdWx0XG4gICAqICAgICAgICAgIGVuY3J5cHRpb24uIFRoaXMgcGFyYW1ldGVyIGlzIGFsbG93ZWQgaWYgYW5kIG9ubHkgaWYgPGNvZGU+U1NFQWxnb3JpdGhtPC9jb2RlPiBpcyBzZXQgdG9cbiAgICogICAgICAgICAgPGNvZGU+YXdzOmttczwvY29kZT4gb3IgPGNvZGU+YXdzOmttczpkc3NlPC9jb2RlPi48L3A+XG4gICAqICAgICAgICAgIDxwPllvdSBjYW4gc3BlY2lmeSB0aGUga2V5IElELCBrZXkgYWxpYXMsIG9yIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgS01TXG4gICAqICAgICAgICAgIGtleS48L3A+XG4gICAqICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5LZXkgSUQ6IDxjb2RlPjEyMzRhYmNkLTEyYWItMzRjZC01NmVmLTEyMzQ1Njc4OTBhYjwvY29kZT5cbiAgICogICAgICAgICAgICAgICAgPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPktleSBBUk46IDxjb2RlPmFybjphd3M6a21zOnVzLWVhc3QtMjoxMTExMjIyMjMzMzM6a2V5LzEyMzRhYmNkLTEyYWItMzRjZC01NmVmLTEyMzQ1Njc4OTBhYjwvY29kZT5cbiAgICogICAgICAgICAgICAgICAgPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPktleSBBbGlhczogPGNvZGU+YWxpYXMvYWxpYXMtbmFtZTwvY29kZT5cbiAgICogICAgICAgICAgICAgICAgPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8cD5JZiB5b3UgdXNlIGEga2V5IElELCB5b3UgY2FuIHJ1biBpbnRvIGEgTG9nRGVzdGluYXRpb24gdW5kZWxpdmVyYWJsZSBlcnJvciB3aGVuIGNyZWF0aW5nXG4gICAqICAgICAgICAgIGEgVlBDIGZsb3cgbG9nLiA8L3A+XG4gICAqICAgICAgICAgIDxwPklmIHlvdSBhcmUgdXNpbmcgZW5jcnlwdGlvbiB3aXRoIGNyb3NzLWFjY291bnQgb3IgQW1hem9uIFdlYiBTZXJ2aWNlcyBzZXJ2aWNlIG9wZXJhdGlvbnMgeW91IG11c3QgdXNlXG4gICAqICAgICAgICAgIGEgZnVsbHkgcXVhbGlmaWVkIEtNUyBrZXkgQVJOLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9idWNrZXQtZW5jcnlwdGlvbi5odG1sI2J1Y2tldC1lbmNyeXB0aW9uLXVwZGF0ZS1idWNrZXQtcG9saWN5XCI+VXNpbmcgZW5jcnlwdGlvbiBmb3IgY3Jvc3MtYWNjb3VudCBvcGVyYXRpb25zPC9hPi48L3A+XG4gICAqICAgICAgICAgIDxpbXBvcnRhbnQ+XG4gICAqICAgICAgICAgICAgIDxwPkFtYXpvbiBTMyBvbmx5IHN1cHBvcnRzIHN5bW1ldHJpYyBlbmNyeXB0aW9uIEtNUyBrZXlzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20va21zL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zeW1tZXRyaWMtYXN5bW1ldHJpYy5odG1sXCI+QXN5bW1ldHJpYyBrZXlzIGluIEFtYXpvbiBXZWIgU2VydmljZXMgS01TPC9hPiBpbiB0aGUgPGk+QW1hem9uIFdlYiBTZXJ2aWNlcyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlXG4gICAqICAgICAgICAgICAgICAgIERldmVsb3BlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICA8L2ltcG9ydGFudD5cbiAgICovXG4gIEtNU01hc3RlcktleUlEPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclNpZGVFbmNyeXB0aW9uUnVsZSB7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0byBhcHBseSB0byBuZXcgb2JqZWN0cyBpbiB0aGUgYnVja2V0LiBJZiBhXG4gICAqICAgICAgICAgIFBVVCBPYmplY3QgcmVxdWVzdCBkb2Vzbid0IHNwZWNpZnkgYW55IHNlcnZlci1zaWRlIGVuY3J5cHRpb24sIHRoaXMgZGVmYXVsdCBlbmNyeXB0aW9uIHdpbGxcbiAgICogICAgICAgICAgYmUgYXBwbGllZC48L3A+XG4gICAqL1xuICBBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0PzogU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgc2hvdWxkIHVzZSBhbiBTMyBCdWNrZXQgS2V5IHdpdGggc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB1c2luZyBLTVNcbiAgICogICAgICAgICAgKFNTRS1LTVMpIGZvciBuZXcgb2JqZWN0cyBpbiB0aGUgYnVja2V0LiBFeGlzdGluZyBvYmplY3RzIGFyZSBub3QgYWZmZWN0ZWQuIFNldHRpbmcgdGhlXG4gICAqICAgICAgICAgICAgIDxjb2RlPkJ1Y2tldEtleUVuYWJsZWQ8L2NvZGU+IGVsZW1lbnQgdG8gPGNvZGU+dHJ1ZTwvY29kZT4gY2F1c2VzIEFtYXpvbiBTMyB0byB1c2UgYW4gUzNcbiAgICogICAgICAgICAgQnVja2V0IEtleS4gQnkgZGVmYXVsdCwgUzMgQnVja2V0IEtleSBpcyBub3QgZW5hYmxlZC48L3A+XG4gICAqICAgICAgICAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2J1Y2tldC1rZXkuaHRtbFwiPkFtYXpvbiBTMyBCdWNrZXQgS2V5czwvYT4gaW4gdGhlXG4gICAqICAgICAgICAgICAgIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqL1xuICBCdWNrZXRLZXlFbmFibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogPHA+Q29udGFpbmVyIGZvciBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uXG4gICAqICAgICAgICAgIHJ1bGUuPC9wPlxuICAgKi9cbiAgUnVsZXM6IFNlcnZlclNpZGVFbmNyeXB0aW9uUnVsZVtdIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Y2tldEVuY3J5cHRpb25PdXRwdXQge1xuICAvKipcbiAgICogPHA+U3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi48L3A+XG4gICAqL1xuICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24/OiBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRPdXRwdXRcbiAgZXh0ZW5kcyBHZXRCdWNrZXRFbmNyeXB0aW9uT3V0cHV0LFxuICBNZXRhZGF0YUJlYXJlciB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kSW5wdXQge1xuICAvKipcbiAgICogPHA+VGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBsb2NhdGlvbi48L3A+XG4gICAqICAgICAgICAgIDxwPldoZW4geW91IHVzZSB0aGlzIEFQSSBvcGVyYXRpb24gd2l0aCBhbiBhY2Nlc3MgcG9pbnQsIHByb3ZpZGUgdGhlIGFsaWFzIG9mIHRoZSBhY2Nlc3MgcG9pbnQgaW4gcGxhY2Ugb2YgdGhlIGJ1Y2tldCBuYW1lLjwvcD5cbiAgICogICAgICAgICAgPHA+V2hlbiB5b3UgdXNlIHRoaXMgQVBJIG9wZXJhdGlvbiB3aXRoIGFuIE9iamVjdCBMYW1iZGEgYWNjZXNzIHBvaW50LCBwcm92aWRlIHRoZSBhbGlhcyBvZiB0aGUgT2JqZWN0IExhbWJkYSBhY2Nlc3MgcG9pbnQgaW4gcGxhY2Ugb2YgdGhlIGJ1Y2tldCBuYW1lLlxuICAgKiBJZiB0aGUgT2JqZWN0IExhbWJkYSBhY2Nlc3MgcG9pbnQgYWxpYXMgaW4gYSByZXF1ZXN0IGlzIG5vdCB2YWxpZCwgdGhlIGVycm9yIGNvZGUgPGNvZGU+SW52YWxpZEFjY2Vzc1BvaW50QWxpYXNFcnJvcjwvY29kZT4gaXMgcmV0dXJuZWQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDxjb2RlPkludmFsaWRBY2Nlc3NQb2ludEFsaWFzRXJyb3I8L2NvZGU+LCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL0Vycm9yUmVzcG9uc2VzLmh0bWwjRXJyb3JDb2RlTGlzdFwiPkxpc3Qgb2ZcbiAgICogICAgICAgICAgICAgRXJyb3IgQ29kZXM8L2E+LjwvcD5cbiAgICogPHA+Tm90ZTogVG8gc3VwcGx5IHRoZSBNdWx0aS1yZWdpb24gQWNjZXNzIFBvaW50IChNUkFQKSB0byBCdWNrZXQsIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIFwiQGF3cy1zZGsvc2lnbmF0dXJlLXY0LWNydFwiIHBhY2thZ2UgdG8geW91ciBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBnbyB0byBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMja25vd24taXNzdWVzPC9wPlxuICAgKi9cbiAgQnVja2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiA8cD5UaGUgYWNjb3VudCBJRCBvZiB0aGUgZXhwZWN0ZWQgYnVja2V0IG93bmVyLiBJZiB0aGUgYWNjb3VudCBJRCB0aGF0IHlvdSBwcm92aWRlIGRvZXMgbm90IG1hdGNoIHRoZSBhY3R1YWwgb3duZXIgb2YgdGhlIGJ1Y2tldCwgdGhlIHJlcXVlc3QgZmFpbHMgd2l0aCB0aGUgSFRUUCBzdGF0dXMgY29kZSA8Y29kZT40MDMgRm9yYmlkZGVuPC9jb2RlPiAoYWNjZXNzIGRlbmllZCkuPC9wPlxuICAgKi9cbiAgRXhwZWN0ZWRCdWNrZXRPd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJ1Y2tldExvY2F0aW9uQ29uc3RyYWludCA9IHtcbiAgRVU6ICdFVScsXG4gIGFmX3NvdXRoXzE6ICdhZi1zb3V0aC0xJyxcbiAgYXBfZWFzdF8xOiAnYXAtZWFzdC0xJyxcbiAgYXBfbm9ydGhlYXN0XzE6ICdhcC1ub3J0aGVhc3QtMScsXG4gIGFwX25vcnRoZWFzdF8yOiAnYXAtbm9ydGhlYXN0LTInLFxuICBhcF9ub3J0aGVhc3RfMzogJ2FwLW5vcnRoZWFzdC0zJyxcbiAgYXBfc291dGhfMTogJ2FwLXNvdXRoLTEnLFxuICBhcF9zb3V0aF8yOiAnYXAtc291dGgtMicsXG4gIGFwX3NvdXRoZWFzdF8xOiAnYXAtc291dGhlYXN0LTEnLFxuICBhcF9zb3V0aGVhc3RfMjogJ2FwLXNvdXRoZWFzdC0yJyxcbiAgYXBfc291dGhlYXN0XzM6ICdhcC1zb3V0aGVhc3QtMycsXG4gIGFwX3NvdXRoZWFzdF80OiAnYXAtc291dGhlYXN0LTQnLFxuICBhcF9zb3V0aGVhc3RfNTogJ2FwLXNvdXRoZWFzdC01JyxcbiAgY2FfY2VudHJhbF8xOiAnY2EtY2VudHJhbC0xJyxcbiAgY25fbm9ydGhfMTogJ2NuLW5vcnRoLTEnLFxuICBjbl9ub3J0aHdlc3RfMTogJ2NuLW5vcnRod2VzdC0xJyxcbiAgZXVfY2VudHJhbF8xOiAnZXUtY2VudHJhbC0xJyxcbiAgZXVfY2VudHJhbF8yOiAnZXUtY2VudHJhbC0yJyxcbiAgZXVfbm9ydGhfMTogJ2V1LW5vcnRoLTEnLFxuICBldV9zb3V0aF8xOiAnZXUtc291dGgtMScsXG4gIGV1X3NvdXRoXzI6ICdldS1zb3V0aC0yJyxcbiAgZXVfd2VzdF8xOiAnZXUtd2VzdC0xJyxcbiAgZXVfd2VzdF8yOiAnZXUtd2VzdC0yJyxcbiAgZXVfd2VzdF8zOiAnZXUtd2VzdC0zJyxcbiAgaWxfY2VudHJhbF8xOiAnaWwtY2VudHJhbC0xJyxcbiAgbWVfc291dGhfMTogJ21lLXNvdXRoLTEnLFxuICBtZV9jZW50cmFsXzE6ICdtZS1jZW50cmFsLTEnLFxuICBzYV9lYXN0XzE6ICdzYS1lYXN0LTEnLFxuICB1c19lYXN0XzI6ICd1cy1lYXN0LTInLFxuICB1c19nb3ZfZWFzdF8xOiAndXMtZ292LWVhc3QtMScsXG4gIHVzX2dvdl93ZXN0XzE6ICd1cy1nb3Ytd2VzdC0xJyxcbiAgdXNfd2VzdF8xOiAndXMtd2VzdC0xJyxcbiAgdXNfd2VzdF8yOiAndXMtd2VzdC0yJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEJ1Y2tldExvY2F0aW9uQ29uc3RyYWludCA9XG4gICh0eXBlb2YgQnVja2V0TG9jYXRpb25Db25zdHJhaW50KVtrZXlvZiB0eXBlb2YgQnVja2V0TG9jYXRpb25Db25zdHJhaW50XTtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRCdWNrZXRMb2NhdGlvbk91dHB1dCB7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIFJlZ2lvbiB3aGVyZSB0aGUgYnVja2V0IHJlc2lkZXMuIEZvciBhIGxpc3Qgb2YgYWxsIHRoZSBBbWF6b24gUzMgc3VwcG9ydGVkXG4gICAqICAgICAgICAgIGxvY2F0aW9uIGNvbnN0cmFpbnRzIGJ5IFJlZ2lvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvcmFuZGUuaHRtbCNzM19yZWdpb25cIj5SZWdpb25zIGFuZCBFbmRwb2ludHM8L2E+LiBCdWNrZXRzIGluXG4gICAqICAgICAgICAgIFJlZ2lvbiA8Y29kZT51cy1lYXN0LTE8L2NvZGU+IGhhdmUgYSBMb2NhdGlvbkNvbnN0cmFpbnQgb2YgPGNvZGU+bnVsbDwvY29kZT4uPC9wPlxuICAgKi9cbiAgTG9jYXRpb25Db25zdHJhaW50PzogQnVja2V0TG9jYXRpb25Db25zdHJhaW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZE91dHB1dCBleHRlbmRzIEdldEJ1Y2tldExvY2F0aW9uT3V0cHV0LCBNZXRhZGF0YUJlYXJlciB7XG59XG5cbmV4cG9ydCBjb25zdCBFbmNvZGluZ1R5cGUgPSB7XG4gIHVybDogJ3VybCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBFbmNvZGluZ1R5cGUgPSAodHlwZW9mIEVuY29kaW5nVHlwZSlba2V5b2YgdHlwZW9mIEVuY29kaW5nVHlwZV07XG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0UGF5ZXIgPSB7XG4gIHJlcXVlc3RlcjogJ3JlcXVlc3RlcicsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZXF1ZXN0UGF5ZXIgPSAodHlwZW9mIFJlcXVlc3RQYXllcilba2V5b2YgdHlwZW9mIFJlcXVlc3RQYXllcl07XG5cbmV4cG9ydCBjb25zdCBPcHRpb25hbE9iamVjdEF0dHJpYnV0ZXMgPSB7XG4gIFJFU1RPUkVfU1RBVFVTOiAnUmVzdG9yZVN0YXR1cycsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBPcHRpb25hbE9iamVjdEF0dHJpYnV0ZXMgPVxuICAodHlwZW9mIE9wdGlvbmFsT2JqZWN0QXR0cmlidXRlcylba2V5b2YgdHlwZW9mIE9wdGlvbmFsT2JqZWN0QXR0cmlidXRlc107XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCB7XG4gIC8qKlxuICAgKiA8cD5cbiAgICogICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gV2hlbiB5b3UgdXNlIHRoaXMgb3BlcmF0aW9uIHdpdGggYSBkaXJlY3RvcnkgYnVja2V0LCB5b3UgbXVzdCB1c2UgdmlydHVhbC1ob3N0ZWQtc3R5bGUgcmVxdWVzdHMgaW4gdGhlIGZvcm1hdCA8Y29kZT5cbiAgICogICAgICAgICAgICAgICAgPGk+QnVja2V0X25hbWU8L2k+LnMzZXhwcmVzcy08aT5hel9pZDwvaT4uPGk+cmVnaW9uPC9pPi5hbWF6b25hd3MuY29tPC9jb2RlPi4gUGF0aC1zdHlsZSByZXF1ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4gIERpcmVjdG9yeSBidWNrZXQgbmFtZXMgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNob3NlbiBBdmFpbGFiaWxpdHkgWm9uZS4gQnVja2V0IG5hbWVzIG11c3QgZm9sbG93IHRoZSBmb3JtYXQgPGNvZGU+XG4gICAqICAgICAgICAgICAgICAgIDxpPmJ1Y2tldF9iYXNlX25hbWU8L2k+LS08aT5hei1pZDwvaT4tLXgtczM8L2NvZGU+IChmb3IgZXhhbXBsZSwgPGNvZGU+XG4gICAqICAgICAgICAgICAgICAgIDxpPkRPQy1FWEFNUExFLUJVQ0tFVDwvaT4tLTxpPnVzdzItYXoxPC9pPi0teC1zMzwvY29kZT4pLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgYnVja2V0IG5hbWluZ1xuICAgKiAgICAgICAgICByZXN0cmljdGlvbnMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvZGlyZWN0b3J5LWJ1Y2tldC1uYW1pbmctcnVsZXMuaHRtbFwiPkRpcmVjdG9yeSBidWNrZXQgbmFtaW5nXG4gICAqICAgICAgICAgICAgIHJ1bGVzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxiPkFjY2VzcyBwb2ludHM8L2I+IC0gV2hlbiB5b3UgdXNlIHRoaXMgYWN0aW9uIHdpdGggYW4gYWNjZXNzIHBvaW50LCB5b3UgbXVzdCBwcm92aWRlIHRoZSBhbGlhcyBvZiB0aGUgYWNjZXNzIHBvaW50IGluIHBsYWNlIG9mIHRoZSBidWNrZXQgbmFtZSBvciBzcGVjaWZ5IHRoZSBhY2Nlc3MgcG9pbnQgQVJOLiBXaGVuIHVzaW5nIHRoZSBhY2Nlc3MgcG9pbnQgQVJOLCB5b3UgbXVzdCBkaXJlY3QgcmVxdWVzdHMgdG8gdGhlIGFjY2VzcyBwb2ludCBob3N0bmFtZS4gVGhlIGFjY2VzcyBwb2ludCBob3N0bmFtZSB0YWtlcyB0aGUgZm9ybSA8aT5BY2Nlc3NQb2ludE5hbWU8L2k+LTxpPkFjY291bnRJZDwvaT4uczMtYWNjZXNzcG9pbnQuPGk+UmVnaW9uPC9pPi5hbWF6b25hd3MuY29tLiBXaGVuIHVzaW5nIHRoaXMgYWN0aW9uIHdpdGggYW4gYWNjZXNzIHBvaW50IHRocm91Z2ggdGhlIEFtYXpvbiBXZWIgU2VydmljZXMgU0RLcywgeW91IHByb3ZpZGUgdGhlIGFjY2VzcyBwb2ludCBBUk4gaW4gcGxhY2Ugb2YgdGhlIGJ1Y2tldCBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhY2Nlc3MgcG9pbnQgQVJOcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS91c2luZy1hY2Nlc3MtcG9pbnRzLmh0bWxcIj5Vc2luZyBhY2Nlc3MgcG9pbnRzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPkFjY2VzcyBwb2ludHMgYW5kIE9iamVjdCBMYW1iZGEgYWNjZXNzIHBvaW50cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxiPlMzIG9uIE91dHBvc3RzPC9iPiAtIFdoZW4geW91IHVzZSB0aGlzIGFjdGlvbiB3aXRoIEFtYXpvbiBTMyBvbiBPdXRwb3N0cywgeW91IG11c3QgZGlyZWN0IHJlcXVlc3RzIHRvIHRoZSBTMyBvbiBPdXRwb3N0cyBob3N0bmFtZS4gVGhlIFMzIG9uIE91dHBvc3RzIGhvc3RuYW1lIHRha2VzIHRoZSBmb3JtIDxjb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8aT5BY2Nlc3NQb2ludE5hbWU8L2k+LTxpPkFjY291bnRJZDwvaT4uPGk+b3V0cG9zdElEPC9pPi5zMy1vdXRwb3N0cy48aT5SZWdpb248L2k+LmFtYXpvbmF3cy5jb208L2NvZGU+LiBXaGVuIHlvdSB1c2UgdGhpcyBhY3Rpb24gd2l0aCBTMyBvbiBPdXRwb3N0cyB0aHJvdWdoIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIFNES3MsIHlvdSBwcm92aWRlIHRoZSBPdXRwb3N0cyBhY2Nlc3MgcG9pbnQgQVJOIGluIHBsYWNlIG9mIHRoZSBidWNrZXQgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgUzMgb24gT3V0cG9zdHMgQVJOcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9TM29uT3V0cG9zdHMuaHRtbFwiPldoYXQgaXMgUzMgb24gT3V0cG9zdHM/PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogPHA+Tm90ZTogVG8gc3VwcGx5IHRoZSBNdWx0aS1yZWdpb24gQWNjZXNzIFBvaW50IChNUkFQKSB0byBCdWNrZXQsIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIFwiQGF3cy1zZGsvc2lnbmF0dXJlLXY0LWNydFwiIHBhY2thZ2UgdG8geW91ciBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBnbyB0byBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMja25vd24taXNzdWVzPC9wPlxuICAgKi9cbiAgQnVja2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiA8cD5BIGRlbGltaXRlciBpcyBhIGNoYXJhY3RlciB0aGF0IHlvdSB1c2UgdG8gZ3JvdXAga2V5cy48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzPC9iPiAtIEZvciBkaXJlY3RvcnkgYnVja2V0cywgPGNvZGU+LzwvY29kZT4gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGRlbGltaXRlci48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzIDwvYj4gLSBXaGVuIHlvdSBxdWVyeSA8Y29kZT5MaXN0T2JqZWN0c1YyPC9jb2RlPiB3aXRoIGEgZGVsaW1pdGVyIGR1cmluZyBpbi1wcm9ncmVzcyBtdWx0aXBhcnQgdXBsb2FkcywgdGhlXG4gICAqICAgICAgICAgICAgIDxjb2RlPkNvbW1vblByZWZpeGVzPC9jb2RlPiByZXNwb25zZSBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIHByZWZpeGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW4tcHJvZ3Jlc3MgbXVsdGlwYXJ0IHVwbG9hZHMuXG4gICAqICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG11bHRpcGFydCB1cGxvYWRzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L21wdW92ZXJ2aWV3Lmh0bWxcIj5NdWx0aXBhcnQgVXBsb2FkIE92ZXJ2aWV3PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgRGVsaW1pdGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+RW5jb2RpbmcgdHlwZSB1c2VkIGJ5IEFtYXpvbiBTMyB0byBlbmNvZGUgdGhlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3Qta2V5cy5odG1sXCI+b2JqZWN0IGtleXM8L2E+IGluIHRoZSByZXNwb25zZS5cbiAgICogICAgICAgICAgUmVzcG9uc2VzIGFyZSBlbmNvZGVkIG9ubHkgaW4gVVRGLTguIEFuIG9iamVjdCBrZXkgY2FuIGNvbnRhaW4gYW55IFVuaWNvZGUgY2hhcmFjdGVyLlxuICAgKiAgICAgICAgICBIb3dldmVyLCB0aGUgWE1MIDEuMCBwYXJzZXIgY2FuJ3QgcGFyc2UgY2VydGFpbiBjaGFyYWN0ZXJzLCBzdWNoIGFzIGNoYXJhY3RlcnMgd2l0aCBhblxuICAgKiAgICAgICAgICBBU0NJSSB2YWx1ZSBmcm9tIDAgdG8gMTAuIEZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlbid0IHN1cHBvcnRlZCBpbiBYTUwgMS4wLCB5b3UgY2FuIGFkZCB0aGlzXG4gICAqICAgICAgICAgIHBhcmFtZXRlciB0byByZXF1ZXN0IHRoYXQgQW1hem9uIFMzIGVuY29kZSB0aGUga2V5cyBpbiB0aGUgcmVzcG9uc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0XG4gICAqICAgICAgICAgIGNoYXJhY3RlcnMgdG8gYXZvaWQgaW4gb2JqZWN0IGtleSBuYW1lcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3Qta2V5cy5odG1sI29iamVjdC1rZXktZ3VpZGVsaW5lc1wiPk9iamVjdCBrZXkgbmFtaW5nXG4gICAqICAgICAgICAgICAgIGd1aWRlbGluZXM8L2E+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPldoZW4gdXNpbmcgdGhlIFVSTCBlbmNvZGluZyB0eXBlLCBub24tQVNDSUkgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkIGluIGFuIG9iamVjdCdzXG4gICAqICAgICAgICAgICAgIGtleSBuYW1lIHdpbGwgYmUgcGVyY2VudC1lbmNvZGVkIGFjY29yZGluZyB0byBVVEYtOCBjb2RlIHZhbHVlcy4gRm9yIGV4YW1wbGUsIHRoZSBvYmplY3RcbiAgICogICAgICAgICAgICAgPGNvZGU+dGVzdF9maWxlKDMpLnBuZzwvY29kZT4gd2lsbCBhcHBlYXIgYXNcbiAgICogICAgICAgICAgICAgPGNvZGU+dGVzdF9maWxlJTI4MyUyOS5wbmc8L2NvZGU+LjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgRW5jb2RpbmdUeXBlPzogRW5jb2RpbmdUeXBlO1xuICAvKipcbiAgICogPHA+U2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Yga2V5cyByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2UuIEJ5IGRlZmF1bHQsIHRoZSBhY3Rpb24gcmV0dXJuc1xuICAgKiAgICAgICAgICB1cCB0byAxLDAwMCBrZXkgbmFtZXMuIFRoZSByZXNwb25zZSBtaWdodCBjb250YWluIGZld2VyIGtleXMgYnV0IHdpbGwgbmV2ZXIgY29udGFpblxuICAgKiAgICAgICAgICBtb3JlLjwvcD5cbiAgICovXG4gIE1heEtleXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiA8cD5MaW1pdHMgdGhlIHJlc3BvbnNlIHRvIGtleXMgdGhhdCBiZWdpbiB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICAgICA8Yj5EaXJlY3RvcnkgYnVja2V0czwvYj4gLSBGb3IgZGlyZWN0b3J5IGJ1Y2tldHMsIG9ubHkgcHJlZml4ZXMgdGhhdCBlbmQgaW4gYSBkZWxpbWl0ZXIgKDxjb2RlPi88L2NvZGU+KSBhcmUgc3VwcG9ydGVkLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgUHJlZml4Pzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+XG4gICAqICAgICAgICAgICAgIDxjb2RlPkNvbnRpbnVhdGlvblRva2VuPC9jb2RlPiBpbmRpY2F0ZXMgdG8gQW1hem9uIFMzIHRoYXQgdGhlIGxpc3QgaXMgYmVpbmcgY29udGludWVkIG9uXG4gICAqICAgICAgICAgIHRoaXMgYnVja2V0IHdpdGggYSB0b2tlbi4gPGNvZGU+Q29udGludWF0aW9uVG9rZW48L2NvZGU+IGlzIG9iZnVzY2F0ZWQgYW5kIGlzIG5vdCBhIHJlYWxcbiAgICogICAgICAgICAga2V5LiBZb3UgY2FuIHVzZSB0aGlzIDxjb2RlPkNvbnRpbnVhdGlvblRva2VuPC9jb2RlPiBmb3IgcGFnaW5hdGlvbiBvZiB0aGUgbGlzdCByZXN1bHRzLiAgPC9wPlxuICAgKi9cbiAgQ29udGludWF0aW9uVG9rZW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgb3duZXIgZmllbGQgaXMgbm90IHByZXNlbnQgaW4gPGNvZGU+TGlzdE9iamVjdHNWMjwvY29kZT4gYnkgZGVmYXVsdC4gSWYgeW91IHdhbnQgdG9cbiAgICogICAgICAgICAgcmV0dXJuIHRoZSBvd25lciBmaWVsZCB3aXRoIGVhY2gga2V5IGluIHRoZSByZXN1bHQsIHRoZW4gc2V0IHRoZSA8Y29kZT5GZXRjaE93bmVyPC9jb2RlPlxuICAgKiAgICAgICAgICBmaWVsZCB0byA8Y29kZT50cnVlPC9jb2RlPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gRm9yIGRpcmVjdG9yeSBidWNrZXRzLCB0aGUgYnVja2V0IG93bmVyIGlzIHJldHVybmVkIGFzIHRoZSBvYmplY3Qgb3duZXIgZm9yIGFsbCBvYmplY3RzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgRmV0Y2hPd25lcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiA8cD5TdGFydEFmdGVyIGlzIHdoZXJlIHlvdSB3YW50IEFtYXpvbiBTMyB0byBzdGFydCBsaXN0aW5nIGZyb20uIEFtYXpvbiBTMyBzdGFydHMgbGlzdGluZyBhZnRlciB0aGlzXG4gICAqICAgICAgICAgIHNwZWNpZmllZCBrZXkuIFN0YXJ0QWZ0ZXIgY2FuIGJlIGFueSBrZXkgaW4gdGhlIGJ1Y2tldC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTdGFydEFmdGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+Q29uZmlybXMgdGhhdCB0aGUgcmVxdWVzdGVyIGtub3dzIHRoYXQgc2hlIG9yIGhlIHdpbGwgYmUgY2hhcmdlZCBmb3IgdGhlIGxpc3Qgb2JqZWN0c1xuICAgKiAgICAgICAgICByZXF1ZXN0IGluIFYyIHN0eWxlLiBCdWNrZXQgb3duZXJzIG5lZWQgbm90IHNwZWNpZnkgdGhpcyBwYXJhbWV0ZXIgaW4gdGhlaXJcbiAgICogICAgICAgICAgcmVxdWVzdHMuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgUmVxdWVzdFBheWVyPzogUmVxdWVzdFBheWVyO1xuICAvKipcbiAgICogPHA+VGhlIGFjY291bnQgSUQgb2YgdGhlIGV4cGVjdGVkIGJ1Y2tldCBvd25lci4gSWYgdGhlIGFjY291bnQgSUQgdGhhdCB5b3UgcHJvdmlkZSBkb2VzIG5vdCBtYXRjaCB0aGUgYWN0dWFsIG93bmVyIG9mIHRoZSBidWNrZXQsIHRoZSByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgc3RhdHVzIGNvZGUgPGNvZGU+NDAzIEZvcmJpZGRlbjwvY29kZT4gKGFjY2VzcyBkZW5pZWQpLjwvcD5cbiAgICovXG4gIEV4cGVjdGVkQnVja2V0T3duZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIG9wdGlvbmFsIGZpZWxkcyB0aGF0IHlvdSB3YW50IHJldHVybmVkIGluIHRoZSByZXNwb25zZS4gRmllbGRzIHRoYXQgeW91IGRvXG4gICAqICAgICAgICAgIG5vdCBzcGVjaWZ5IGFyZSBub3QgcmV0dXJuZWQuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgT3B0aW9uYWxPYmplY3RBdHRyaWJ1dGVzPzogT3B0aW9uYWxPYmplY3RBdHRyaWJ1dGVzW107XG59XG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0Q2hhcmdlZCA9IHtcbiAgcmVxdWVzdGVyOiAncmVxdWVzdGVyJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RDaGFyZ2VkID0gKHR5cGVvZiBSZXF1ZXN0Q2hhcmdlZClba2V5b2YgdHlwZW9mIFJlcXVlc3RDaGFyZ2VkXTtcblxuZXhwb3J0IGNvbnN0IENoZWNrc3VtQWxnb3JpdGhtSW4gPSB7XG4gIENSQzMyOiAnQ1JDMzInLFxuICBDUkMzMkM6ICdDUkMzMkMnLFxuICBTSEExOiAnU0hBMScsXG4gIFNIQTI1NjogJ1NIQTI1NicsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDaGVja3N1bUFsZ29yaXRobUluID0gKHR5cGVvZiBDaGVja3N1bUFsZ29yaXRobUluKVtrZXlvZiB0eXBlb2YgQ2hlY2tzdW1BbGdvcml0aG1Jbl07XG5cbmV4cG9ydCB0eXBlIENoZWNrc3VtQWxnb3JpdGhtT3V0ID0gc3RyaW5nO1xuXG5leHBvcnQgY29uc3QgT2JqZWN0U3RvcmFnZUNsYXNzID0ge1xuICBERUVQX0FSQ0hJVkU6ICdERUVQX0FSQ0hJVkUnLFxuICBFWFBSRVNTX09ORVpPTkU6ICdFWFBSRVNTX09ORVpPTkUnLFxuICBHTEFDSUVSOiAnR0xBQ0lFUicsXG4gIEdMQUNJRVJfSVI6ICdHTEFDSUVSX0lSJyxcbiAgSU5URUxMSUdFTlRfVElFUklORzogJ0lOVEVMTElHRU5UX1RJRVJJTkcnLFxuICBPTkVaT05FX0lBOiAnT05FWk9ORV9JQScsXG4gIE9VVFBPU1RTOiAnT1VUUE9TVFMnLFxuICBSRURVQ0VEX1JFRFVOREFOQ1k6ICdSRURVQ0VEX1JFRFVOREFOQ1knLFxuICBTTk9XOiAnU05PVycsXG4gIFNUQU5EQVJEOiAnU1RBTkRBUkQnLFxuICBTVEFOREFSRF9JQTogJ1NUQU5EQVJEX0lBJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE9iamVjdFN0b3JhZ2VDbGFzcyA9ICh0eXBlb2YgT2JqZWN0U3RvcmFnZUNsYXNzKVtrZXlvZiB0eXBlb2YgT2JqZWN0U3RvcmFnZUNsYXNzXTtcblxuZXhwb3J0IGludGVyZmFjZSBPd25lciB7XG4gIC8qKlxuICAgKiA8cD5Db250YWluZXIgZm9yIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIG93bmVyLiBUaGlzIHZhbHVlIGlzIG9ubHkgc3VwcG9ydGVkIGluIHRoZVxuICAgKiAgICAgICAgICBmb2xsb3dpbmcgQW1hem9uIFdlYiBTZXJ2aWNlcyBSZWdpb25zOjwvcD5cbiAgICogICAgICAgICAgPHVsPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPlVTIEVhc3QgKE4uIFZpcmdpbmlhKTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5VUyBXZXN0IChOLiBDYWxpZm9ybmlhKTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5VUyBXZXN0IChPcmVnb24pPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPkFzaWEgUGFjaWZpYyAoU2luZ2Fwb3JlKTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5Bc2lhIFBhY2lmaWMgKFN5ZG5leSk8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+QXNpYSBQYWNpZmljIChUb2t5byk8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+RXVyb3BlIChJcmVsYW5kKTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5Tb3V0aCBBbWVyaWNhIChTw6NvIFBhdWxvKTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIERpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiA8cD5Db250YWluZXIgZm9yIHRoZSBJRCBvZiB0aGUgb3duZXIuPC9wPlxuICAgKi9cbiAgSUQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdG9yZVN0YXR1cyB7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgd2hldGhlciB0aGUgb2JqZWN0IGlzIGN1cnJlbnRseSBiZWluZyByZXN0b3JlZC4gSWYgdGhlIG9iamVjdCByZXN0b3JhdGlvbiBpc1xuICAgKiAgICAgICAgICBpbiBwcm9ncmVzcywgdGhlIGhlYWRlciByZXR1cm5zIHRoZSB2YWx1ZSA8Y29kZT5UUlVFPC9jb2RlPi4gRm9yIGV4YW1wbGU6PC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+eC1hbXotb3B0aW9uYWwtb2JqZWN0LWF0dHJpYnV0ZXM6IElzUmVzdG9yZUluUHJvZ3Jlc3M9XCJ0cnVlXCI8L2NvZGU+XG4gICAqICAgICAgICAgIDwvcD5cbiAgICogICAgICAgICAgPHA+SWYgdGhlIG9iamVjdCByZXN0b3JhdGlvbiBoYXMgY29tcGxldGVkLCB0aGUgaGVhZGVyIHJldHVybnMgdGhlIHZhbHVlXG4gICAqICAgICAgICAgIDxjb2RlPkZBTFNFPC9jb2RlPi4gRm9yIGV4YW1wbGU6PC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+eC1hbXotb3B0aW9uYWwtb2JqZWN0LWF0dHJpYnV0ZXM6IElzUmVzdG9yZUluUHJvZ3Jlc3M9XCJmYWxzZVwiLFxuICAgKiAgICAgICAgICAgICBSZXN0b3JlRXhwaXJ5RGF0ZT1cIjIwMTItMTItMjFUMDA6MDA6MDAuMDAwWlwiPC9jb2RlPlxuICAgKiAgICAgICAgICA8L3A+XG4gICAqICAgICAgICAgIDxwPklmIHRoZSBvYmplY3QgaGFzbid0IGJlZW4gcmVzdG9yZWQsIHRoZXJlIGlzIG5vIGhlYWRlciByZXNwb25zZS48L3A+XG4gICAqL1xuICBJc1Jlc3RvcmVJblByb2dyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogPHA+SW5kaWNhdGVzIHdoZW4gdGhlIHJlc3RvcmVkIGNvcHkgd2lsbCBleHBpcmUuIFRoaXMgdmFsdWUgaXMgcG9wdWxhdGVkIG9ubHkgaWYgdGhlIG9iamVjdFxuICAgKiAgICAgICAgICBoYXMgYWxyZWFkeSBiZWVuIHJlc3RvcmVkLiBGb3IgZXhhbXBsZTo8L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT54LWFtei1vcHRpb25hbC1vYmplY3QtYXR0cmlidXRlczogSXNSZXN0b3JlSW5Qcm9ncmVzcz1cImZhbHNlXCIsXG4gICAqICAgICAgICAgICAgIFJlc3RvcmVFeHBpcnlEYXRlPVwiMjAxMi0xMi0yMVQwMDowMDowMC4wMDBaXCI8L2NvZGU+XG4gICAqICAgICAgICAgIDwvcD5cbiAgICovXG4gIFJlc3RvcmVFeHBpcnlEYXRlPzogRGF0ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gb25lIG9mIDIgdHlwZXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSBwYXNzaW5nIHZhbHVlcyBpbiBvciBvdXRcbiAqXG4gKiBVc2UgYXMgZm9sbG93czpcbiAqXG4gKiBgYGB0c1xuICogaW50ZXJmYWNlIENvbnRhaW5pbmdUeXBlPERpcj4ge1xuICogICAgZmllbGQ6IEluT3V0PERpciwgRmllbGRUeXBlSW4sIEZpZWxkVHlwZU91dD47XG4gKiB9XG4gKiBgYGBcbiAqL1xudHlwZSBJbk91dDxEaXIsIEksIE8+ID0gRGlyIGV4dGVuZHMgJ2luJyA/IEkgOiBEaXIgZXh0ZW5kcyAnb3V0JyA/IE8gOiBuZXZlcjtcblxuZXhwb3J0IGludGVyZmFjZSBfT2JqZWN0PERpcj4ge1xuICAvKipcbiAgICogPHA+VGhlIG5hbWUgdGhhdCB5b3UgYXNzaWduIHRvIGFuIG9iamVjdC4gWW91IHVzZSB0aGUgb2JqZWN0IGtleSB0byByZXRyaWV2ZSB0aGVcbiAgICogICAgICAgICAgb2JqZWN0LjwvcD5cbiAgICovXG4gIEtleT86IHN0cmluZztcblxuICAvKipcbiAgICogPHA+Q3JlYXRpb24gZGF0ZSBvZiB0aGUgb2JqZWN0LjwvcD5cbiAgICovXG4gIExhc3RNb2RpZmllZD86IERhdGU7XG5cbiAgLyoqXG4gICAqIDxwPlRoZSBlbnRpdHkgdGFnIGlzIGEgaGFzaCBvZiB0aGUgb2JqZWN0LiBUaGUgRVRhZyByZWZsZWN0cyBjaGFuZ2VzIG9ubHkgdG8gdGhlIGNvbnRlbnRzXG4gICAqICAgICAgICAgIG9mIGFuIG9iamVjdCwgbm90IGl0cyBtZXRhZGF0YS4gVGhlIEVUYWcgbWF5IG9yIG1heSBub3QgYmUgYW4gTUQ1IGRpZ2VzdCBvZiB0aGUgb2JqZWN0XG4gICAqICAgICAgICAgIGRhdGEuIFdoZXRoZXIgb3Igbm90IGl0IGlzIGRlcGVuZHMgb24gaG93IHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQgYW5kIGhvdyBpdCBpcyBlbmNyeXB0ZWQgYXNcbiAgICogICAgICAgICAgZGVzY3JpYmVkIGJlbG93OjwvcD5cbiAgICogICAgICAgICAgPHVsPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPk9iamVjdHMgY3JlYXRlZCBieSB0aGUgUFVUIE9iamVjdCwgUE9TVCBPYmplY3QsIG9yIENvcHkgb3BlcmF0aW9uLCBvciB0aHJvdWdoIHRoZVxuICAgKiAgICAgICAgICAgICAgICBBbWF6b24gV2ViIFNlcnZpY2VzIE1hbmFnZW1lbnQgQ29uc29sZSwgYW5kIGFyZSBlbmNyeXB0ZWQgYnkgU1NFLVMzIG9yIHBsYWludGV4dCwgaGF2ZSBFVGFncyB0aGF0XG4gICAqICAgICAgICAgICAgICAgIGFyZSBhbiBNRDUgZGlnZXN0IG9mIHRoZWlyIG9iamVjdCBkYXRhLjwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5PYmplY3RzIGNyZWF0ZWQgYnkgdGhlIFBVVCBPYmplY3QsIFBPU1QgT2JqZWN0LCBvciBDb3B5IG9wZXJhdGlvbiwgb3IgdGhyb3VnaCB0aGVcbiAgICogICAgICAgICAgICAgICAgQW1hem9uIFdlYiBTZXJ2aWNlcyBNYW5hZ2VtZW50IENvbnNvbGUsIGFuZCBhcmUgZW5jcnlwdGVkIGJ5IFNTRS1DIG9yIFNTRS1LTVMsIGhhdmUgRVRhZ3MgdGhhdCBhcmVcbiAgICogICAgICAgICAgICAgICAgbm90IGFuIE1ENSBkaWdlc3Qgb2YgdGhlaXIgb2JqZWN0IGRhdGEuPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPklmIGFuIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGVpdGhlciB0aGUgTXVsdGlwYXJ0IFVwbG9hZCBvciBQYXJ0IENvcHkgb3BlcmF0aW9uLCB0aGVcbiAgICogICAgICAgICAgICAgICAgRVRhZyBpcyBub3QgYW4gTUQ1IGRpZ2VzdCwgcmVnYXJkbGVzcyBvZiB0aGUgbWV0aG9kIG9mIGVuY3J5cHRpb24uIElmIGFuIG9iamVjdCBpc1xuICAgKiAgICAgICAgICAgICAgICBsYXJnZXIgdGhhbiAxNiBNQiwgdGhlIEFtYXpvbiBXZWIgU2VydmljZXMgTWFuYWdlbWVudCBDb25zb2xlIHdpbGwgdXBsb2FkIG9yIGNvcHkgdGhhdCBvYmplY3QgYXMgYVxuICAgKiAgICAgICAgICAgICAgICBNdWx0aXBhcnQgVXBsb2FkLCBhbmQgdGhlcmVmb3JlIHRoZSBFVGFnIHdpbGwgbm90IGJlIGFuIE1ENSBkaWdlc3QuPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzPC9iPiAtIE1ENSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgRVRhZz86IHN0cmluZztcblxuICAvKipcbiAgICogPHA+VGhlIGFsZ29yaXRobSB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGNoZWNrc3VtIG9mIHRoZSBvYmplY3QuPC9wPlxuICAgKi9cbiAgQ2hlY2tzdW1BbGdvcml0aG0/OiBJbk91dDxEaXIsIENoZWNrc3VtQWxnb3JpdGhtSW4sIENoZWNrc3VtQWxnb3JpdGhtT3V0PltdO1xuXG4gIC8qKlxuICAgKiA8cD5TaXplIGluIGJ5dGVzIG9mIHRoZSBvYmplY3Q8L3A+XG4gICAqL1xuICBTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgY2xhc3Mgb2Ygc3RvcmFnZSB1c2VkIHRvIHN0b3JlIHRoZSBvYmplY3QuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzPC9iPiAtIE9ubHkgdGhlIFMzIEV4cHJlc3MgT25lIFpvbmUgc3RvcmFnZSBjbGFzcyBpcyBzdXBwb3J0ZWQgYnkgZGlyZWN0b3J5IGJ1Y2tldHMgdG8gc3RvcmUgb2JqZWN0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFN0b3JhZ2VDbGFzcz86IE9iamVjdFN0b3JhZ2VDbGFzcztcblxuICAvKipcbiAgICogPHA+VGhlIG93bmVyIG9mIHRoZSBvYmplY3Q8L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gVGhlIGJ1Y2tldCBvd25lciBpcyByZXR1cm5lZCBhcyB0aGUgb2JqZWN0IG93bmVyLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgT3duZXI/OiBPd25lcjtcblxuICAvKipcbiAgICogPHA+U3BlY2lmaWVzIHRoZSByZXN0b3JhdGlvbiBzdGF0dXMgb2YgYW4gb2JqZWN0LiBPYmplY3RzIGluIGNlcnRhaW4gc3RvcmFnZSBjbGFzc2VzIG11c3RcbiAgICogICAgICAgICAgYmUgcmVzdG9yZWQgYmVmb3JlIHRoZXkgY2FuIGJlIHJldHJpZXZlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2Ugc3RvcmFnZSBjbGFzc2VzXG4gICAqICAgICAgICAgIGFuZCBob3cgdG8gd29yayB3aXRoIGFyY2hpdmVkIG9iamVjdHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYXJjaGl2ZWQtb2JqZWN0cy5odG1sXCI+IFdvcmtpbmcgd2l0aCBhcmNoaXZlZFxuICAgKiAgICAgICAgICAgICBvYmplY3RzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy4gT25seSB0aGUgUzMgRXhwcmVzcyBPbmUgWm9uZSBzdG9yYWdlIGNsYXNzIGlzIHN1cHBvcnRlZCBieSBkaXJlY3RvcnkgYnVja2V0cyB0byBzdG9yZSBvYmplY3RzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgUmVzdG9yZVN0YXR1cz86IFJlc3RvcmVTdGF0dXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uUHJlZml4IHtcbiAgLyoqXG4gICAqIDxwPkNvbnRhaW5lciBmb3IgdGhlIHNwZWNpZmllZCBjb21tb24gcHJlZml4LjwvcD5cbiAgICovXG4gIFByZWZpeD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0T2JqZWN0c1YyT3V0cHV0IHtcbiAgLyoqXG4gICAqIDxwPlNldCB0byA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYWxsIG9mIHRoZSByZXN1bHRzIHdlcmUgcmV0dXJuZWQuIFNldCB0byA8Y29kZT50cnVlPC9jb2RlPlxuICAgKiAgICAgICAgICBpZiBtb3JlIGtleXMgYXJlIGF2YWlsYWJsZSB0byByZXR1cm4uIElmIHRoZSBudW1iZXIgb2YgcmVzdWx0cyBleGNlZWRzIHRoYXQgc3BlY2lmaWVkIGJ5XG4gICAqICAgICAgICAgICAgIDxjb2RlPk1heEtleXM8L2NvZGU+LCBhbGwgb2YgdGhlIHJlc3VsdHMgbWlnaHQgbm90IGJlIHJldHVybmVkLjwvcD5cbiAgICovXG4gIElzVHJ1bmNhdGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIDxwPk1ldGFkYXRhIGFib3V0IGVhY2ggb2JqZWN0IHJldHVybmVkLjwvcD5cbiAgICovXG4gIENvbnRlbnRzPzogX09iamVjdDwnb3V0Jz5bXTtcbiAgLyoqXG4gICAqIDxwPlRoZSBidWNrZXQgbmFtZS48L3A+XG4gICAqL1xuICBOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+S2V5cyB0aGF0IGJlZ2luIHdpdGggdGhlIGluZGljYXRlZCBwcmVmaXguPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzPC9iPiAtIEZvciBkaXJlY3RvcnkgYnVja2V0cywgb25seSBwcmVmaXhlcyB0aGF0IGVuZCBpbiBhIGRlbGltaXRlciAoPGNvZGU+LzwvY29kZT4pIGFyZSBzdXBwb3J0ZWQuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5DYXVzZXMga2V5cyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgc3RyaW5nIGJldHdlZW4gdGhlIDxjb2RlPnByZWZpeDwvY29kZT4gYW5kIHRoZSBmaXJzdFxuICAgKiAgICAgICAgICBvY2N1cnJlbmNlIG9mIHRoZSBkZWxpbWl0ZXIgdG8gYmUgcm9sbGVkIHVwIGludG8gYSBzaW5nbGUgcmVzdWx0IGVsZW1lbnQgaW4gdGhlXG4gICAqICAgICAgICAgICAgIDxjb2RlPkNvbW1vblByZWZpeGVzPC9jb2RlPiBjb2xsZWN0aW9uLiBUaGVzZSByb2xsZWQtdXAga2V5cyBhcmUgbm90IHJldHVybmVkIGVsc2V3aGVyZVxuICAgKiAgICAgICAgICBpbiB0aGUgcmVzcG9uc2UuIEVhY2ggcm9sbGVkLXVwIHJlc3VsdCBjb3VudHMgYXMgb25seSBvbmUgcmV0dXJuIGFnYWluc3QgdGhlXG4gICAqICAgICAgICAgICAgIDxjb2RlPk1heEtleXM8L2NvZGU+IHZhbHVlLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICAgICA8Yj5EaXJlY3RvcnkgYnVja2V0czwvYj4gLSBGb3IgZGlyZWN0b3J5IGJ1Y2tldHMsIDxjb2RlPi88L2NvZGU+IGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBkZWxpbWl0ZXIuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBEZWxpbWl0ZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBrZXlzIHJldHVybmVkIGluIHRoZSByZXNwb25zZS4gQnkgZGVmYXVsdCwgdGhlIGFjdGlvbiByZXR1cm5zXG4gICAqICAgICAgICAgIHVwIHRvIDEsMDAwIGtleSBuYW1lcy4gVGhlIHJlc3BvbnNlIG1pZ2h0IGNvbnRhaW4gZmV3ZXIga2V5cyBidXQgd2lsbCBuZXZlciBjb250YWluXG4gICAqICAgICAgICAgIG1vcmUuPC9wPlxuICAgKi9cbiAgTWF4S2V5cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIDxwPkFsbCBvZiB0aGUga2V5cyAodXAgdG8gMSwwMDApIHRoYXQgc2hhcmUgdGhlIHNhbWUgcHJlZml4IGFyZSBncm91cGVkIHRvZ2V0aGVyLiBXaGVuIGNvdW50aW5nIHRoZSB0b3RhbCBudW1iZXJzIG9mIHJldHVybnMgYnkgdGhpcyBBUEkgb3BlcmF0aW9uLFxuICAgKiAgICAgICAgICB0aGlzIGdyb3VwIG9mIGtleXMgaXMgY29uc2lkZXJlZCBhcyBvbmUgaXRlbS48L3A+XG4gICAqICAgICAgICAgIDxwPkEgcmVzcG9uc2UgY2FuIGNvbnRhaW4gPGNvZGU+Q29tbW9uUHJlZml4ZXM8L2NvZGU+IG9ubHkgaWYgeW91IHNwZWNpZnkgYVxuICAgKiAgICAgICAgICBkZWxpbWl0ZXIuPC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+Q29tbW9uUHJlZml4ZXM8L2NvZGU+IGNvbnRhaW5zIGFsbCAoaWYgdGhlcmUgYXJlIGFueSkga2V5cyBiZXR3ZWVuXG4gICAqICAgICAgICAgICAgIDxjb2RlPlByZWZpeDwvY29kZT4gYW5kIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHN0cmluZyBzcGVjaWZpZWQgYnkgYVxuICAgKiAgICAgICAgICBkZWxpbWl0ZXIuPC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+Q29tbW9uUHJlZml4ZXM8L2NvZGU+IGxpc3RzIGtleXMgdGhhdCBhY3QgbGlrZSBzdWJkaXJlY3RvcmllcyBpbiB0aGUgZGlyZWN0b3J5XG4gICAqICAgICAgICAgIHNwZWNpZmllZCBieSA8Y29kZT5QcmVmaXg8L2NvZGU+LjwvcD5cbiAgICogICAgICAgICAgPHA+Rm9yIGV4YW1wbGUsIGlmIHRoZSBwcmVmaXggaXMgPGNvZGU+bm90ZXMvPC9jb2RlPiBhbmQgdGhlIGRlbGltaXRlciBpcyBhIHNsYXNoXG4gICAqICAgICAgICAgICAgICg8Y29kZT4vPC9jb2RlPikgYXMgaW4gPGNvZGU+bm90ZXMvc3VtbWVyL2p1bHk8L2NvZGU+LCB0aGUgY29tbW9uIHByZWZpeCBpc1xuICAgKiAgICAgICAgICAgICA8Y29kZT5ub3Rlcy9zdW1tZXIvPC9jb2RlPi4gQWxsIG9mIHRoZSBrZXlzIHRoYXQgcm9sbCB1cCBpbnRvIGEgY29tbW9uIHByZWZpeCBjb3VudCBhcyBhXG4gICAqICAgICAgICAgIHNpbmdsZSByZXR1cm4gd2hlbiBjYWxjdWxhdGluZyB0aGUgbnVtYmVyIG9mIHJldHVybnMuIDwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gRm9yIGRpcmVjdG9yeSBidWNrZXRzLCBvbmx5IHByZWZpeGVzIHRoYXQgZW5kIGluIGEgZGVsaW1pdGVyICg8Y29kZT4vPC9jb2RlPikgYXJlIHN1cHBvcnRlZC48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzIDwvYj4gLSBXaGVuIHlvdSBxdWVyeSA8Y29kZT5MaXN0T2JqZWN0c1YyPC9jb2RlPiB3aXRoIGEgZGVsaW1pdGVyIGR1cmluZyBpbi1wcm9ncmVzcyBtdWx0aXBhcnQgdXBsb2FkcywgdGhlXG4gICAqICAgICAgICAgICAgICAgIDxjb2RlPkNvbW1vblByZWZpeGVzPC9jb2RlPiByZXNwb25zZSBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIHByZWZpeGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW4tcHJvZ3Jlc3MgbXVsdGlwYXJ0IHVwbG9hZHMuXG4gICAqICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG11bHRpcGFydCB1cGxvYWRzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L21wdW92ZXJ2aWV3Lmh0bWxcIj5NdWx0aXBhcnQgVXBsb2FkIE92ZXJ2aWV3PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgQ29tbW9uUHJlZml4ZXM/OiBDb21tb25QcmVmaXhbXTtcbiAgLyoqXG4gICAqIDxwPkVuY29kaW5nIHR5cGUgdXNlZCBieSBBbWF6b24gUzMgdG8gZW5jb2RlIG9iamVjdCBrZXkgbmFtZXMgaW4gdGhlIFhNTCByZXNwb25zZS48L3A+XG4gICAqICAgICAgICAgIDxwPklmIHlvdSBzcGVjaWZ5IHRoZSA8Y29kZT5lbmNvZGluZy10eXBlPC9jb2RlPiByZXF1ZXN0IHBhcmFtZXRlciwgQW1hem9uIFMzIGluY2x1ZGVzIHRoaXNcbiAgICogICAgICAgICAgZWxlbWVudCBpbiB0aGUgcmVzcG9uc2UsIGFuZCByZXR1cm5zIGVuY29kZWQga2V5IG5hbWUgdmFsdWVzIGluIHRoZSBmb2xsb3dpbmcgcmVzcG9uc2VcbiAgICogICAgICAgICAgZWxlbWVudHM6PC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+RGVsaW1pdGVyLCBQcmVmaXgsIEtleSw8L2NvZGU+IGFuZCA8Y29kZT5TdGFydEFmdGVyPC9jb2RlPi48L3A+XG4gICAqL1xuICBFbmNvZGluZ1R5cGU/OiBFbmNvZGluZ1R5cGU7XG4gIC8qKlxuICAgKiA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+S2V5Q291bnQ8L2NvZGU+IGlzIHRoZSBudW1iZXIgb2Yga2V5cyByZXR1cm5lZCB3aXRoIHRoaXMgcmVxdWVzdC5cbiAgICogICAgICAgICAgICAgPGNvZGU+S2V5Q291bnQ8L2NvZGU+IHdpbGwgYWx3YXlzIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgPGNvZGU+TWF4S2V5czwvY29kZT5cbiAgICogICAgICAgICAgZmllbGQuIEZvciBleGFtcGxlLCBpZiB5b3UgYXNrIGZvciA1MCBrZXlzLCB5b3VyIHJlc3VsdCB3aWxsIGluY2x1ZGUgNTAga2V5cyBvclxuICAgKiAgICAgICAgICBmZXdlci48L3A+XG4gICAqL1xuICBLZXlDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIDxwPiBJZiA8Y29kZT5Db250aW51YXRpb25Ub2tlbjwvY29kZT4gd2FzIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCwgaXQgaXMgaW5jbHVkZWQgaW4gdGhlXG4gICAqICAgICAgICAgIHJlc3BvbnNlLiBZb3UgY2FuIHVzZSB0aGUgcmV0dXJuZWQgPGNvZGU+Q29udGludWF0aW9uVG9rZW48L2NvZGU+IGZvciBwYWdpbmF0aW9uIG9mIHRoZSBsaXN0IHJlc3BvbnNlLiBZb3UgY2FuIHVzZSB0aGlzIDxjb2RlPkNvbnRpbnVhdGlvblRva2VuPC9jb2RlPiBmb3IgcGFnaW5hdGlvbiBvZiB0aGUgbGlzdCByZXN1bHRzLiA8L3A+XG4gICAqL1xuICBDb250aW51YXRpb25Ub2tlbj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT5OZXh0Q29udGludWF0aW9uVG9rZW48L2NvZGU+IGlzIHNlbnQgd2hlbiA8Y29kZT5pc1RydW5jYXRlZDwvY29kZT4gaXMgdHJ1ZSwgd2hpY2hcbiAgICogICAgICAgICAgbWVhbnMgdGhlcmUgYXJlIG1vcmUga2V5cyBpbiB0aGUgYnVja2V0IHRoYXQgY2FuIGJlIGxpc3RlZC4gVGhlIG5leHQgbGlzdCByZXF1ZXN0cyB0byBBbWF6b24gUzNcbiAgICogICAgICAgICAgY2FuIGJlIGNvbnRpbnVlZCB3aXRoIHRoaXMgPGNvZGU+TmV4dENvbnRpbnVhdGlvblRva2VuPC9jb2RlPi5cbiAgICogICAgICAgICAgICAgPGNvZGU+TmV4dENvbnRpbnVhdGlvblRva2VuPC9jb2RlPiBpcyBvYmZ1c2NhdGVkIGFuZCBpcyBub3QgYSByZWFsIGtleTwvcD5cbiAgICovXG4gIE5leHRDb250aW51YXRpb25Ub2tlbj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPklmIFN0YXJ0QWZ0ZXIgd2FzIHNlbnQgd2l0aCB0aGUgcmVxdWVzdCwgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFN0YXJ0QWZ0ZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5JZiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVxdWVzdGVyIHdhcyBzdWNjZXNzZnVsbHkgY2hhcmdlZCBmb3IgdGhlXG4gICAqICAgICAgICAgIHJlcXVlc3QuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgUmVxdWVzdENoYXJnZWQ/OiBSZXF1ZXN0Q2hhcmdlZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0T2JqZWN0c1YyQ29tbWFuZE91dHB1dCBleHRlbmRzIExpc3RPYmplY3RzVjJPdXRwdXQsIE1ldGFkYXRhQmVhcmVyIHtcbn1cblxuZXhwb3J0IGNvbnN0IE9iamVjdENhbm5lZEFDTCA9IHtcbiAgYXV0aGVudGljYXRlZF9yZWFkOiAnYXV0aGVudGljYXRlZC1yZWFkJyxcbiAgYXdzX2V4ZWNfcmVhZDogJ2F3cy1leGVjLXJlYWQnLFxuICBidWNrZXRfb3duZXJfZnVsbF9jb250cm9sOiAnYnVja2V0LW93bmVyLWZ1bGwtY29udHJvbCcsXG4gIGJ1Y2tldF9vd25lcl9yZWFkOiAnYnVja2V0LW93bmVyLXJlYWQnLFxuICBwcml2YXRlOiAncHJpdmF0ZScsXG4gIHB1YmxpY19yZWFkOiAncHVibGljLXJlYWQnLFxuICBwdWJsaWNfcmVhZF93cml0ZTogJ3B1YmxpYy1yZWFkLXdyaXRlJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE9iamVjdENhbm5lZEFDTCA9ICh0eXBlb2YgT2JqZWN0Q2FubmVkQUNMKVtrZXlvZiB0eXBlb2YgT2JqZWN0Q2FubmVkQUNMXTtcblxuZXhwb3J0IGNvbnN0IE9iamVjdExvY2tNb2RlID0ge1xuICBDT01QTElBTkNFOiAnQ09NUExJQU5DRScsXG4gIEdPVkVSTkFOQ0U6ICdHT1ZFUk5BTkNFJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE9iamVjdExvY2tNb2RlID0gKHR5cGVvZiBPYmplY3RMb2NrTW9kZSlba2V5b2YgdHlwZW9mIE9iamVjdExvY2tNb2RlXTtcblxuZXhwb3J0IGNvbnN0IE9iamVjdExvY2tMZWdhbEhvbGRTdGF0dXMgPSB7XG4gIE9GRjogJ09GRicsXG4gIE9OOiAnT04nLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja0xlZ2FsSG9sZFN0YXR1cyA9XG4gICh0eXBlb2YgT2JqZWN0TG9ja0xlZ2FsSG9sZFN0YXR1cylba2V5b2YgdHlwZW9mIE9iamVjdExvY2tMZWdhbEhvbGRTdGF0dXNdO1xuXG5leHBvcnQgY29uc3QgU3RvcmFnZUNsYXNzID0ge1xuICBERUVQX0FSQ0hJVkU6ICdERUVQX0FSQ0hJVkUnLFxuICBFWFBSRVNTX09ORVpPTkU6ICdFWFBSRVNTX09ORVpPTkUnLFxuICBHTEFDSUVSOiAnR0xBQ0lFUicsXG4gIEdMQUNJRVJfSVI6ICdHTEFDSUVSX0lSJyxcbiAgSU5URUxMSUdFTlRfVElFUklORzogJ0lOVEVMTElHRU5UX1RJRVJJTkcnLFxuICBPTkVaT05FX0lBOiAnT05FWk9ORV9JQScsXG4gIE9VVFBPU1RTOiAnT1VUUE9TVFMnLFxuICBSRURVQ0VEX1JFRFVOREFOQ1k6ICdSRURVQ0VEX1JFRFVOREFOQ1knLFxuICBTTk9XOiAnU05PVycsXG4gIFNUQU5EQVJEOiAnU1RBTkRBUkQnLFxuICBTVEFOREFSRF9JQTogJ1NUQU5EQVJEX0lBJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VDbGFzcyA9ICh0eXBlb2YgU3RvcmFnZUNsYXNzKVtrZXlvZiB0eXBlb2YgU3RvcmFnZUNsYXNzXTtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eSB7XG4gIC8qKlxuICAgKiBBIGBEYXRlYCB3aGVuIHRoZSBpZGVudGl0eSBvciBjcmVkZW50aWFsIHdpbGwgbm8gbG9uZ2VyIGJlIGFjY2VwdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJhdGlvbj86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlcjxJZGVudGl0eVQgZXh0ZW5kcyBJZGVudGl0eT4ge1xuICAoaWRlbnRpdHlQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8SWRlbnRpdHlUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBd3NDcmVkZW50aWFsSWRlbnRpdHkgZXh0ZW5kcyBJZGVudGl0eSB7XG4gIC8qKlxuICAgKiBBV1MgYWNjZXNzIGtleSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzS2V5SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEFXUyBzZWNyZXQgYWNjZXNzIGtleVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0QWNjZXNzS2V5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIHNlY3VyaXR5IG9yIHNlc3Npb24gdG9rZW4gdG8gdXNlIHdpdGggdGhlc2UgY3JlZGVudGlhbHMuIFVzdWFsbHlcbiAgICogcHJlc2VudCBmb3IgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblRva2VuPzogc3RyaW5nO1xuICAvKipcbiAgICogQVdTIGNyZWRlbnRpYWwgc2NvcGUgZm9yIHRoaXMgc2V0IG9mIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFNjb3BlPzogc3RyaW5nO1xuICAvKipcbiAgICogQVdTIGFjY291bnRJZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIgPSBJZGVudGl0eVByb3ZpZGVyPEF3c0NyZWRlbnRpYWxJZGVudGl0eT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHV0T2JqZWN0UmVxdWVzdCB7XG4gIC8qKlxuICAgKiA8cD5UaGUgY2FubmVkIEFDTCB0byBhcHBseSB0byB0aGUgb2JqZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9hY2wtb3ZlcnZpZXcuaHRtbCNDYW5uZWRBQ0xcIj5DYW5uZWRcbiAgICogICAgICAgICAgQUNMPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPHA+V2hlbiBhZGRpbmcgYSBuZXcgb2JqZWN0LCB5b3UgY2FuIHVzZSBoZWFkZXJzIHRvIGdyYW50IEFDTC1iYXNlZCBwZXJtaXNzaW9ucyB0b1xuICAgKiAgICAgICAgICBpbmRpdmlkdWFsIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudHMgb3IgdG8gcHJlZGVmaW5lZCBncm91cHMgZGVmaW5lZCBieSBBbWF6b24gUzMuIFRoZXNlIHBlcm1pc3Npb25zIGFyZVxuICAgKiAgICAgICAgICB0aGVuIGFkZGVkIHRvIHRoZSBBQ0wgb24gdGhlIG9iamVjdC4gQnkgZGVmYXVsdCwgYWxsIG9iamVjdHMgYXJlIHByaXZhdGUuIE9ubHkgdGhlIG93bmVyXG4gICAqICAgICAgICAgIGhhcyBmdWxsIGFjY2VzcyBjb250cm9sLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9hY2wtb3ZlcnZpZXcuaHRtbFwiPkFjY2VzcyBDb250cm9sIExpc3QgKEFDTCkgT3ZlcnZpZXc8L2E+XG4gICAqICAgICAgICAgIGFuZCA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvYWNsLXVzaW5nLXJlc3QtYXBpLmh0bWxcIj5NYW5hZ2luZ1xuICAgKiAgICAgICAgICAgICBBQ0xzIFVzaW5nIHRoZSBSRVNUIEFQSTwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxwPklmIHRoZSBidWNrZXQgdGhhdCB5b3UncmUgdXBsb2FkaW5nIG9iamVjdHMgdG8gdXNlcyB0aGUgYnVja2V0IG93bmVyIGVuZm9yY2VkIHNldHRpbmdcbiAgICogICAgICAgICAgZm9yIFMzIE9iamVjdCBPd25lcnNoaXAsIEFDTHMgYXJlIGRpc2FibGVkIGFuZCBubyBsb25nZXIgYWZmZWN0IHBlcm1pc3Npb25zLiBCdWNrZXRzIHRoYXRcbiAgICogICAgICAgICAgdXNlIHRoaXMgc2V0dGluZyBvbmx5IGFjY2VwdCBQVVQgcmVxdWVzdHMgdGhhdCBkb24ndCBzcGVjaWZ5IGFuIEFDTCBvciBQVVQgcmVxdWVzdHMgdGhhdFxuICAgKiAgICAgICAgICBzcGVjaWZ5IGJ1Y2tldCBvd25lciBmdWxsIGNvbnRyb2wgQUNMcywgc3VjaCBhcyB0aGUgPGNvZGU+YnVja2V0LW93bmVyLWZ1bGwtY29udHJvbDwvY29kZT5cbiAgICogICAgICAgICAgY2FubmVkIEFDTCBvciBhbiBlcXVpdmFsZW50IGZvcm0gb2YgdGhpcyBBQ0wgZXhwcmVzc2VkIGluIHRoZSBYTUwgZm9ybWF0LiBQVVQgcmVxdWVzdHMgdGhhdFxuICAgKiAgICAgICAgICBjb250YWluIG90aGVyIEFDTHMgKGZvciBleGFtcGxlLCBjdXN0b20gZ3JhbnRzIHRvIGNlcnRhaW4gQW1hem9uIFdlYiBTZXJ2aWNlcyBhY2NvdW50cykgZmFpbCBhbmQgcmV0dXJuIGFcbiAgICogICAgICAgICAgPGNvZGU+NDAwPC9jb2RlPiBlcnJvciB3aXRoIHRoZSBlcnJvciBjb2RlIDxjb2RlPkFjY2Vzc0NvbnRyb2xMaXN0Tm90U3VwcG9ydGVkPC9jb2RlPi5cbiAgICogICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYWJvdXQtb2JqZWN0LW93bmVyc2hpcC5odG1sXCI+IENvbnRyb2xsaW5nIG93bmVyc2hpcCBvZlxuICAgKiAgICAgICAgICAgICBvYmplY3RzIGFuZCBkaXNhYmxpbmcgQUNMczwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQW1hem9uIFMzIG9uIE91dHBvc3RzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgQUNMPzogT2JqZWN0Q2FubmVkQUNMO1xuICAvKipcbiAgICogPHA+T2JqZWN0IGRhdGEuPC9wPlxuICAgKi9cbiAgQm9keT86IFJlYWRhYmxlO1xuICAvKipcbiAgICogPHA+VGhlIGJ1Y2tldCBuYW1lIHRvIHdoaWNoIHRoZSBQVVQgYWN0aW9uIHdhcyBpbml0aWF0ZWQuIDwvcD5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzPC9iPiAtIFdoZW4geW91IHVzZSB0aGlzIG9wZXJhdGlvbiB3aXRoIGEgZGlyZWN0b3J5IGJ1Y2tldCwgeW91IG11c3QgdXNlIHZpcnR1YWwtaG9zdGVkLXN0eWxlIHJlcXVlc3RzIGluIHRoZSBmb3JtYXQgPGNvZGU+XG4gICAqICAgICAgICAgICAgICAgIDxpPkJ1Y2tldF9uYW1lPC9pPi5zM2V4cHJlc3MtPGk+YXpfaWQ8L2k+LjxpPnJlZ2lvbjwvaT4uYW1hem9uYXdzLmNvbTwvY29kZT4uIFBhdGgtc3R5bGUgcmVxdWVzdHMgYXJlIG5vdCBzdXBwb3J0ZWQuICBEaXJlY3RvcnkgYnVja2V0IG5hbWVzIG11c3QgYmUgdW5pcXVlIGluIHRoZSBjaG9zZW4gQXZhaWxhYmlsaXR5IFpvbmUuIEJ1Y2tldCBuYW1lcyBtdXN0IGZvbGxvdyB0aGUgZm9ybWF0IDxjb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8aT5idWNrZXRfYmFzZV9uYW1lPC9pPi0tPGk+YXotaWQ8L2k+LS14LXMzPC9jb2RlPiAoZm9yIGV4YW1wbGUsIDxjb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8aT5ET0MtRVhBTVBMRS1CVUNLRVQ8L2k+LS08aT51c3cyLWF6MTwvaT4tLXgtczM8L2NvZGU+KS4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGJ1Y2tldCBuYW1pbmdcbiAgICogICAgICAgICAgcmVzdHJpY3Rpb25zLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2RpcmVjdG9yeS1idWNrZXQtbmFtaW5nLXJ1bGVzLmh0bWxcIj5EaXJlY3RvcnkgYnVja2V0IG5hbWluZ1xuICAgKiAgICAgICAgICAgICBydWxlczwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Yj5BY2Nlc3MgcG9pbnRzPC9iPiAtIFdoZW4geW91IHVzZSB0aGlzIGFjdGlvbiB3aXRoIGFuIGFjY2VzcyBwb2ludCwgeW91IG11c3QgcHJvdmlkZSB0aGUgYWxpYXMgb2YgdGhlIGFjY2VzcyBwb2ludCBpbiBwbGFjZSBvZiB0aGUgYnVja2V0IG5hbWUgb3Igc3BlY2lmeSB0aGUgYWNjZXNzIHBvaW50IEFSTi4gV2hlbiB1c2luZyB0aGUgYWNjZXNzIHBvaW50IEFSTiwgeW91IG11c3QgZGlyZWN0IHJlcXVlc3RzIHRvIHRoZSBhY2Nlc3MgcG9pbnQgaG9zdG5hbWUuIFRoZSBhY2Nlc3MgcG9pbnQgaG9zdG5hbWUgdGFrZXMgdGhlIGZvcm0gPGk+QWNjZXNzUG9pbnROYW1lPC9pPi08aT5BY2NvdW50SWQ8L2k+LnMzLWFjY2Vzc3BvaW50LjxpPlJlZ2lvbjwvaT4uYW1hem9uYXdzLmNvbS4gV2hlbiB1c2luZyB0aGlzIGFjdGlvbiB3aXRoIGFuIGFjY2VzcyBwb2ludCB0aHJvdWdoIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIFNES3MsIHlvdSBwcm92aWRlIHRoZSBhY2Nlc3MgcG9pbnQgQVJOIGluIHBsYWNlIG9mIHRoZSBidWNrZXQgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWNjZXNzIHBvaW50IEFSTnMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvdXNpbmctYWNjZXNzLXBvaW50cy5odG1sXCI+VXNpbmcgYWNjZXNzIHBvaW50czwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5BY2Nlc3MgcG9pbnRzIGFuZCBPYmplY3QgTGFtYmRhIGFjY2VzcyBwb2ludHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Yj5TMyBvbiBPdXRwb3N0czwvYj4gLSBXaGVuIHlvdSB1c2UgdGhpcyBhY3Rpb24gd2l0aCBBbWF6b24gUzMgb24gT3V0cG9zdHMsIHlvdSBtdXN0IGRpcmVjdCByZXF1ZXN0cyB0byB0aGUgUzMgb24gT3V0cG9zdHMgaG9zdG5hbWUuIFRoZSBTMyBvbiBPdXRwb3N0cyBob3N0bmFtZSB0YWtlcyB0aGUgZm9ybSA8Y29kZT5cbiAgICogICAgICAgICAgICAgICAgPGk+QWNjZXNzUG9pbnROYW1lPC9pPi08aT5BY2NvdW50SWQ8L2k+LjxpPm91dHBvc3RJRDwvaT4uczMtb3V0cG9zdHMuPGk+UmVnaW9uPC9pPi5hbWF6b25hd3MuY29tPC9jb2RlPi4gV2hlbiB5b3UgdXNlIHRoaXMgYWN0aW9uIHdpdGggUzMgb24gT3V0cG9zdHMgdGhyb3VnaCB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBTREtzLCB5b3UgcHJvdmlkZSB0aGUgT3V0cG9zdHMgYWNjZXNzIHBvaW50IEFSTiBpbiBwbGFjZSBvZiB0aGUgYnVja2V0IG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFMzIG9uIE91dHBvc3RzIEFSTnMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvUzNvbk91dHBvc3RzLmh0bWxcIj5XaGF0IGlzIFMzIG9uIE91dHBvc3RzPzwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqIDxwPk5vdGU6IFRvIHN1cHBseSB0aGUgTXVsdGktcmVnaW9uIEFjY2VzcyBQb2ludCAoTVJBUCkgdG8gQnVja2V0LCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBcIkBhd3Mtc2RrL3NpZ25hdHVyZS12NC1jcnRcIiBwYWNrYWdlIHRvIHlvdXIgcHJvamVjdCBkZXBlbmRlbmNpZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgZ28gdG8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzLXYzI2tub3duLWlzc3VlczwvcD5cbiAgICovXG4gIEJ1Y2tldDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogPHA+Q2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjYWNoaW5nIGJlaGF2aW9yIGFsb25nIHRoZSByZXF1ZXN0L3JlcGx5IGNoYWluLiBGb3IgbW9yZVxuICAgKiAgICAgICAgICBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzE0Lmh0bWwjc2VjMTQuOVwiPmh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTQuaHRtbCNzZWMxNC45PC9hPi48L3A+XG4gICAqL1xuICBDYWNoZUNvbnRyb2w/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgcHJlc2VudGF0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBvYmplY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2MjY2I3NlY3Rpb24tNFwiPmh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2MjY2I3NlY3Rpb24tNDwvYT4uPC9wPlxuICAgKi9cbiAgQ29udGVudERpc3Bvc2l0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+U3BlY2lmaWVzIHdoYXQgY29udGVudCBlbmNvZGluZ3MgaGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhlIG9iamVjdCBhbmQgdGh1cyB3aGF0IGRlY29kaW5nXG4gICAqICAgICAgICAgIG1lY2hhbmlzbXMgbXVzdCBiZSBhcHBsaWVkIHRvIG9idGFpbiB0aGUgbWVkaWEtdHlwZSByZWZlcmVuY2VkIGJ5IHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAqICAgICAgICAgIGZpZWxkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMC5odG1sI2ZpZWxkLmNvbnRlbnQtZW5jb2RpbmdcIj5odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMC5odG1sI2ZpZWxkLmNvbnRlbnQtZW5jb2Rpbmc8L2E+LjwvcD5cbiAgICovXG4gIENvbnRlbnRFbmNvZGluZz86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBsYW5ndWFnZSB0aGUgY29udGVudCBpcyBpbi48L3A+XG4gICAqL1xuICBDb250ZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TaXplIG9mIHRoZSBib2R5IGluIGJ5dGVzLiBUaGlzIHBhcmFtZXRlciBpcyB1c2VmdWwgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgYm9keSBjYW5ub3QgYmVcbiAgICogICAgICAgICAgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMC5odG1sI25hbWUtY29udGVudC1sZW5ndGhcIj5odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMC5odG1sI25hbWUtY29udGVudC1sZW5ndGg8L2E+LjwvcD5cbiAgICovXG4gIENvbnRlbnRMZW5ndGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiA8cD5UaGUgYmFzZTY0LWVuY29kZWQgMTI4LWJpdCBNRDUgZGlnZXN0IG9mIHRoZSBtZXNzYWdlICh3aXRob3V0IHRoZSBoZWFkZXJzKSBhY2NvcmRpbmcgdG9cbiAgICogICAgICAgICAgUkZDIDE4NjQuIFRoaXMgaGVhZGVyIGNhbiBiZSB1c2VkIGFzIGEgbWVzc2FnZSBpbnRlZ3JpdHkgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIGRhdGEgaXNcbiAgICogICAgICAgICAgdGhlIHNhbWUgZGF0YSB0aGF0IHdhcyBvcmlnaW5hbGx5IHNlbnQuIEFsdGhvdWdoIGl0IGlzIG9wdGlvbmFsLCB3ZSByZWNvbW1lbmQgdXNpbmcgdGhlXG4gICAqICAgICAgICAgIENvbnRlbnQtTUQ1IG1lY2hhbmlzbSBhcyBhbiBlbmQtdG8tZW5kIGludGVncml0eSBjaGVjay4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgUkVTVFxuICAgKiAgICAgICAgICByZXF1ZXN0IGF1dGhlbnRpY2F0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1JFU1RBdXRoZW50aWNhdGlvbi5odG1sXCI+UkVTVCBBdXRoZW50aWNhdGlvbjwvYT4uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhlIDxjb2RlPkNvbnRlbnQtTUQ1PC9jb2RlPiBoZWFkZXIgaXMgcmVxdWlyZWQgZm9yIGFueSByZXF1ZXN0IHRvIHVwbG9hZCBhblxuICAgKiAgICAgICAgICBvYmplY3Qgd2l0aCBhIHJldGVudGlvbiBwZXJpb2QgY29uZmlndXJlZCB1c2luZyBBbWF6b24gUzMgT2JqZWN0IExvY2suIEZvciBtb3JlXG4gICAqICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IEFtYXpvbiBTMyBPYmplY3QgTG9jaywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9vYmplY3QtbG9jay1vdmVydmlldy5odG1sXCI+QW1hem9uIFMzIE9iamVjdCBMb2NrXG4gICAqICAgICAgICAgICAgIE92ZXJ2aWV3PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LiA8L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIENvbnRlbnRNRDU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5BIHN0YW5kYXJkIE1JTUUgdHlwZSBkZXNjcmliaW5nIHRoZSBmb3JtYXQgb2YgdGhlIGNvbnRlbnRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4gICAqICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMC5odG1sI25hbWUtY29udGVudC10eXBlXCI+aHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAuaHRtbCNuYW1lLWNvbnRlbnQtdHlwZTwvYT4uPC9wPlxuICAgKi9cbiAgQ29udGVudFR5cGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5JbmRpY2F0ZXMgdGhlIGFsZ29yaXRobSB1c2VkIHRvIGNyZWF0ZSB0aGUgY2hlY2tzdW0gZm9yIHRoZSBvYmplY3Qgd2hlbiB5b3UgdXNlIHRoZSBTREsuIFRoaXMgaGVhZGVyIHdpbGwgbm90IHByb3ZpZGUgYW55XG4gICAqICAgICBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgaWYgeW91IGRvbid0IHVzZSB0aGUgU0RLLiBXaGVuIHlvdSBzZW5kIHRoaXMgaGVhZGVyLCB0aGVyZSBtdXN0IGJlIGEgY29ycmVzcG9uZGluZyA8Y29kZT54LWFtei1jaGVja3N1bS08aT5hbGdvcml0aG08L2k+XG4gICAqICAgICAgICAgICAgIDwvY29kZT4gb3JcbiAgICogICAgIDxjb2RlPngtYW16LXRyYWlsZXI8L2NvZGU+IGhlYWRlciBzZW50LiBPdGhlcndpc2UsIEFtYXpvbiBTMyBmYWlscyB0aGUgcmVxdWVzdCB3aXRoIHRoZSBIVFRQIHN0YXR1cyBjb2RlIDxjb2RlPjQwMCBCYWQgUmVxdWVzdDwvY29kZT4uPC9wPlxuICAgKiAgICAgICAgICA8cD5Gb3IgdGhlIDxjb2RlPngtYW16LWNoZWNrc3VtLTxpPmFsZ29yaXRobTwvaT5cbiAgICogICAgICAgICAgICAgPC9jb2RlPiBoZWFkZXIsIHJlcGxhY2UgPGNvZGU+XG4gICAqICAgICAgICAgICAgICAgIDxpPmFsZ29yaXRobTwvaT5cbiAgICogICAgICAgICAgICAgPC9jb2RlPiB3aXRoIHRoZSBzdXBwb3J0ZWQgYWxnb3JpdGhtIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OiA8L3A+XG4gICAqICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5DUkMzMjwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5DUkMzMkM8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+U0hBMTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5TSEEyNTY8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgIDwvdWw+XG4gICAqICAgICAgICAgIDxwPkZvciBtb3JlXG4gICAqICAgICBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWxcIj5DaGVja2luZyBvYmplY3QgaW50ZWdyaXR5PC9hPiBpblxuICAgKiAgICAgdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxwPklmIHRoZSBpbmRpdmlkdWFsIGNoZWNrc3VtIHZhbHVlIHlvdSBwcm92aWRlIHRocm91Z2ggPGNvZGU+eC1hbXotY2hlY2tzdW0tPGk+YWxnb3JpdGhtPC9pPlxuICAgKiAgICAgICAgICAgICA8L2NvZGU+IGRvZXNuJ3QgbWF0Y2ggdGhlIGNoZWNrc3VtIGFsZ29yaXRobSB5b3Ugc2V0IHRocm91Z2ggPGNvZGU+eC1hbXotc2RrLWNoZWNrc3VtLWFsZ29yaXRobTwvY29kZT4sICBBbWF6b24gUzMgaWdub3JlcyBhbnkgcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgPGNvZGU+Q2hlY2tzdW1BbGdvcml0aG08L2NvZGU+IHBhcmFtZXRlciBhbmQgdXNlcyB0aGUgY2hlY2tzdW0gYWxnb3JpdGhtIHRoYXQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgdmFsdWUgaW4gPGNvZGU+eC1hbXotY2hlY2tzdW0tPGk+YWxnb3JpdGhtPC9pPlxuICAgKiAgICAgICAgICAgICA8L2NvZGU+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPkZvciBkaXJlY3RvcnkgYnVja2V0cywgd2hlbiB5b3UgdXNlIEFtYXpvbiBXZWIgU2VydmljZXMgU0RLcywgPGNvZGU+Q1JDMzI8L2NvZGU+IGlzIHRoZSBkZWZhdWx0IGNoZWNrc3VtIGFsZ29yaXRobSB0aGF0J3MgdXNlZCBmb3IgcGVyZm9ybWFuY2UuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBDaGVja3N1bUFsZ29yaXRobT86IENoZWNrc3VtQWxnb3JpdGhtSW47XG4gIC8qKlxuICAgKiA8cD5UaGlzIGhlYWRlciBjYW4gYmUgdXNlZCBhcyBhIGRhdGEgaW50ZWdyaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGF0IHRoZSBkYXRhIHJlY2VpdmVkIGlzIHRoZSBzYW1lIGRhdGEgdGhhdCB3YXMgb3JpZ2luYWxseSBzZW50LlxuICAgKiAgICAgVGhpcyBoZWFkZXIgc3BlY2lmaWVzIHRoZSBiYXNlNjQtZW5jb2RlZCwgMzItYml0IENSQzMyIGNoZWNrc3VtIG9mIHRoZSBvYmplY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogICAgIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWxcIj5DaGVja2luZyBvYmplY3QgaW50ZWdyaXR5PC9hPiBpbiB0aGVcbiAgICogICAgIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqL1xuICBDaGVja3N1bUNSQzMyPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhpcyBoZWFkZXIgY2FuIGJlIHVzZWQgYXMgYSBkYXRhIGludGVncml0eSBjaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgZGF0YSByZWNlaXZlZCBpcyB0aGUgc2FtZSBkYXRhIHRoYXQgd2FzIG9yaWdpbmFsbHkgc2VudC5cbiAgICogICAgIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgYmFzZTY0LWVuY29kZWQsIDMyLWJpdCBDUkMzMkMgY2hlY2tzdW0gb2YgdGhlIG9iamVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuICAgKiAgICAgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2NoZWNraW5nLW9iamVjdC1pbnRlZ3JpdHkuaHRtbFwiPkNoZWNraW5nIG9iamVjdCBpbnRlZ3JpdHk8L2E+IGluIHRoZVxuICAgKiAgICAgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIENoZWNrc3VtQ1JDMzJDPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhpcyBoZWFkZXIgY2FuIGJlIHVzZWQgYXMgYSBkYXRhIGludGVncml0eSBjaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgZGF0YSByZWNlaXZlZCBpcyB0aGUgc2FtZSBkYXRhIHRoYXQgd2FzIG9yaWdpbmFsbHkgc2VudC5cbiAgICogICAgIFRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgYmFzZTY0LWVuY29kZWQsIDE2MC1iaXQgU0hBLTEgZGlnZXN0IG9mIHRoZSBvYmplY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogICAgIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWxcIj5DaGVja2luZyBvYmplY3QgaW50ZWdyaXR5PC9hPiBpbiB0aGVcbiAgICogICAgIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqL1xuICBDaGVja3N1bVNIQTE/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGlzIGhlYWRlciBjYW4gYmUgdXNlZCBhcyBhIGRhdGEgaW50ZWdyaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGF0IHRoZSBkYXRhIHJlY2VpdmVkIGlzIHRoZSBzYW1lIGRhdGEgdGhhdCB3YXMgb3JpZ2luYWxseSBzZW50LlxuICAgKiAgICAgVGhpcyBoZWFkZXIgc3BlY2lmaWVzIHRoZSBiYXNlNjQtZW5jb2RlZCwgMjU2LWJpdCBTSEEtMjU2IGRpZ2VzdCBvZiB0aGUgb2JqZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4gICAqICAgICA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvY2hlY2tpbmctb2JqZWN0LWludGVncml0eS5odG1sXCI+Q2hlY2tpbmcgb2JqZWN0IGludGVncml0eTwvYT4gaW4gdGhlXG4gICAqICAgICA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgQ2hlY2tzdW1TSEEyNTY/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgZGF0ZSBhbmQgdGltZSBhdCB3aGljaCB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciBjYWNoZWFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjM0I3NlY3Rpb24tNS4zXCI+aHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzQjc2VjdGlvbi01LjM8L2E+LjwvcD5cbiAgICovXG4gIEV4cGlyZXM/OiBEYXRlO1xuICAvKipcbiAgICogPHA+VXBsb2FkcyB0aGUgb2JqZWN0IG9ubHkgaWYgdGhlIG9iamVjdCBrZXkgbmFtZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBidWNrZXQgc3BlY2lmaWVkLiBPdGhlcndpc2UsIEFtYXpvbiBTMyByZXR1cm5zIGEgPGNvZGU+NDEyIFByZWNvbmRpdGlvbiBGYWlsZWQ8L2NvZGU+IGVycm9yLjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgYSBjb25mbGljdGluZyBvcGVyYXRpb24gb2NjdXJzIGR1cmluZyB0aGUgdXBsb2FkIFMzIHJldHVybnMgYSA8Y29kZT40MDkgQ29uZGl0aW9uYWxSZXF1ZXN0Q29uZmxpY3Q8L2NvZGU+IHJlc3BvbnNlLiBPbiBhIDQwOSBmYWlsdXJlIHlvdSBzaG91bGQgcmV0cnkgdGhlIHVwbG9hZC48L3A+XG4gICAqICAgICAgICAgIDxwPkV4cGVjdHMgdGhlICcqJyAoYXN0ZXJpc2spIGNoYXJhY3Rlci48L3A+XG4gICAqICAgICAgICAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbmRpdGlvbmFsIHJlcXVlc3RzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMyXCI+UkZDIDcyMzI8L2E+LCBvciA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvY29uZGl0aW9uYWwtcmVxdWVzdHMuaHRtbFwiPkNvbmRpdGlvbmFsIHJlcXVlc3RzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIElmTm9uZU1hdGNoPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+R2l2ZXMgdGhlIGdyYW50ZWUgUkVBRCwgUkVBRF9BQ1AsIGFuZCBXUklURV9BQ1AgcGVybWlzc2lvbnMgb24gdGhlIG9iamVjdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQW1hem9uIFMzIG9uIE91dHBvc3RzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgR3JhbnRGdWxsQ29udHJvbD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkFsbG93cyBncmFudGVlIHRvIHJlYWQgdGhlIG9iamVjdCBkYXRhIGFuZCBpdHMgbWV0YWRhdGEuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHVsPlxuICAgKiAgICAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEFtYXpvbiBTMyBvbiBPdXRwb3N0cy48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDwvdWw+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIEdyYW50UmVhZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkFsbG93cyBncmFudGVlIHRvIHJlYWQgdGhlIG9iamVjdCBBQ0wuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHVsPlxuICAgKiAgICAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEFtYXpvbiBTMyBvbiBPdXRwb3N0cy48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDwvdWw+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIEdyYW50UmVhZEFDUD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkFsbG93cyBncmFudGVlIHRvIHdyaXRlIHRoZSBBQ0wgZm9yIHRoZSBhcHBsaWNhYmxlIG9iamVjdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQW1hem9uIFMzIG9uIE91dHBvc3RzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgR3JhbnRXcml0ZUFDUD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPk9iamVjdCBrZXkgZm9yIHdoaWNoIHRoZSBQVVQgYWN0aW9uIHdhcyBpbml0aWF0ZWQuPC9wPlxuICAgKi9cbiAgS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiA8cD5BIG1hcCBvZiBtZXRhZGF0YSB0byBzdG9yZSB3aXRoIHRoZSBvYmplY3QgaW4gUzMuPC9wPlxuICAgKi9cbiAgTWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogPHA+VGhlIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gYWxnb3JpdGhtIHRoYXQgd2FzIHVzZWQgd2hlbiB5b3Ugc3RvcmUgdGhpcyBvYmplY3QgaW4gQW1hem9uIFMzIChmb3IgZXhhbXBsZSxcbiAgICogICAgICAgICAgICAgPGNvZGU+QUVTMjU2PC9jb2RlPiwgPGNvZGU+YXdzOmttczwvY29kZT4sIDxjb2RlPmF3czprbXM6ZHNzZTwvY29kZT4pLjwvcD5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxiPkdlbmVyYWwgcHVycG9zZSBidWNrZXRzIDwvYj4gLSBZb3UgaGF2ZSBmb3VyIG11dHVhbGx5IGV4Y2x1c2l2ZSBvcHRpb25zIHRvIHByb3RlY3QgZGF0YSB1c2luZyBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGluXG4gICAqICAgICAgICAgICAgICAgIEFtYXpvbiBTMywgZGVwZW5kaW5nIG9uIGhvdyB5b3UgY2hvb3NlIHRvIG1hbmFnZSB0aGUgZW5jcnlwdGlvbiBrZXlzLiBTcGVjaWZpY2FsbHksIHRoZVxuICAgKiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uIGtleSBvcHRpb25zIGFyZSBBbWF6b24gUzMgbWFuYWdlZCBrZXlzIChTU0UtUzMpLCBBbWF6b24gV2ViIFNlcnZpY2VzIEtNUyBrZXlzIChTU0UtS01TIG9yXG4gICAqICAgICAgICAgICAgICAgIERTU0UtS01TKSwgYW5kIGN1c3RvbWVyLXByb3ZpZGVkIGtleXMgKFNTRS1DKS4gQW1hem9uIFMzIGVuY3J5cHRzIGRhdGEgd2l0aCBzZXJ2ZXItc2lkZVxuICAgKiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uIGJ5IHVzaW5nIEFtYXpvbiBTMyBtYW5hZ2VkIGtleXMgKFNTRS1TMykgYnkgZGVmYXVsdC4gWW91IGNhbiBvcHRpb25hbGx5IHRlbGwgQW1hem9uIFMzIHRvXG4gICAqICAgICAgICAgICAgICAgIGVuY3J5cHQgZGF0YSBhdCByZXN0IGJ5IHVzaW5nIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBvdGhlciBrZXkgb3B0aW9ucy4gRm9yIG1vcmVcbiAgICogICAgICAgICAgICAgICAgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvVXNpbmdTZXJ2ZXJTaWRlRW5jcnlwdGlvbi5odG1sXCI+VXNpbmcgU2VydmVyLVNpZGVcbiAgICogICAgICAgICAgICAgICAgICAgRW5jcnlwdGlvbjwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Yj5EaXJlY3RvcnkgYnVja2V0cyA8L2I+IC0gRm9yIGRpcmVjdG9yeSBidWNrZXRzLCBvbmx5IHRoZSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggQW1hem9uIFMzIG1hbmFnZWQga2V5cyAoU1NFLVMzKSAoPGNvZGU+QUVTMjU2PC9jb2RlPikgdmFsdWUgaXMgc3VwcG9ydGVkLjwvcD5cbiAgICovXG4gIFNlcnZlclNpZGVFbmNyeXB0aW9uPzogU2VydmVyU2lkZUVuY3J5cHRpb247XG4gIC8qKlxuICAgKiA8cD5CeSBkZWZhdWx0LCBBbWF6b24gUzMgdXNlcyB0aGUgU1RBTkRBUkQgU3RvcmFnZSBDbGFzcyB0byBzdG9yZSBuZXdseSBjcmVhdGVkIG9iamVjdHMuIFRoZVxuICAgKiAgICAgICAgICBTVEFOREFSRCBzdG9yYWdlIGNsYXNzIHByb3ZpZGVzIGhpZ2ggZHVyYWJpbGl0eSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkuIERlcGVuZGluZyBvblxuICAgKiAgICAgICAgICBwZXJmb3JtYW5jZSBuZWVkcywgeW91IGNhbiBzcGVjaWZ5IGEgZGlmZmVyZW50IFN0b3JhZ2UgQ2xhc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3N0b3JhZ2UtY2xhc3MtaW50cm8uaHRtbFwiPlN0b3JhZ2UgQ2xhc3NlczwvYT4gaW4gdGhlXG4gICAqICAgICAgICAgICAgIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+Rm9yIGRpcmVjdG9yeSBidWNrZXRzLCBvbmx5IHRoZSBTMyBFeHByZXNzIE9uZSBab25lIHN0b3JhZ2UgY2xhc3MgaXMgc3VwcG9ydGVkIHRvIHN0b3JlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0cy48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+QW1hem9uIFMzIG9uIE91dHBvc3RzIG9ubHkgdXNlc1xuICAgKiAgICAgICAgICAgICAgICB0aGUgT1VUUE9TVFMgU3RvcmFnZSBDbGFzcy48L3A+XG4gICAqICAgICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDwvdWw+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFN0b3JhZ2VDbGFzcz86IFN0b3JhZ2VDbGFzcztcbiAgLyoqXG4gICAqIDxwPklmIHRoZSBidWNrZXQgaXMgY29uZmlndXJlZCBhcyBhIHdlYnNpdGUsIHJlZGlyZWN0cyByZXF1ZXN0cyBmb3IgdGhpcyBvYmplY3QgdG8gYW5vdGhlclxuICAgKiAgICAgICAgICBvYmplY3QgaW4gdGhlIHNhbWUgYnVja2V0IG9yIHRvIGFuIGV4dGVybmFsIFVSTC4gQW1hem9uIFMzIHN0b3JlcyB0aGUgdmFsdWUgb2YgdGhpcyBoZWFkZXIgaW5cbiAgICogICAgICAgICAgdGhlIG9iamVjdCBtZXRhZGF0YS4gRm9yIGluZm9ybWF0aW9uIGFib3V0IG9iamVjdCBtZXRhZGF0YSwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Vc2luZ01ldGFkYXRhLmh0bWxcIj5PYmplY3QgS2V5IGFuZCBNZXRhZGF0YTwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTM1xuICAgKiAgICAgICAgICAgICAgICBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxwPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIHJlcXVlc3QgaGVhZGVyIHNldHMgdGhlIHJlZGlyZWN0IHRvIGFuIG9iamVjdFxuICAgKiAgICAgICAgICAoYW5vdGhlclBhZ2UuaHRtbCkgaW4gdGhlIHNhbWUgYnVja2V0OjwvcD5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxjb2RlPngtYW16LXdlYnNpdGUtcmVkaXJlY3QtbG9jYXRpb246IC9hbm90aGVyUGFnZS5odG1sPC9jb2RlPlxuICAgKiAgICAgICAgICA8L3A+XG4gICAqICAgICAgICAgIDxwPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIHJlcXVlc3QgaGVhZGVyIHNldHMgdGhlIG9iamVjdCByZWRpcmVjdCB0byBhbm90aGVyXG4gICAqICAgICAgICAgIHdlYnNpdGU6PC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+eC1hbXotd2Vic2l0ZS1yZWRpcmVjdC1sb2NhdGlvbjogaHR0cDovL3d3dy5leGFtcGxlLmNvbS88L2NvZGU+XG4gICAqICAgICAgICAgIDwvcD5cbiAgICogICAgICAgICAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2Vic2l0ZSBob3N0aW5nIGluIEFtYXpvbiBTMywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9XZWJzaXRlSG9zdGluZy5odG1sXCI+SG9zdGluZyBXZWJzaXRlcyBvbiBBbWF6b24gUzM8L2E+IGFuZFxuICAgKiAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvaG93LXRvLXBhZ2UtcmVkaXJlY3QuaHRtbFwiPkhvdyB0b1xuICAgKiAgICAgICAgICAgICAgICBDb25maWd1cmUgV2Vic2l0ZSBQYWdlIFJlZGlyZWN0czwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTM1xuICAgKiAgICAgICAgICAgICAgICAgICBVc2VyIEd1aWRlPC9pPi4gPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgV2Vic2l0ZVJlZGlyZWN0TG9jYXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIGFsZ29yaXRobSB0byB1c2Ugd2hlbiBlbmNyeXB0aW5nIHRoZSBvYmplY3QgKGZvciBleGFtcGxlLFxuICAgKiAgICAgICAgICA8Y29kZT5BRVMyNTY8L2NvZGU+KS48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTU0VDdXN0b21lckFsZ29yaXRobT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB0aGUgY3VzdG9tZXItcHJvdmlkZWQgZW5jcnlwdGlvbiBrZXkgZm9yIEFtYXpvbiBTMyB0byB1c2UgaW4gZW5jcnlwdGluZyBkYXRhLiBUaGlzXG4gICAqICAgICAgICAgIHZhbHVlIGlzIHVzZWQgdG8gc3RvcmUgdGhlIG9iamVjdCBhbmQgdGhlbiBpdCBpcyBkaXNjYXJkZWQ7IEFtYXpvbiBTMyBkb2VzIG5vdCBzdG9yZSB0aGVcbiAgICogICAgICAgICAgZW5jcnlwdGlvbiBrZXkuIFRoZSBrZXkgbXVzdCBiZSBhcHByb3ByaWF0ZSBmb3IgdXNlIHdpdGggdGhlIGFsZ29yaXRobSBzcGVjaWZpZWQgaW4gdGhlXG4gICAqICAgICAgICAgICAgIDxjb2RlPngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24tY3VzdG9tZXItYWxnb3JpdGhtPC9jb2RlPiBoZWFkZXIuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU1NFQ3VzdG9tZXJLZXk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIDEyOC1iaXQgTUQ1IGRpZ2VzdCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkgYWNjb3JkaW5nIHRvIFJGQyAxMzIxLiBBbWF6b24gUzMgdXNlc1xuICAgKiAgICAgICAgICB0aGlzIGhlYWRlciBmb3IgYSBtZXNzYWdlIGludGVncml0eSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgZW5jcnlwdGlvbiBrZXkgd2FzIHRyYW5zbWl0dGVkXG4gICAqICAgICAgICAgIHdpdGhvdXQgZXJyb3IuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU1NFQ3VzdG9tZXJLZXlNRDU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5JZiA8Y29kZT54LWFtei1zZXJ2ZXItc2lkZS1lbmNyeXB0aW9uPC9jb2RlPiBoYXMgYSB2YWxpZCB2YWx1ZSBvZiA8Y29kZT5hd3M6a21zPC9jb2RlPlxuICAgKiAgICAgICAgICBvciA8Y29kZT5hd3M6a21zOmRzc2U8L2NvZGU+LCB0aGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIElEIChLZXkgSUQsIEtleSBBUk4sIG9yIEtleSBBbGlhcykgb2YgdGhlIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUylcbiAgICogICAgICAgICAgc3ltbWV0cmljIGVuY3J5cHRpb24gY3VzdG9tZXIgbWFuYWdlZCBrZXkgdGhhdCB3YXMgdXNlZCBmb3IgdGhlIG9iamVjdC4gSWYgeW91IHNwZWNpZnlcbiAgICogICAgICAgICAgICAgPGNvZGU+eC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbjphd3M6a21zPC9jb2RlPiBvclxuICAgKiAgICAgICAgICAgICA8Y29kZT54LWFtei1zZXJ2ZXItc2lkZS1lbmNyeXB0aW9uOmF3czprbXM6ZHNzZTwvY29kZT4sIGJ1dCBkbyBub3QgcHJvdmlkZTxjb2RlPlxuICAgKiAgICAgICAgICAgICB4LWFtei1zZXJ2ZXItc2lkZS1lbmNyeXB0aW9uLWF3cy1rbXMta2V5LWlkPC9jb2RlPiwgQW1hem9uIFMzIHVzZXMgdGhlIEFtYXpvbiBXZWIgU2VydmljZXMgbWFuYWdlZCBrZXlcbiAgICogICAgICAgICAgICAgKDxjb2RlPmF3cy9zMzwvY29kZT4pIHRvIHByb3RlY3QgdGhlIGRhdGEuIElmIHRoZSBLTVMga2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBzYW1lXG4gICAqICAgICAgICAgIGFjY291bnQgdGhhdCdzIGlzc3VpbmcgdGhlIGNvbW1hbmQsIHlvdSBtdXN0IHVzZSB0aGUgZnVsbCBBUk4gYW5kIG5vdCBqdXN0IHRoZSBJRC4gPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU1NFS01TS2V5SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIEFtYXpvbiBXZWIgU2VydmljZXMgS01TIEVuY3J5cHRpb24gQ29udGV4dCB0byB1c2UgZm9yIG9iamVjdCBlbmNyeXB0aW9uLiBUaGUgdmFsdWUgb2ZcbiAgICogICAgICAgICAgdGhpcyBoZWFkZXIgaXMgYSBiYXNlNjQtZW5jb2RlZCBVVEYtOCBzdHJpbmcgaG9sZGluZyBKU09OIHdpdGggdGhlIGVuY3J5cHRpb24gY29udGV4dFxuICAgKiAgICAgICAgICBrZXktdmFsdWUgcGFpcnMuIFRoaXMgdmFsdWUgaXMgc3RvcmVkIGFzIG9iamVjdCBtZXRhZGF0YSBhbmQgYXV0b21hdGljYWxseSBnZXRzIHBhc3NlZCBvblxuICAgKiAgICAgICAgICB0byBBbWF6b24gV2ViIFNlcnZpY2VzIEtNUyBmb3IgZnV0dXJlIDxjb2RlPkdldE9iamVjdDwvY29kZT4gb3IgPGNvZGU+Q29weU9iamVjdDwvY29kZT4gb3BlcmF0aW9ucyBvblxuICAgKiAgICAgICAgICB0aGlzIG9iamVjdC4gVGhpcyB2YWx1ZSBtdXN0IGJlIGV4cGxpY2l0bHkgYWRkZWQgZHVyaW5nIDxjb2RlPkNvcHlPYmplY3Q8L2NvZGU+IG9wZXJhdGlvbnMuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU1NFS01TRW5jcnlwdGlvbkNvbnRleHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgc2hvdWxkIHVzZSBhbiBTMyBCdWNrZXQgS2V5IGZvciBvYmplY3QgZW5jcnlwdGlvbiB3aXRoXG4gICAqICAgICAgICAgIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdXNpbmcgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBrZXlzIChTU0UtS01TKS4gU2V0dGluZyB0aGlzIGhlYWRlciB0b1xuICAgKiAgICAgICAgICAgICA8Y29kZT50cnVlPC9jb2RlPiBjYXVzZXMgQW1hem9uIFMzIHRvIHVzZSBhbiBTMyBCdWNrZXQgS2V5IGZvciBvYmplY3QgZW5jcnlwdGlvbiB3aXRoXG4gICAqICAgICAgICAgIFNTRS1LTVMuPC9wPlxuICAgKiAgICAgICAgICA8cD5TcGVjaWZ5aW5nIHRoaXMgaGVhZGVyIHdpdGggYSBQVVQgYWN0aW9uIGRvZXNu4oCZdCBhZmZlY3QgYnVja2V0LWxldmVsIHNldHRpbmdzIGZvciBTM1xuICAgKiAgICAgICAgICBCdWNrZXQgS2V5LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIEJ1Y2tldEtleUVuYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogPHA+Q29uZmlybXMgdGhhdCB0aGUgcmVxdWVzdGVyIGtub3dzIHRoYXQgdGhleSB3aWxsIGJlIGNoYXJnZWQgZm9yIHRoZSByZXF1ZXN0LiBCdWNrZXRcbiAgICogICAgICAgICAgb3duZXJzIG5lZWQgbm90IHNwZWNpZnkgdGhpcyBwYXJhbWV0ZXIgaW4gdGhlaXIgcmVxdWVzdHMuIElmIGVpdGhlciB0aGUgc291cmNlIG9yXG4gICAqICAgICAgICAgIGRlc3RpbmF0aW9uIFMzIGJ1Y2tldCBoYXMgUmVxdWVzdGVyIFBheXMgZW5hYmxlZCwgdGhlIHJlcXVlc3RlciB3aWxsIHBheSBmb3JcbiAgICogICAgICAgICAgY29ycmVzcG9uZGluZyBjaGFyZ2VzIHRvIGNvcHkgdGhlIG9iamVjdC4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGRvd25sb2FkaW5nIG9iamVjdHMgZnJvbVxuICAgKiAgICAgICAgICBSZXF1ZXN0ZXIgUGF5cyBidWNrZXRzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L09iamVjdHNpblJlcXVlc3RlclBheXNCdWNrZXRzLmh0bWxcIj5Eb3dubG9hZGluZyBPYmplY3RzIGluXG4gICAqICAgICAgICAgICAgIFJlcXVlc3RlciBQYXlzIEJ1Y2tldHM8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgUmVxdWVzdFBheWVyPzogUmVxdWVzdFBheWVyO1xuICAvKipcbiAgICogPHA+VGhlIHRhZy1zZXQgZm9yIHRoZSBvYmplY3QuIFRoZSB0YWctc2V0IG11c3QgYmUgZW5jb2RlZCBhcyBVUkwgUXVlcnkgcGFyYW1ldGVycy4gKEZvclxuICAgKiAgICAgICAgICBleGFtcGxlLCBcIktleTE9VmFsdWUxXCIpPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgVGFnZ2luZz86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBPYmplY3QgTG9jayBtb2RlIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhpcyBvYmplY3QuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgT2JqZWN0TG9ja01vZGU/OiBPYmplY3RMb2NrTW9kZTtcbiAgLyoqXG4gICAqIDxwPlRoZSBkYXRlIGFuZCB0aW1lIHdoZW4geW91IHdhbnQgdGhpcyBvYmplY3QncyBPYmplY3QgTG9jayB0byBleHBpcmUuIE11c3QgYmUgZm9ybWF0dGVkXG4gICAqICAgICAgICAgIGFzIGEgdGltZXN0YW1wIHBhcmFtZXRlci48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBPYmplY3RMb2NrUmV0YWluVW50aWxEYXRlPzogRGF0ZTtcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB3aGV0aGVyIGEgbGVnYWwgaG9sZCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBvYmplY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAqICAgICAgICAgIGFib3V0IFMzIE9iamVjdCBMb2NrLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L29iamVjdC1sb2NrLmh0bWxcIj5PYmplY3QgTG9jazwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBPYmplY3RMb2NrTGVnYWxIb2xkU3RhdHVzPzogT2JqZWN0TG9ja0xlZ2FsSG9sZFN0YXR1cztcbiAgLyoqXG4gICAqIDxwPlRoZSBhY2NvdW50IElEIG9mIHRoZSBleHBlY3RlZCBidWNrZXQgb3duZXIuIElmIHRoZSBhY2NvdW50IElEIHRoYXQgeW91IHByb3ZpZGUgZG9lcyBub3QgbWF0Y2ggdGhlIGFjdHVhbCBvd25lciBvZiB0aGUgYnVja2V0LCB0aGUgcmVxdWVzdCBmYWlscyB3aXRoIHRoZSBIVFRQIHN0YXR1cyBjb2RlIDxjb2RlPjQwMyBGb3JiaWRkZW48L2NvZGU+IChhY2Nlc3MgZGVuaWVkKS48L3A+XG4gICAqL1xuICBFeHBlY3RlZEJ1Y2tldE93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBOb2RlSnNSdW50aW1lU3RyZWFtaW5nQmxvYlBheWxvYWRJbnB1dFR5cGVzID0gc3RyaW5nIHwgVWludDhBcnJheSB8IEJ1ZmZlciB8IFJlYWRhYmxlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1dE9iamVjdENvbW1hbmRJbnB1dCBleHRlbmRzIE9taXQ8UHV0T2JqZWN0UmVxdWVzdCwgJ0JvZHknPiB7XG4gIEJvZHk/OiBOb2RlSnNSdW50aW1lU3RyZWFtaW5nQmxvYlBheWxvYWRJbnB1dFR5cGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkT3V0cHV0IHtcbiAgLyoqXG4gICAqIDxwPlRoZSBVUkkgdGhhdCBpZGVudGlmaWVzIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC48L3A+XG4gICAqL1xuICBMb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBuYW1lIG9mIHRoZSBidWNrZXQgdGhhdCBjb250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuIERvZXMgbm90IHJldHVybiB0aGUgYWNjZXNzIHBvaW50XG4gICAqICAgICAgICAgIEFSTiBvciBhY2Nlc3MgcG9pbnQgYWxpYXMgaWYgdXNlZC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5BY2Nlc3MgcG9pbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgQnVja2V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIG9iamVjdCBrZXkgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LjwvcD5cbiAgICovXG4gIEtleT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPklmIHRoZSBvYmplY3QgZXhwaXJhdGlvbiBpcyBjb25maWd1cmVkLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZXhwaXJhdGlvbiBkYXRlXG4gICAqICAgICAgICAgICAgICg8Y29kZT5leHBpcnktZGF0ZTwvY29kZT4pIGFuZCBydWxlIElEICg8Y29kZT5ydWxlLWlkPC9jb2RlPikuIFRoZSB2YWx1ZSBvZlxuICAgKiAgICAgICAgICAgICA8Y29kZT5ydWxlLWlkPC9jb2RlPiBpcyBVUkwtZW5jb2RlZC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBFeHBpcmF0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+RW50aXR5IHRhZyB0aGF0IGlkZW50aWZpZXMgdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0J3MgZGF0YS4gT2JqZWN0cyB3aXRoIGRpZmZlcmVudFxuICAgKiAgICAgICAgICBvYmplY3QgZGF0YSB3aWxsIGhhdmUgZGlmZmVyZW50IGVudGl0eSB0YWdzLiBUaGUgZW50aXR5IHRhZyBpcyBhbiBvcGFxdWUgc3RyaW5nLiBUaGUgZW50aXR5XG4gICAqICAgICAgICAgIHRhZyBtYXkgb3IgbWF5IG5vdCBiZSBhbiBNRDUgZGlnZXN0IG9mIHRoZSBvYmplY3QgZGF0YS4gSWYgdGhlIGVudGl0eSB0YWcgaXMgbm90IGFuIE1ENVxuICAgKiAgICAgICAgICBkaWdlc3Qgb2YgdGhlIG9iamVjdCBkYXRhLCBpdCB3aWxsIGNvbnRhaW4gb25lIG9yIG1vcmUgbm9uaGV4YWRlY2ltYWwgY2hhcmFjdGVycyBhbmQvb3JcbiAgICogICAgICAgICAgd2lsbCBjb25zaXN0IG9mIGxlc3MgdGhhbiAzMiBvciBtb3JlIHRoYW4gMzIgaGV4YWRlY2ltYWwgZGlnaXRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dFxuICAgKiAgICAgICAgICBob3cgdGhlIGVudGl0eSB0YWcgaXMgY2FsY3VsYXRlZCwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWxcIj5DaGVja2luZyBvYmplY3RcbiAgICogICAgICAgICAgICAgaW50ZWdyaXR5PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIEVUYWc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgYmFzZTY0LWVuY29kZWQsIDMyLWJpdCBDUkMzMiBjaGVja3N1bSBvZiB0aGUgb2JqZWN0LiBUaGlzIHdpbGwgb25seSBiZSBwcmVzZW50IGlmIGl0IHdhcyB1cGxvYWRlZFxuICAgKiAgICAgd2l0aCB0aGUgb2JqZWN0LiBXaGVuIHlvdSB1c2UgYW4gQVBJIG9wZXJhdGlvbiBvbiBhbiBvYmplY3QgdGhhdCB3YXMgdXBsb2FkZWQgdXNpbmcgbXVsdGlwYXJ0IHVwbG9hZHMsIHRoaXMgdmFsdWUgbWF5IG5vdCBiZSBhIGRpcmVjdCBjaGVja3N1bSB2YWx1ZSBvZiB0aGUgZnVsbCBvYmplY3QuIEluc3RlYWQsIGl0J3MgYSBjYWxjdWxhdGlvbiBiYXNlZCBvbiB0aGUgY2hlY2tzdW0gdmFsdWVzIG9mIGVhY2ggaW5kaXZpZHVhbCBwYXJ0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgY2hlY2tzdW1zIGFyZSBjYWxjdWxhdGVkXG4gICAqICAgICB3aXRoIG11bHRpcGFydCB1cGxvYWRzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2NoZWNraW5nLW9iamVjdC1pbnRlZ3JpdHkuaHRtbCNsYXJnZS1vYmplY3QtY2hlY2tzdW1zXCI+XG4gICAqICAgICBDaGVja2luZyBvYmplY3QgaW50ZWdyaXR5PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIENoZWNrc3VtQ1JDMzI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgYmFzZTY0LWVuY29kZWQsIDMyLWJpdCBDUkMzMkMgY2hlY2tzdW0gb2YgdGhlIG9iamVjdC4gVGhpcyB3aWxsIG9ubHkgYmUgcHJlc2VudCBpZiBpdCB3YXMgdXBsb2FkZWRcbiAgICogICAgIHdpdGggdGhlIG9iamVjdC4gV2hlbiB5b3UgdXNlIGFuIEFQSSBvcGVyYXRpb24gb24gYW4gb2JqZWN0IHRoYXQgd2FzIHVwbG9hZGVkIHVzaW5nIG11bHRpcGFydCB1cGxvYWRzLCB0aGlzIHZhbHVlIG1heSBub3QgYmUgYSBkaXJlY3QgY2hlY2tzdW0gdmFsdWUgb2YgdGhlIGZ1bGwgb2JqZWN0LiBJbnN0ZWFkLCBpdCdzIGEgY2FsY3VsYXRpb24gYmFzZWQgb24gdGhlIGNoZWNrc3VtIHZhbHVlcyBvZiBlYWNoIGluZGl2aWR1YWwgcGFydC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGNoZWNrc3VtcyBhcmUgY2FsY3VsYXRlZFxuICAgKiAgICAgd2l0aCBtdWx0aXBhcnQgdXBsb2Fkcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWwjbGFyZ2Utb2JqZWN0LWNoZWNrc3Vtc1wiPlxuICAgKiAgICAgQ2hlY2tpbmcgb2JqZWN0IGludGVncml0eTwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqL1xuICBDaGVja3N1bUNSQzMyQz86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBiYXNlNjQtZW5jb2RlZCwgMTYwLWJpdCBTSEEtMSBkaWdlc3Qgb2YgdGhlIG9iamVjdC4gVGhpcyB3aWxsIG9ubHkgYmUgcHJlc2VudCBpZiBpdCB3YXMgdXBsb2FkZWRcbiAgICogICAgIHdpdGggdGhlIG9iamVjdC4gV2hlbiB5b3UgdXNlIHRoZSBBUEkgb3BlcmF0aW9uIG9uIGFuIG9iamVjdCB0aGF0IHdhcyB1cGxvYWRlZCB1c2luZyBtdWx0aXBhcnQgdXBsb2FkcywgdGhpcyB2YWx1ZSBtYXkgbm90IGJlIGEgZGlyZWN0IGNoZWNrc3VtIHZhbHVlIG9mIHRoZSBmdWxsIG9iamVjdC4gSW5zdGVhZCwgaXQncyBhIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSBjaGVja3N1bSB2YWx1ZXMgb2YgZWFjaCBpbmRpdmlkdWFsIHBhcnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyBjaGVja3N1bXMgYXJlIGNhbGN1bGF0ZWRcbiAgICogICAgIHdpdGggbXVsdGlwYXJ0IHVwbG9hZHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvY2hlY2tpbmctb2JqZWN0LWludGVncml0eS5odG1sI2xhcmdlLW9iamVjdC1jaGVja3N1bXNcIj5cbiAgICogICAgIENoZWNraW5nIG9iamVjdCBpbnRlZ3JpdHk8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgQ2hlY2tzdW1TSEExPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIGJhc2U2NC1lbmNvZGVkLCAyNTYtYml0IFNIQS0yNTYgZGlnZXN0IG9mIHRoZSBvYmplY3QuIFRoaXMgd2lsbCBvbmx5IGJlIHByZXNlbnQgaWYgaXQgd2FzIHVwbG9hZGVkXG4gICAqICAgICB3aXRoIHRoZSBvYmplY3QuIFdoZW4geW91IHVzZSBhbiBBUEkgb3BlcmF0aW9uIG9uIGFuIG9iamVjdCB0aGF0IHdhcyB1cGxvYWRlZCB1c2luZyBtdWx0aXBhcnQgdXBsb2FkcywgdGhpcyB2YWx1ZSBtYXkgbm90IGJlIGEgZGlyZWN0IGNoZWNrc3VtIHZhbHVlIG9mIHRoZSBmdWxsIG9iamVjdC4gSW5zdGVhZCwgaXQncyBhIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSBjaGVja3N1bSB2YWx1ZXMgb2YgZWFjaCBpbmRpdmlkdWFsIHBhcnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyBjaGVja3N1bXMgYXJlIGNhbGN1bGF0ZWRcbiAgICogICAgIHdpdGggbXVsdGlwYXJ0IHVwbG9hZHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvY2hlY2tpbmctb2JqZWN0LWludGVncml0eS5odG1sI2xhcmdlLW9iamVjdC1jaGVja3N1bXNcIj5cbiAgICogICAgIENoZWNraW5nIG9iamVjdCBpbnRlZ3JpdHk8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgQ2hlY2tzdW1TSEEyNTY/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gdXNlZCB3aGVuIHN0b3JpbmcgdGhpcyBvYmplY3QgaW4gQW1hem9uIFMzIChmb3IgZXhhbXBsZSxcbiAgICogICAgICAgICAgICAgPGNvZGU+QUVTMjU2PC9jb2RlPiwgPGNvZGU+YXdzOmttczwvY29kZT4pLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPkZvciBkaXJlY3RvcnkgYnVja2V0cywgb25seSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggQW1hem9uIFMzIG1hbmFnZWQga2V5cyAoU1NFLVMzKSAoPGNvZGU+QUVTMjU2PC9jb2RlPikgaXMgc3VwcG9ydGVkLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU2VydmVyU2lkZUVuY3J5cHRpb24/OiBTZXJ2ZXJTaWRlRW5jcnlwdGlvbjtcbiAgLyoqXG4gICAqIDxwPlZlcnNpb24gSUQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LCBpbiBjYXNlIHRoZSBidWNrZXQgaGFzIHZlcnNpb25pbmcgdHVybmVkXG4gICAqICAgICAgICAgIG9uLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFZlcnNpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPklmIHByZXNlbnQsIGluZGljYXRlcyB0aGUgSUQgb2YgdGhlIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykgc3ltbWV0cmljIGVuY3J5cHRpb24gY3VzdG9tZXIgbWFuYWdlZCBrZXlcbiAgICogICAgICAgICAgdGhhdCB3YXMgdXNlZCBmb3IgdGhlIG9iamVjdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTU0VLTVNLZXlJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkluZGljYXRlcyB3aGV0aGVyIHRoZSBtdWx0aXBhcnQgdXBsb2FkIHVzZXMgYW4gUzMgQnVja2V0IEtleSBmb3Igc2VydmVyLXNpZGUgZW5jcnlwdGlvblxuICAgKiAgICAgICAgICB3aXRoIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykga2V5cyAoU1NFLUtNUykuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgQnVja2V0S2V5RW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiA8cD5JZiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVxdWVzdGVyIHdhcyBzdWNjZXNzZnVsbHkgY2hhcmdlZCBmb3IgdGhlXG4gICAqICAgICAgICAgIHJlcXVlc3QuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgUmVxdWVzdENoYXJnZWQ/OiBSZXF1ZXN0Q2hhcmdlZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRPdXRwdXRcbiAgZXh0ZW5kcyBDb21wbGV0ZU11bHRpcGFydFVwbG9hZE91dHB1dCxcbiAgTWV0YWRhdGFCZWFyZXIge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlSWRlbnRpZmllciB7XG4gIC8qKlxuICAgKiA8cD5UaGUgPGNvZGU+c2hhMjU2PC9jb2RlPiBkaWdlc3Qgb2YgdGhlIGltYWdlIG1hbmlmZXN0LjwvcD5cbiAgICovXG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIHRhZyB1c2VkIGZvciB0aGUgaW1hZ2UuPC9wPlxuICAgKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVJbWFnZXNGaWx0ZXIge1xuICAvKipcbiAgICogPHA+VGhlIHRhZyBzdGF0dXMgd2l0aCB3aGljaCB0byBmaWx0ZXIgeW91ciA8YT5EZXNjcmliZUltYWdlczwvYT4gcmVzdWx0cy4gWW91XG4gICAqICAgICAgICAgICAgIGNhbiBmaWx0ZXIgcmVzdWx0cyBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgYXJlIDxjb2RlPlRBR0dFRDwvY29kZT4gb3JcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPlVOVEFHR0VEPC9jb2RlPi48L3A+XG4gICAqL1xuICB0YWdTdGF0dXM/OiBUYWdTdGF0dXM7XG59XG5cbmV4cG9ydCBjb25zdCBUYWdTdGF0dXMgPSB7XG4gIEFOWTogJ0FOWScsXG4gIFRBR0dFRDogJ1RBR0dFRCcsXG4gIFVOVEFHR0VEOiAnVU5UQUdHRUQnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGFnU3RhdHVzID0gKHR5cGVvZiBUYWdTdGF0dXMpW2tleW9mIHR5cGVvZiBUYWdTdGF0dXNdO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaWJlSW1hZ2VzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiA8cD5UaGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBhY2NvdW50IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCBjb250YWlucyB0aGUgcmVwb3NpdG9yeSBpblxuICAgKiAgICAgICAgICAgICB3aGljaCB0byBkZXNjcmliZSBpbWFnZXMuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHJlZ2lzdHJ5LCB0aGUgZGVmYXVsdCByZWdpc3RyeSBpcyBhc3N1bWVkLjwvcD5cbiAgICovXG4gIHJlZ2lzdHJ5SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgcmVwb3NpdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBpbWFnZXMgdG8gZGVzY3JpYmUuPC9wPlxuICAgKi9cbiAgcmVwb3NpdG9yeU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIDxwPlRoZSBsaXN0IG9mIGltYWdlIElEcyBmb3IgdGhlIHJlcXVlc3RlZCByZXBvc2l0b3J5LjwvcD5cbiAgICovXG4gIGltYWdlSWRzPzogSW1hZ2VJZGVudGlmaWVyW107XG4gIC8qKlxuICAgKiA8cD5UaGUgPGNvZGU+bmV4dFRva2VuPC9jb2RlPiB2YWx1ZSByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMgcGFnaW5hdGVkXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5EZXNjcmliZUltYWdlczwvY29kZT4gcmVxdWVzdCB3aGVyZSA8Y29kZT5tYXhSZXN1bHRzPC9jb2RlPiB3YXMgdXNlZCBhbmQgdGhlXG4gICAqICAgICAgICAgICAgIHJlc3VsdHMgZXhjZWVkZWQgdGhlIHZhbHVlIG9mIHRoYXQgcGFyYW1ldGVyLiBQYWdpbmF0aW9uIGNvbnRpbnVlcyBmcm9tIHRoZSBlbmQgb2YgdGhlXG4gICAqICAgICAgICAgICAgIHByZXZpb3VzIHJlc3VsdHMgdGhhdCByZXR1cm5lZCB0aGUgPGNvZGU+bmV4dFRva2VuPC9jb2RlPiB2YWx1ZS4gVGhpcyB2YWx1ZSBpc1xuICAgKiAgICAgICAgICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSByZXN1bHRzIHRvIHJldHVybi4gVGhpcyBvcHRpb24gY2Fubm90IGJlXG4gICAqICAgICAgICAgICAgIHVzZWQgd2hlbiB5b3Ugc3BlY2lmeSBpbWFnZXMgd2l0aCA8Y29kZT5pbWFnZUlkczwvY29kZT4uPC9wPlxuICAgKi9cbiAgbmV4dFRva2VuPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIHJlcG9zaXRvcnkgcmVzdWx0cyByZXR1cm5lZCBieSA8Y29kZT5EZXNjcmliZUltYWdlczwvY29kZT4gaW5cbiAgICogICAgICAgICAgICAgcGFnaW5hdGVkIG91dHB1dC4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCA8Y29kZT5EZXNjcmliZUltYWdlczwvY29kZT4gb25seSByZXR1cm5zXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5tYXhSZXN1bHRzPC9jb2RlPiByZXN1bHRzIGluIGEgc2luZ2xlIHBhZ2UgYWxvbmcgd2l0aCBhIDxjb2RlPm5leHRUb2tlbjwvY29kZT5cbiAgICogICAgICAgICAgICAgcmVzcG9uc2UgZWxlbWVudC4gVGhlIHJlbWFpbmluZyByZXN1bHRzIG9mIHRoZSBpbml0aWFsIHJlcXVlc3QgY2FuIGJlIHNlZW4gYnkgc2VuZGluZ1xuICAgKiAgICAgICAgICAgICBhbm90aGVyIDxjb2RlPkRlc2NyaWJlSW1hZ2VzPC9jb2RlPiByZXF1ZXN0IHdpdGggdGhlIHJldHVybmVkIDxjb2RlPm5leHRUb2tlbjwvY29kZT5cbiAgICogICAgICAgICAgICAgdmFsdWUuIFRoaXMgdmFsdWUgY2FuIGJlIGJldHdlZW4gMSBhbmQgMTAwMC4gSWYgdGhpc1xuICAgKiAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgbm90IHVzZWQsIHRoZW4gPGNvZGU+RGVzY3JpYmVJbWFnZXM8L2NvZGU+IHJldHVybnMgdXAgdG9cbiAgICogICAgICAgICAgICAgMTAwIHJlc3VsdHMgYW5kIGEgPGNvZGU+bmV4dFRva2VuPC9jb2RlPiB2YWx1ZSwgaWYgYXBwbGljYWJsZS4gVGhpc1xuICAgKiAgICAgICAgICAgICBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2hlbiB5b3Ugc3BlY2lmeSBpbWFnZXMgd2l0aCA8Y29kZT5pbWFnZUlkczwvY29kZT4uPC9wPlxuICAgKi9cbiAgbWF4UmVzdWx0cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIDxwPlRoZSBmaWx0ZXIga2V5IGFuZCB2YWx1ZSB3aXRoIHdoaWNoIHRvIGZpbHRlciB5b3VyIDxjb2RlPkRlc2NyaWJlSW1hZ2VzPC9jb2RlPlxuICAgKiAgICAgICAgICAgICByZXN1bHRzLjwvcD5cbiAgICovXG4gIGZpbHRlcj86IERlc2NyaWJlSW1hZ2VzRmlsdGVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0IGV4dGVuZHMgRGVzY3JpYmVJbWFnZXNSZXF1ZXN0IHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQgZXh0ZW5kcyBEZXNjcmliZUltYWdlc1Jlc3BvbnNlLCBNZXRhZGF0YUJlYXJlciB7XG59XG5cbmV4cG9ydCBjb25zdCBTY2FuU3RhdHVzID0ge1xuICBBQ1RJVkU6ICdBQ1RJVkUnLFxuICBDT01QTEVURTogJ0NPTVBMRVRFJyxcbiAgRkFJTEVEOiAnRkFJTEVEJyxcbiAgRklORElOR1NfVU5BVkFJTEFCTEU6ICdGSU5ESU5HU19VTkFWQUlMQUJMRScsXG4gIElOX1BST0dSRVNTOiAnSU5fUFJPR1JFU1MnLFxuICBQRU5ESU5HOiAnUEVORElORycsXG4gIFNDQU5fRUxJR0lCSUxJVFlfRVhQSVJFRDogJ1NDQU5fRUxJR0lCSUxJVFlfRVhQSVJFRCcsXG4gIFVOU1VQUE9SVEVEX0lNQUdFOiAnVU5TVVBQT1JURURfSU1BR0UnLFxuICBMSU1JVF9FWENFRURFRDogJ0xJTUlUX0VYQ0VFREVEJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFNjYW5TdGF0dXMgPSAodHlwZW9mIFNjYW5TdGF0dXMpW2tleW9mIHR5cGVvZiBTY2FuU3RhdHVzXTtcblxuZXhwb3J0IGNvbnN0IEZpbmRpbmdTZXZlcml0eSA9IHtcbiAgQ1JJVElDQUw6ICdDUklUSUNBTCcsXG4gIEhJR0g6ICdISUdIJyxcbiAgSU5GT1JNQVRJT05BTDogJ0lORk9STUFUSU9OQUwnLFxuICBMT1c6ICdMT1cnLFxuICBNRURJVU06ICdNRURJVU0nLFxuICBVTkRFRklORUQ6ICdVTkRFRklORUQnLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKi9cbmV4cG9ydCB0eXBlIEZpbmRpbmdTZXZlcml0eSA9ICh0eXBlb2YgRmluZGluZ1NldmVyaXR5KVtrZXlvZiB0eXBlb2YgRmluZGluZ1NldmVyaXR5XTtcblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZVNjYW5TdGF0dXMge1xuICAvKipcbiAgICogPHA+VGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gaW1hZ2Ugc2Nhbi48L3A+XG4gICAqL1xuICBzdGF0dXM/OiBTY2FuU3RhdHVzO1xuICAvKipcbiAgICogPHA+VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbWFnZSBzY2FuIHN0YXR1cy48L3A+XG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZVNjYW5GaW5kaW5nc1N1bW1hcnkge1xuICAvKipcbiAgICogPHA+VGhlIHRpbWUgb2YgdGhlIGxhc3QgY29tcGxldGVkIGltYWdlIHNjYW4uPC9wPlxuICAgKi9cbiAgaW1hZ2VTY2FuQ29tcGxldGVkQXQ/OiBEYXRlO1xuICAvKipcbiAgICogPHA+VGhlIHRpbWUgd2hlbiB0aGUgdnVsbmVyYWJpbGl0eSBkYXRhIHdhcyBsYXN0IHNjYW5uZWQuPC9wPlxuICAgKi9cbiAgdnVsbmVyYWJpbGl0eVNvdXJjZVVwZGF0ZWRBdD86IERhdGU7XG4gIC8qKlxuICAgKiA8cD5UaGUgaW1hZ2UgdnVsbmVyYWJpbGl0eSBjb3VudHMsIHNvcnRlZCBieSBzZXZlcml0eS48L3A+XG4gICAqL1xuICBmaW5kaW5nU2V2ZXJpdHlDb3VudHM/OiBQYXJ0aWFsPFJlY29yZDxGaW5kaW5nU2V2ZXJpdHksIG51bWJlcj4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlRGV0YWlsIHtcbiAgLyoqXG4gICAqIDxwPlRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIGFjY291bnQgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyeSB0byB3aGljaCB0aGlzIGltYWdlIGJlbG9uZ3MuPC9wPlxuICAgKi9cbiAgcmVnaXN0cnlJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIHdoaWNoIHRoaXMgaW1hZ2UgYmVsb25ncy48L3A+XG4gICAqL1xuICByZXBvc2l0b3J5TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSA8Y29kZT5zaGEyNTY8L2NvZGU+IGRpZ2VzdCBvZiB0aGUgaW1hZ2UgbWFuaWZlc3QuPC9wPlxuICAgKi9cbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgbGlzdCBvZiB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGltYWdlLjwvcD5cbiAgICovXG4gIGltYWdlVGFncz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogPHA+VGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgaW1hZ2UgaW4gdGhlIHJlcG9zaXRvcnkuPC9wPlxuICAgKiAgICAgICAgICA8cD5JZiB0aGUgaW1hZ2UgaXMgYSBtYW5pZmVzdCBsaXN0LCB0aGlzIHdpbGwgYmUgdGhlIG1heCBzaXplIG9mIGFsbCBtYW5pZmVzdHMgaW4gdGhlXG4gICAqICAgICAgICAgICAgIGxpc3QuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+QmVnaW5uaW5nIHdpdGggRG9ja2VyIHZlcnNpb24gMS45LCB0aGUgRG9ja2VyIGNsaWVudCBjb21wcmVzc2VzIGltYWdlIGxheWVyc1xuICAgKiAgICAgICAgICAgICAgICAgYmVmb3JlIHB1c2hpbmcgdGhlbSB0byBhIFYyIERvY2tlciByZWdpc3RyeS4gVGhlIG91dHB1dCBvZiB0aGUgPGNvZGU+ZG9ja2VyXG4gICAqICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzPC9jb2RlPiBjb21tYW5kIHNob3dzIHRoZSB1bmNvbXByZXNzZWQgaW1hZ2Ugc2l6ZSwgc28gaXQgbWF5IHJldHVybiBhXG4gICAqICAgICAgICAgICAgICAgICBsYXJnZXIgaW1hZ2Ugc2l6ZSB0aGFuIHRoZSBpbWFnZSBzaXplcyByZXR1cm5lZCBieSA8YT5EZXNjcmliZUltYWdlczwvYT4uPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBpbWFnZVNpemVJbkJ5dGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogPHA+VGhlIGRhdGUgYW5kIHRpbWUsIGV4cHJlc3NlZCBpbiBzdGFuZGFyZCBKYXZhU2NyaXB0IGRhdGUgZm9ybWF0LCBhdCB3aGljaCB0aGUgY3VycmVudFxuICAgKiAgICAgICAgICAgICBpbWFnZSB3YXMgcHVzaGVkIHRvIHRoZSByZXBvc2l0b3J5LiA8L3A+XG4gICAqL1xuICBpbWFnZVB1c2hlZEF0PzogRGF0ZTtcbiAgLyoqXG4gICAqIDxwPlRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzY2FuLjwvcD5cbiAgICovXG4gIGltYWdlU2NhblN0YXR1cz86IEltYWdlU2NhblN0YXR1cztcbiAgLyoqXG4gICAqIDxwPkEgc3VtbWFyeSBvZiB0aGUgbGFzdCBjb21wbGV0ZWQgaW1hZ2Ugc2Nhbi48L3A+XG4gICAqL1xuICBpbWFnZVNjYW5GaW5kaW5nc1N1bW1hcnk/OiBJbWFnZVNjYW5GaW5kaW5nc1N1bW1hcnk7XG4gIC8qKlxuICAgKiA8cD5UaGUgbWVkaWEgdHlwZSBvZiB0aGUgaW1hZ2UgbWFuaWZlc3QuPC9wPlxuICAgKi9cbiAgaW1hZ2VNYW5pZmVzdE1lZGlhVHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBhcnRpZmFjdCBtZWRpYSB0eXBlIG9mIHRoZSBpbWFnZS48L3A+XG4gICAqL1xuICBhcnRpZmFjdE1lZGlhVHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBkYXRlIGFuZCB0aW1lLCBleHByZXNzZWQgaW4gc3RhbmRhcmQgSmF2YVNjcmlwdCBkYXRlIGZvcm1hdCwgd2hlbiBBbWF6b24gRUNSIHJlY29yZGVkXG4gICAqICAgICAgICAgICAgIHRoZSBsYXN0IGltYWdlIHB1bGwuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+QW1hem9uIEVDUiByZWZyZXNoZXMgdGhlIGxhc3QgaW1hZ2UgcHVsbCB0aW1lc3RhbXAgYXQgbGVhc3Qgb25jZSBldmVyeSAyNCBob3Vycy4gRm9yXG4gICAqICAgICAgICAgICAgICAgICBleGFtcGxlLCBpZiB5b3UgcHVsbCBhbiBpbWFnZSBvbmNlIGEgZGF5IHRoZW4gdGhlIDxjb2RlPmxhc3RSZWNvcmRlZFB1bGxUaW1lPC9jb2RlPlxuICAgKiAgICAgICAgICAgICAgICAgdGltZXN0YW1wIHdpbGwgaW5kaWNhdGUgdGhlIGV4YWN0IHRpbWUgdGhhdCB0aGUgaW1hZ2Ugd2FzIGxhc3QgcHVsbGVkLiBIb3dldmVyLCBpZlxuICAgKiAgICAgICAgICAgICAgICAgeW91IHB1bGwgYW4gaW1hZ2Ugb25jZSBhbiBob3VyLCBiZWNhdXNlIEFtYXpvbiBFQ1IgcmVmcmVzaGVzIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3RSZWNvcmRlZFB1bGxUaW1lPC9jb2RlPiB0aW1lc3RhbXAgYXQgbGVhc3Qgb25jZSBldmVyeSAyNCBob3VycywgdGhlXG4gICAqICAgICAgICAgICAgICAgICByZXN1bHQgbWF5IG5vdCBiZSB0aGUgZXhhY3QgdGltZSB0aGF0IHRoZSBpbWFnZSB3YXMgbGFzdCBwdWxsZWQuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBsYXN0UmVjb3JkZWRQdWxsVGltZT86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVJbWFnZXNSZXNwb25zZSB7XG4gIC8qKlxuICAgKiA8cD5BIGxpc3Qgb2YgPGE+SW1hZ2VEZXRhaWw8L2E+IG9iamVjdHMgdGhhdCBjb250YWluIGRhdGEgYWJvdXQgdGhlXG4gICAqICAgICAgICAgICAgIGltYWdlLjwvcD5cbiAgICovXG4gIGltYWdlRGV0YWlscz86IEltYWdlRGV0YWlsW107XG4gIC8qKlxuICAgKiA8cD5UaGUgPGNvZGU+bmV4dFRva2VuPC9jb2RlPiB2YWx1ZSB0byBpbmNsdWRlIGluIGEgZnV0dXJlIDxjb2RlPkRlc2NyaWJlSW1hZ2VzPC9jb2RlPlxuICAgKiAgICAgICAgICAgICByZXF1ZXN0LiBXaGVuIHRoZSByZXN1bHRzIG9mIGEgPGNvZGU+RGVzY3JpYmVJbWFnZXM8L2NvZGU+IHJlcXVlc3QgZXhjZWVkXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5tYXhSZXN1bHRzPC9jb2RlPiwgdGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgbmV4dCBwYWdlIG9mXG4gICAqICAgICAgICAgICAgIHJlc3VsdHMuIFRoaXMgdmFsdWUgaXMgPGNvZGU+bnVsbDwvY29kZT4gd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSByZXN1bHRzIHRvXG4gICAqICAgICAgICAgICAgIHJldHVybi48L3A+XG4gICAqL1xuICBuZXh0VG9rZW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVSZXBvc2l0b3JpZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIDxwPlRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIGFjY291bnQgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IGNvbnRhaW5zIHRoZSByZXBvc2l0b3JpZXMgdG8gYmVcbiAgICogICAgICAgICAgICAgZGVzY3JpYmVkLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSByZWdpc3RyeSwgdGhlIGRlZmF1bHQgcmVnaXN0cnkgaXMgYXNzdW1lZC48L3A+XG4gICAqL1xuICByZWdpc3RyeUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+QSBsaXN0IG9mIHJlcG9zaXRvcmllcyB0byBkZXNjcmliZS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgdGhlbiBhbGxcbiAgICogICAgICAgICAgICAgcmVwb3NpdG9yaWVzIGluIGEgcmVnaXN0cnkgYXJlIGRlc2NyaWJlZC48L3A+XG4gICAqL1xuICByZXBvc2l0b3J5TmFtZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIDxwPlRoZSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlIHJldHVybmVkIGZyb20gYSBwcmV2aW91cyBwYWdpbmF0ZWRcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPkRlc2NyaWJlUmVwb3NpdG9yaWVzPC9jb2RlPiByZXF1ZXN0IHdoZXJlIDxjb2RlPm1heFJlc3VsdHM8L2NvZGU+IHdhcyB1c2VkIGFuZFxuICAgKiAgICAgICAgICAgICB0aGUgcmVzdWx0cyBleGNlZWRlZCB0aGUgdmFsdWUgb2YgdGhhdCBwYXJhbWV0ZXIuIFBhZ2luYXRpb24gY29udGludWVzIGZyb20gdGhlIGVuZCBvZlxuICAgKiAgICAgICAgICAgICB0aGUgcHJldmlvdXMgcmVzdWx0cyB0aGF0IHJldHVybmVkIHRoZSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlLiBUaGlzIHZhbHVlIGlzXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHJlc3VsdHMgdG8gcmV0dXJuLiBUaGlzIG9wdGlvbiBjYW5ub3QgYmVcbiAgICogICAgICAgICAgICAgdXNlZCB3aGVuIHlvdSBzcGVjaWZ5IHJlcG9zaXRvcmllcyB3aXRoIDxjb2RlPnJlcG9zaXRvcnlOYW1lczwvY29kZT4uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyB0b2tlbiBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBvcGFxdWUgaWRlbnRpZmllciB0aGF0IGlzIG9ubHkgdXNlZCB0b1xuICAgKiAgICAgICAgICAgICAgICAgcmV0cmlldmUgdGhlIG5leHQgaXRlbXMgaW4gYSBsaXN0IGFuZCBub3QgZm9yIG90aGVyIHByb2dyYW1tYXRpYyBwdXJwb3Nlcy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIG5leHRUb2tlbj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiByZXBvc2l0b3J5IHJlc3VsdHMgcmV0dXJuZWQgYnkgPGNvZGU+RGVzY3JpYmVSZXBvc2l0b3JpZXM8L2NvZGU+XG4gICAqICAgICAgICAgICAgIGluIHBhZ2luYXRlZCBvdXRwdXQuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCwgPGNvZGU+RGVzY3JpYmVSZXBvc2l0b3JpZXM8L2NvZGU+IG9ubHlcbiAgICogICAgICAgICAgICAgcmV0dXJucyA8Y29kZT5tYXhSZXN1bHRzPC9jb2RlPiByZXN1bHRzIGluIGEgc2luZ2xlIHBhZ2UgYWxvbmcgd2l0aCBhXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHJlc3BvbnNlIGVsZW1lbnQuIFRoZSByZW1haW5pbmcgcmVzdWx0cyBvZiB0aGUgaW5pdGlhbFxuICAgKiAgICAgICAgICAgICByZXF1ZXN0IGNhbiBiZSBzZWVuIGJ5IHNlbmRpbmcgYW5vdGhlciA8Y29kZT5EZXNjcmliZVJlcG9zaXRvcmllczwvY29kZT4gcmVxdWVzdCB3aXRoXG4gICAqICAgICAgICAgICAgIHRoZSByZXR1cm5lZCA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlLiBUaGlzIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDFcbiAgICogICAgICAgICAgICAgYW5kIDEwMDAuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLCB0aGVuXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5EZXNjcmliZVJlcG9zaXRvcmllczwvY29kZT4gcmV0dXJucyB1cCB0byAxMDAgcmVzdWx0cyBhbmQgYVxuICAgKiAgICAgICAgICAgICAgICAgPGNvZGU+bmV4dFRva2VuPC9jb2RlPiB2YWx1ZSwgaWYgYXBwbGljYWJsZS4gVGhpcyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2hlbiB5b3VcbiAgICogICAgICAgICAgICAgc3BlY2lmeSByZXBvc2l0b3JpZXMgd2l0aCA8Y29kZT5yZXBvc2l0b3J5TmFtZXM8L2NvZGU+LjwvcD5cbiAgICovXG4gIG1heFJlc3VsdHM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kSW5wdXQgZXh0ZW5kcyBEZXNjcmliZVJlcG9zaXRvcmllc1JlcXVlc3Qge1xufVxuXG5leHBvcnQgY29uc3QgSW1hZ2VUYWdNdXRhYmlsaXR5ID0ge1xuICBJTU1VVEFCTEU6ICdJTU1VVEFCTEUnLFxuICBNVVRBQkxFOiAnTVVUQUJMRScsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VUYWdNdXRhYmlsaXR5ID0gKHR5cGVvZiBJbWFnZVRhZ011dGFiaWxpdHkpW2tleW9mIHR5cGVvZiBJbWFnZVRhZ011dGFiaWxpdHldO1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIDxwPlRoZSBzZXR0aW5nIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGltYWdlcyBhcmUgc2Nhbm5lZCBhZnRlciBiZWluZyBwdXNoZWQgdG8gYVxuICAgKiAgICAgICAgICAgICByZXBvc2l0b3J5LiBJZiBzZXQgdG8gPGNvZGU+dHJ1ZTwvY29kZT4sIGltYWdlcyB3aWxsIGJlIHNjYW5uZWQgYWZ0ZXIgYmVpbmcgcHVzaGVkLiBJZlxuICAgKiAgICAgICAgICAgICB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+IGFuZCBpbWFnZXMgd2lsbFxuICAgKiAgICAgICAgICAgICBub3QgYmUgc2Nhbm5lZCB1bmxlc3MgYSBzY2FuIGlzIG1hbnVhbGx5IHN0YXJ0ZWQgd2l0aCB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1IvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfU3RhcnRJbWFnZVNjYW4uaHRtbFwiPkFQSV9TdGFydEltYWdlU2NhbjwvYT4gQVBJLjwvcD5cbiAgICovXG4gIHNjYW5PblB1c2g/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgRW5jcnlwdGlvblR5cGUgPSB7XG4gIEFFUzI1NjogJ0FFUzI1NicsXG4gIEtNUzogJ0tNUycsXG4gIEtNU19EU1NFOiAnS01TX0RTU0UnLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKi9cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25UeXBlID0gKHR5cGVvZiBFbmNyeXB0aW9uVHlwZSlba2V5b2YgdHlwZW9mIEVuY3J5cHRpb25UeXBlXTtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiA8cD5UaGUgZW5jcnlwdGlvbiB0eXBlIHRvIHVzZS48L3A+XG4gICAqICAgICAgICAgIDxwPklmIHlvdSB1c2UgdGhlIDxjb2RlPktNUzwvY29kZT4gZW5jcnlwdGlvbiB0eXBlLCB0aGUgY29udGVudHMgb2YgdGhlIHJlcG9zaXRvcnkgd2lsbFxuICAgKiAgICAgICAgICAgICBiZSBlbmNyeXB0ZWQgdXNpbmcgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB3aXRoIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHN0b3JlZCBpbiBLTVMuIFdoZW4geW91XG4gICAqICAgICAgICAgICAgIHVzZSBLTVMgdG8gZW5jcnlwdCB5b3VyIGRhdGEsIHlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgZGVmYXVsdCBBbWF6b24gV2ViIFNlcnZpY2VzIG1hbmFnZWQgS01TIGtleVxuICAgKiAgICAgICAgICAgICBmb3IgQW1hem9uIEVDUiwgb3Igc3BlY2lmeSB5b3VyIG93biBLTVMga2V5LCB3aGljaCB5b3UgYWxyZWFkeSBjcmVhdGVkLjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgeW91IHVzZSB0aGUgPGNvZGU+S01TX0RTU0U8L2NvZGU+IGVuY3J5cHRpb24gdHlwZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXBvc2l0b3J5XG4gICAqICAgICAgICAgICAgIHdpbGwgYmUgZW5jcnlwdGVkIHdpdGggdHdvIGxheWVycyBvZiBlbmNyeXB0aW9uIHVzaW5nIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCB0aGVcbiAgICogICAgICAgICAgICAgS01TIE1hbmFnZW1lbnQgU2VydmljZSBrZXkgc3RvcmVkIGluIEtNUy4gU2ltaWxhciB0byB0aGUgPGNvZGU+S01TPC9jb2RlPiBlbmNyeXB0aW9uIHR5cGUsIHlvdVxuICAgKiAgICAgICAgICAgICBjYW4gZWl0aGVyIHVzZSB0aGUgZGVmYXVsdCBBbWF6b24gV2ViIFNlcnZpY2VzIG1hbmFnZWQgS01TIGtleSBmb3IgQW1hem9uIEVDUiwgb3Igc3BlY2lmeSB5b3VyIG93biBLTVNcbiAgICogICAgICAgICAgICAga2V5LCB3aGljaCB5b3UndmUgYWxyZWFkeSBjcmVhdGVkLiA8L3A+XG4gICAqICAgICAgICAgIDxwPklmIHlvdSB1c2UgdGhlIDxjb2RlPkFFUzI1NjwvY29kZT4gZW5jcnlwdGlvbiB0eXBlLCBBbWF6b24gRUNSIHVzZXMgc2VydmVyLXNpZGUgZW5jcnlwdGlvblxuICAgKiAgICAgICAgICAgICB3aXRoIEFtYXpvbiBTMy1tYW5hZ2VkIGVuY3J5cHRpb24ga2V5cyB3aGljaCBlbmNyeXB0cyB0aGUgaW1hZ2VzIGluIHRoZSByZXBvc2l0b3J5IHVzaW5nIGFuXG4gICAqICAgICAgICAgICAgIEFFUzI1NiBlbmNyeXB0aW9uIGFsZ29yaXRobS48L3A+XG4gICAqICAgICAgICAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1IvbGF0ZXN0L3VzZXJndWlkZS9lbmNyeXB0aW9uLWF0LXJlc3QuaHRtbFwiPkFtYXpvbiBFQ1IgZW5jcnlwdGlvbiBhdFxuICAgKiAgICAgICAgICAgICByZXN0PC9hPiBpbiB0aGUgPGk+QW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFJlZ2lzdHJ5IFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIGVuY3J5cHRpb25UeXBlOiBFbmNyeXB0aW9uVHlwZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogPHA+SWYgeW91IHVzZSB0aGUgPGNvZGU+S01TPC9jb2RlPiBlbmNyeXB0aW9uIHR5cGUsIHNwZWNpZnkgdGhlIEtNUyBrZXkgdG8gdXNlIGZvclxuICAgKiAgICAgICAgICAgICBlbmNyeXB0aW9uLiBUaGUgYWxpYXMsIGtleSBJRCwgb3IgZnVsbCBBUk4gb2YgdGhlIEtNUyBrZXkgY2FuIGJlIHNwZWNpZmllZC4gVGhlIGtleVxuICAgKiAgICAgICAgICAgICBtdXN0IGV4aXN0IGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgcmVwb3NpdG9yeS4gSWYgbm8ga2V5IGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHRcbiAgICogICAgICAgICAgICAgQW1hem9uIFdlYiBTZXJ2aWNlcyBtYW5hZ2VkIEtNUyBrZXkgZm9yIEFtYXpvbiBFQ1Igd2lsbCBiZSB1c2VkLjwvcD5cbiAgICovXG4gIGttc0tleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvc2l0b3J5IHtcbiAgLyoqXG4gICAqIDxwPlRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSB0aGF0IGlkZW50aWZpZXMgdGhlIHJlcG9zaXRvcnkuIFRoZSBBUk4gY29udGFpbnMgdGhlIDxjb2RlPmFybjphd3M6ZWNyPC9jb2RlPiBuYW1lc3BhY2UsIGZvbGxvd2VkIGJ5IHRoZSByZWdpb24gb2YgdGhlXG4gICAqICAgICByZXBvc2l0b3J5LCBBbWF6b24gV2ViIFNlcnZpY2VzIGFjY291bnQgSUQgb2YgdGhlIHJlcG9zaXRvcnkgb3duZXIsIHJlcG9zaXRvcnkgbmFtZXNwYWNlLCBhbmQgcmVwb3NpdG9yeSBuYW1lLlxuICAgKiAgICAgRm9yIGV4YW1wbGUsIDxjb2RlPmFybjphd3M6ZWNyOnJlZ2lvbjowMTIzNDU2Nzg5MTA6cmVwb3NpdG9yeS1uYW1lc3BhY2UvcmVwb3NpdG9yeS1uYW1lPC9jb2RlPi48L3A+XG4gICAqL1xuICByZXBvc2l0b3J5QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBhY2NvdW50IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cnkgdGhhdCBjb250YWlucyB0aGUgcmVwb3NpdG9yeS48L3A+XG4gICAqL1xuICByZWdpc3RyeUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS48L3A+XG4gICAqL1xuICByZXBvc2l0b3J5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogPHA+VGhlIFVSSSBmb3IgdGhlIHJlcG9zaXRvcnkuIFlvdSBjYW4gdXNlIHRoaXMgVVJJIGZvciBjb250YWluZXIgaW1hZ2UgPGNvZGU+cHVzaDwvY29kZT5cbiAgICogICAgICAgICAgICAgYW5kIDxjb2RlPnB1bGw8L2NvZGU+IG9wZXJhdGlvbnMuPC9wPlxuICAgKi9cbiAgcmVwb3NpdG9yeVVyaT86IHN0cmluZztcblxuICAvKipcbiAgICogPHA+VGhlIGRhdGUgYW5kIHRpbWUsIGluIEphdmFTY3JpcHQgZGF0ZSBmb3JtYXQsIHdoZW4gdGhlIHJlcG9zaXRvcnkgd2FzIGNyZWF0ZWQuPC9wPlxuICAgKi9cbiAgY3JlYXRlZEF0PzogRGF0ZTtcblxuICAvKipcbiAgICogPHA+VGhlIHRhZyBtdXRhYmlsaXR5IHNldHRpbmcgZm9yIHRoZSByZXBvc2l0b3J5LjwvcD5cbiAgICovXG4gIGltYWdlVGFnTXV0YWJpbGl0eT86IEltYWdlVGFnTXV0YWJpbGl0eTtcblxuICAvKipcbiAgICogPHA+VGhlIGltYWdlIHNjYW5uaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGEgcmVwb3NpdG9yeS48L3A+XG4gICAqL1xuICBpbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbj86IEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgcmVwb3NpdG9yeS4gVGhpcyBkZXRlcm1pbmVzIGhvdyB0aGUgY29udGVudHMgb2ZcbiAgICogICAgICAgICAgICAgeW91ciByZXBvc2l0b3J5IGFyZSBlbmNyeXB0ZWQgYXQgcmVzdC48L3A+XG4gICAqL1xuICBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IEVuY3J5cHRpb25Db25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaWJlUmVwb3NpdG9yaWVzUmVzcG9uc2Uge1xuICAvKipcbiAgICogPHA+QSBsaXN0IG9mIHJlcG9zaXRvcnkgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHZhbGlkIHJlcG9zaXRvcmllcy48L3A+XG4gICAqL1xuICByZXBvc2l0b3JpZXM/OiBSZXBvc2l0b3J5W107XG4gIC8qKlxuICAgKiA8cD5UaGUgPGNvZGU+bmV4dFRva2VuPC9jb2RlPiB2YWx1ZSB0byBpbmNsdWRlIGluIGEgZnV0dXJlXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5EZXNjcmliZVJlcG9zaXRvcmllczwvY29kZT4gcmVxdWVzdC4gV2hlbiB0aGUgcmVzdWx0cyBvZiBhXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5EZXNjcmliZVJlcG9zaXRvcmllczwvY29kZT4gcmVxdWVzdCBleGNlZWQgPGNvZGU+bWF4UmVzdWx0czwvY29kZT4sIHRoaXMgdmFsdWVcbiAgICogICAgICAgICAgICAgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzLiBUaGlzIHZhbHVlIGlzIDxjb2RlPm51bGw8L2NvZGU+IHdoZW5cbiAgICogICAgICAgICAgICAgdGhlcmUgYXJlIG5vIG1vcmUgcmVzdWx0cyB0byByZXR1cm4uPC9wPlxuICAgKi9cbiAgbmV4dFRva2VuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZE91dHB1dFxuICBleHRlbmRzIERlc2NyaWJlUmVwb3NpdG9yaWVzUmVzcG9uc2UsXG4gIE1ldGFkYXRhQmVhcmVyIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRBdXRob3JpemF0aW9uVG9rZW5SZXF1ZXN0IHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqXG4gICAqIDxwPkEgbGlzdCBvZiBBbWF6b24gV2ViIFNlcnZpY2VzIGFjY291bnQgSURzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cmllcyBmb3Igd2hpY2ggdG8gZ2V0XG4gICAqICAgICAgICAgICAgIEF1dGhvcml6YXRpb25EYXRhIG9iamVjdHMuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHJlZ2lzdHJ5LCB0aGUgZGVmYXVsdCByZWdpc3RyeSBpcyBhc3N1bWVkLjwvcD5cbiAgICovXG4gIHJlZ2lzdHJ5SWRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZElucHV0IGV4dGVuZHMgR2V0QXV0aG9yaXphdGlvblRva2VuUmVxdWVzdCB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXphdGlvbkRhdGEge1xuICAvKipcbiAgICogPHA+QSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgdGhhdCBjb250YWlucyBhdXRob3JpemF0aW9uIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgQW1hem9uIEVDUlxuICAgKiAgICAgICAgICAgICByZWdpc3RyeS4gV2hlbiB0aGUgc3RyaW5nIGlzIGRlY29kZWQsIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgZm9ybWF0XG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT51c2VyOnBhc3N3b3JkPC9jb2RlPiBmb3IgcHJpdmF0ZSByZWdpc3RyeSBhdXRoZW50aWNhdGlvbiB1c2luZyA8Y29kZT5kb2NrZXJcbiAgICogICAgICAgICAgICAgICAgIGxvZ2luPC9jb2RlPi48L3A+XG4gICAqL1xuICBhdXRob3JpemF0aW9uVG9rZW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgVW5peCB0aW1lIGluIHNlY29uZHMgYW5kIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSBhdXRob3JpemF0aW9uIHRva2VuIGV4cGlyZXMuXG4gICAqICAgICAgICAgICAgIEF1dGhvcml6YXRpb24gdG9rZW5zIGFyZSB2YWxpZCBmb3IgMTIgaG91cnMuPC9wPlxuICAgKi9cbiAgZXhwaXJlc0F0PzogRGF0ZTtcbiAgLyoqXG4gICAqIDxwPlRoZSByZWdpc3RyeSBVUkwgdG8gdXNlIGZvciB0aGlzIGF1dGhvcml6YXRpb24gdG9rZW4gaW4gYSA8Y29kZT5kb2NrZXIgbG9naW48L2NvZGU+XG4gICAqICAgICAgICAgICAgIGNvbW1hbmQuIFRoZSBBbWF6b24gRUNSIHJlZ2lzdHJ5IFVSTCBmb3JtYXQgaXNcbiAgICogICAgICAgICA8Y29kZT5odHRwczovL2F3c19hY2NvdW50X2lkLmRrci5lY3IucmVnaW9uLmFtYXpvbmF3cy5jb208L2NvZGU+LiBGb3IgZXhhbXBsZSxcbiAgICogICAgICAgICA8Y29kZT5odHRwczovLzAxMjM0NTY3ODkxMC5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tPC9jb2RlPi4uIDwvcD5cbiAgICovXG4gIHByb3h5RW5kcG9pbnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXV0aG9yaXphdGlvblRva2VuUmVzcG9uc2Uge1xuICAvKipcbiAgICogPHA+QSBsaXN0IG9mIGF1dGhvcml6YXRpb24gdG9rZW4gZGF0YSBvYmplY3RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGVcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPnJlZ2lzdHJ5SWRzPC9jb2RlPiB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuPC9wPlxuICAgKi9cbiAgYXV0aG9yaXphdGlvbkRhdGE/OiBBdXRob3JpemF0aW9uRGF0YVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXRcbiAgZXh0ZW5kcyBHZXRBdXRob3JpemF0aW9uVG9rZW5SZXNwb25zZSxcbiAgTWV0YWRhdGFCZWFyZXIge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFNlY3JldFZhbHVlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiA8cD5UaGUgQVJOIG9yIG5hbWUgb2YgdGhlIHNlY3JldCB0byByZXRyaWV2ZS4gVG8gcmV0cmlldmUgYSBzZWNyZXQgZnJvbSBhbm90aGVyIGFjY291bnQsIHlvdSBtdXN0IHVzZSBhbiBBUk4uPC9wPlxuICAgKiAgICAgICAgICA8cD5Gb3IgYW4gQVJOLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSBhIGNvbXBsZXRlIEFSTiByYXRoZXJcbiAgICogICAgICAgdGhhbiBhIHBhcnRpYWwgQVJOLiBTZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZWNyZXRzbWFuYWdlci9sYXRlc3QvdXNlcmd1aWRlL3Ryb3VibGVzaG9vdC5odG1sI0FSTl9zZWNyZXRuYW1laHlwaGVuXCI+RmluZGluZyBhIHNlY3JldCBmcm9tIGEgcGFydGlhbCBBUk48L2E+LjwvcD5cbiAgICovXG4gIFNlY3JldElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiA8cD5UaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHZlcnNpb24gb2YgdGhlIHNlY3JldCB0byByZXRyaWV2ZS4gSWZcbiAgICogICAgICAgeW91IGluY2x1ZGUgYm90aCB0aGlzIHBhcmFtZXRlciBhbmQgPGNvZGU+VmVyc2lvblN0YWdlPC9jb2RlPiwgdGhlIHR3byBwYXJhbWV0ZXJzIG11c3QgcmVmZXJcbiAgICogICAgICAgdG8gdGhlIHNhbWUgc2VjcmV0IHZlcnNpb24uIElmIHlvdSBkb24ndCBzcGVjaWZ5IGVpdGhlciBhIDxjb2RlPlZlcnNpb25TdGFnZTwvY29kZT4gb3JcbiAgICogICAgICAgICA8Y29kZT5WZXJzaW9uSWQ8L2NvZGU+LCB0aGVuIFNlY3JldHMgTWFuYWdlciByZXR1cm5zIHRoZSA8Y29kZT5BV1NDVVJSRU5UPC9jb2RlPiB2ZXJzaW9uLjwvcD5cbiAgICogICAgICAgICAgPHA+VGhpcyB2YWx1ZSBpcyB0eXBpY2FsbHkgYSA8YSBocmVmPVwiaHR0cHM6Ly93aWtpcGVkaWEub3JnL3dpa2kvVW5pdmVyc2FsbHlfdW5pcXVlX2lkZW50aWZpZXJcIj5VVUlELXR5cGU8L2E+IHZhbHVlIHdpdGhcbiAgICogICAgICAgMzIgaGV4YWRlY2ltYWwgZGlnaXRzLjwvcD5cbiAgICovXG4gIFZlcnNpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBzdGFnaW5nIGxhYmVsIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBzZWNyZXQgdG8gcmV0cmlldmUuIDwvcD5cbiAgICogICAgICAgICAgPHA+U2VjcmV0cyBNYW5hZ2VyIHVzZXMgc3RhZ2luZyBsYWJlbHMgdG8ga2VlcCB0cmFjayBvZiBkaWZmZXJlbnQgdmVyc2lvbnMgZHVyaW5nIHRoZSByb3RhdGlvbiBwcm9jZXNzLlxuICAgKiAgICAgICBJZiB5b3UgaW5jbHVkZSBib3RoIHRoaXMgcGFyYW1ldGVyIGFuZCA8Y29kZT5WZXJzaW9uSWQ8L2NvZGU+LCB0aGUgdHdvIHBhcmFtZXRlcnMgbXVzdCByZWZlclxuICAgKiAgICAgICB0byB0aGUgc2FtZSBzZWNyZXQgdmVyc2lvbi4gSWYgeW91IGRvbid0IHNwZWNpZnkgZWl0aGVyIGEgPGNvZGU+VmVyc2lvblN0YWdlPC9jb2RlPiBvclxuICAgKiAgICAgICA8Y29kZT5WZXJzaW9uSWQ8L2NvZGU+LCBTZWNyZXRzIE1hbmFnZXIgcmV0dXJucyB0aGUgPGNvZGU+QVdTQ1VSUkVOVDwvY29kZT4gdmVyc2lvbi48L3A+XG4gICAqL1xuICBWZXJzaW9uU3RhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2VjcmV0VmFsdWVDb21tYW5kSW5wdXQgZXh0ZW5kcyBHZXRTZWNyZXRWYWx1ZVJlcXVlc3Qge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFNlY3JldFZhbHVlUmVzcG9uc2Uge1xuICAvKipcbiAgICogPHA+VGhlIEFSTiBvZiB0aGUgc2VjcmV0LjwvcD5cbiAgICovXG4gIEFSTj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBmcmllbmRseSBuYW1lIG9mIHRoZSBzZWNyZXQuPC9wPlxuICAgKi9cbiAgTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIHNlY3JldC48L3A+XG4gICAqL1xuICBWZXJzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgZGVjcnlwdGVkIHNlY3JldCB2YWx1ZSwgaWYgdGhlIHNlY3JldCB2YWx1ZSB3YXMgb3JpZ2luYWxseSBwcm92aWRlZCBhc1xuICAgKiAgICAgICBiaW5hcnkgZGF0YSBpbiB0aGUgZm9ybSBvZiBhIGJ5dGUgYXJyYXkuIFdoZW4geW91IHJldHJpZXZlIGEgPGNvZGU+U2VjcmV0QmluYXJ5PC9jb2RlPiB1c2luZyB0aGUgSFRUUCBBUEksIHRoZSBQeXRob24gU0RLLCBvciB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBDTEksIHRoZSB2YWx1ZSBpcyBCYXNlNjQtZW5jb2RlZC4gT3RoZXJ3aXNlLCBpdCBpcyBub3QgZW5jb2RlZC48L3A+XG4gICAqICAgICAgICAgIDxwPklmIHRoZSBzZWNyZXQgd2FzIGNyZWF0ZWQgYnkgdXNpbmcgdGhlIFNlY3JldHMgTWFuYWdlciBjb25zb2xlLCBvciBpZiB0aGUgc2VjcmV0IHZhbHVlIHdhc1xuICAgKiAgICAgICBvcmlnaW5hbGx5IHByb3ZpZGVkIGFzIGEgc3RyaW5nLCB0aGVuIHRoaXMgZmllbGQgaXMgb21pdHRlZC4gVGhlIHNlY3JldCB2YWx1ZSBhcHBlYXJzIGluXG4gICAqICAgICAgIDxjb2RlPlNlY3JldFN0cmluZzwvY29kZT4gaW5zdGVhZC48L3A+XG4gICAqICAgICAgICAgIDxwPlNlbnNpdGl2ZTogVGhpcyBmaWVsZCBjb250YWlucyBzZW5zaXRpdmUgaW5mb3JtYXRpb24sIHNvIHRoZSBzZXJ2aWNlIGRvZXMgbm90IGluY2x1ZGUgaXQgaW4gQ2xvdWRUcmFpbCBsb2cgZW50cmllcy4gSWYgeW91IGNyZWF0ZSB5b3VyIG93biBsb2cgZW50cmllcywgeW91IG11c3QgYWxzbyBhdm9pZCBsb2dnaW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpZWxkLjwvcD5cbiAgICovXG4gIFNlY3JldEJpbmFyeT86IFVpbnQ4QXJyYXk7XG4gIC8qKlxuICAgKiA8cD5UaGUgZGVjcnlwdGVkIHNlY3JldCB2YWx1ZSwgaWYgdGhlIHNlY3JldCB2YWx1ZSB3YXMgb3JpZ2luYWxseSBwcm92aWRlZCBhcyBhIHN0cmluZyBvclxuICAgKiAgICAgICB0aHJvdWdoIHRoZSBTZWNyZXRzIE1hbmFnZXIgY29uc29sZS48L3A+XG4gICAqICAgICAgICAgIDxwPklmIHRoaXMgc2VjcmV0IHdhcyBjcmVhdGVkIGJ5IHVzaW5nIHRoZSBjb25zb2xlLCB0aGVuIFNlY3JldHMgTWFuYWdlciBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIGFzIGFcbiAgICogICAgICAgSlNPTiBzdHJ1Y3R1cmUgb2Yga2V5L3ZhbHVlIHBhaXJzLiA8L3A+XG4gICAqICAgICAgICAgIDxwPlNlbnNpdGl2ZTogVGhpcyBmaWVsZCBjb250YWlucyBzZW5zaXRpdmUgaW5mb3JtYXRpb24sIHNvIHRoZSBzZXJ2aWNlIGRvZXMgbm90IGluY2x1ZGUgaXQgaW4gQ2xvdWRUcmFpbCBsb2cgZW50cmllcy4gSWYgeW91IGNyZWF0ZSB5b3VyIG93biBsb2cgZW50cmllcywgeW91IG11c3QgYWxzbyBhdm9pZCBsb2dnaW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpZWxkLjwvcD5cbiAgICovXG4gIFNlY3JldFN0cmluZz86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkEgbGlzdCBvZiBhbGwgb2YgdGhlIHN0YWdpbmcgbGFiZWxzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGlzIHZlcnNpb24gb2YgdGhlXG4gICAqICAgICAgIHNlY3JldC48L3A+XG4gICAqL1xuICBWZXJzaW9uU3RhZ2VzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiA8cD5UaGUgZGF0ZSBhbmQgdGltZSB0aGF0IHRoaXMgdmVyc2lvbiBvZiB0aGUgc2VjcmV0IHdhcyBjcmVhdGVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeVxuICAgKiAgICAgICB3aGljaCB2ZXJzaW9uIGluIDxjb2RlPlZlcnNpb25JZDwvY29kZT4gb3IgPGNvZGU+VmVyc2lvblN0YWdlPC9jb2RlPiwgdGhlbiBTZWNyZXRzIE1hbmFnZXIgdXNlcyB0aGVcbiAgICogICAgICAgPGNvZGU+QVdTQ1VSUkVOVDwvY29kZT4gdmVyc2lvbi48L3A+XG4gICAqL1xuICBDcmVhdGVkRGF0ZT86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0IGV4dGVuZHMgR2V0U2VjcmV0VmFsdWVSZXNwb25zZSwgTWV0YWRhdGFCZWFyZXIge1xufVxuIl19
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBc0RVLFFBQUEsb0JBQW9CLEdBQUc7SUFDbEMsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsWUFBWSxFQUFFLGNBQWM7Q0FDcEIsQ0FBQztBQWlHRSxRQUFBLHdCQUF3QixHQUFHO0lBQ3RDLEVBQUUsRUFBRSxJQUFJO0lBQ1IsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFlBQVksRUFBRSxjQUFjO0lBQzVCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsWUFBWSxFQUFFLGNBQWM7SUFDNUIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsYUFBYSxFQUFFLGVBQWU7SUFDOUIsYUFBYSxFQUFFLGVBQWU7SUFDOUIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7Q0FDZCxDQUFDO0FBaUJFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLEdBQUcsRUFBRSxLQUFLO0NBQ0YsQ0FBQztBQUlFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFNBQVMsRUFBRSxXQUFXO0NBQ2QsQ0FBQztBQUlFLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsY0FBYyxFQUFFLGVBQWU7Q0FDdkIsQ0FBQztBQTBIRSxRQUFBLGNBQWMsR0FBRztJQUM1QixTQUFTLEVBQUUsV0FBVztDQUNkLENBQUM7QUFJRSxRQUFBLG1CQUFtQixHQUFHO0lBQ2pDLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtDQUNSLENBQUM7QUFNRSxRQUFBLGtCQUFrQixHQUFHO0lBQ2hDLFlBQVksRUFBRSxjQUFjO0lBQzVCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsbUJBQW1CLEVBQUUscUJBQXFCO0lBQzFDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4QyxJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFdBQVcsRUFBRSxhQUFhO0NBQ2xCLENBQUM7QUEyU0UsUUFBQSxlQUFlLEdBQUc7SUFDN0Isa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLGFBQWEsRUFBRSxlQUFlO0lBQzlCLHlCQUF5QixFQUFFLDJCQUEyQjtJQUN0RCxpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsaUJBQWlCLEVBQUUsbUJBQW1CO0NBQzlCLENBQUM7QUFJRSxRQUFBLGNBQWMsR0FBRztJQUM1QixVQUFVLEVBQUUsWUFBWTtJQUN4QixVQUFVLEVBQUUsWUFBWTtDQUNoQixDQUFDO0FBSUUsUUFBQSx5QkFBeUIsR0FBRztJQUN2QyxHQUFHLEVBQUUsS0FBSztJQUNWLEVBQUUsRUFBRSxJQUFJO0NBQ0EsQ0FBQztBQUtFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFlBQVksRUFBRSxjQUFjO0lBQzVCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsbUJBQW1CLEVBQUUscUJBQXFCO0lBQzFDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4QyxJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFdBQVcsRUFBRSxhQUFhO0NBQ2xCLENBQUM7QUE4a0JFLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7Q0FDWixDQUFDO0FBb0RFLFFBQUEsVUFBVSxHQUFHO0lBQ3hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QyxXQUFXLEVBQUUsYUFBYTtJQUMxQixPQUFPLEVBQUUsU0FBUztJQUNsQix3QkFBd0IsRUFBRSwwQkFBMEI7SUFDcEQsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ3RDLGNBQWMsRUFBRSxnQkFBZ0I7Q0FDeEIsQ0FBQztBQUlFLFFBQUEsZUFBZSxHQUFHO0lBQzdCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLElBQUksRUFBRSxNQUFNO0lBQ1osYUFBYSxFQUFFLGVBQWU7SUFDOUIsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixTQUFTLEVBQUUsV0FBVztDQUNkLENBQUM7QUEySkUsUUFBQSxrQkFBa0IsR0FBRztJQUNoQyxTQUFTLEVBQUUsV0FBVztJQUN0QixPQUFPLEVBQUUsU0FBUztDQUNWLENBQUM7QUFnQkUsUUFBQSxjQUFjLEdBQUc7SUFDNUIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsR0FBRyxFQUFFLEtBQUs7SUFDVixRQUFRLEVBQUUsVUFBVTtDQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNvcHkgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgZnJvbSB0aGUgU0RLIHYzXG4gKiBjbGllbnRzLiBJbnN0ZWFkIG9mIGV4cG9zaW5nIHRoZSBTREsgdHlwZXMgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UsIHdlXG4gKiBleHBvc2UgdGhlc2UsIHNoaWVsZGluZyBjb25zdW1lcnMgZnJvbSBicmVha2luZyBjaGFuZ2VzIGluIGEgcG9zc2libGVcbiAqIG1pZ3JhdGlvbiB0byBhbiBTREsgdjQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIGxhc3QgSFRUUCByZXNwb25zZSByZWNlaXZlZCBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAqL1xuICBodHRwU3RhdHVzQ29kZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBsYXN0IHJlcXVlc3Qgc2VudCBmb3IgdGhpcyBvcGVyYXRpb24uIE9mdGVuXG4gICAqIHJlcXVlc3RlZCBieSBBV1Mgc2VydmljZSB0ZWFtcyB0byBhaWQgaW4gZGVidWdnaW5nLlxuICAgKi9cbiAgcmVxdWVzdElkPzogc3RyaW5nO1xuICAvKipcbiAgICogQSBzZWNvbmRhcnkgaWRlbnRpZmllciBmb3IgdGhlIGxhc3QgcmVxdWVzdCBzZW50LiBVc2VkIGZvciBkZWJ1Z2dpbmcuXG4gICAqL1xuICBleHRlbmRlZFJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgdGVydGlhcnkgaWRlbnRpZmllciBmb3IgdGhlIGxhc3QgcmVxdWVzdCBzZW50LiBVc2VkIGZvciBkZWJ1Z2dpbmcuXG4gICAqL1xuICBjZklkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkLlxuICAgKi9cbiAgYXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgYW1vdW50IG9mIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhhdCB3YXMgc3BlbnQgd2FpdGluZyBiZXR3ZWVuXG4gICAqIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgdG90YWxSZXRyeURlbGF5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhQmVhcmVyIHtcbiAgLyoqXG4gICAqIE1ldGFkYXRhIHBlcnRhaW5pbmcgdG8gdGhpcyByZXF1ZXN0LlxuICAgKi9cbiAgJG1ldGFkYXRhOiBSZXNwb25zZU1ldGFkYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kSW5wdXQge1xuICAvKipcbiAgICogPHA+VGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCBmcm9tIHdoaWNoIHRoZSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gaXNcbiAgICogICAgICAgICAgcmV0cmlldmVkLjwvcD5cbiAgICogPHA+Tm90ZTogVG8gc3VwcGx5IHRoZSBNdWx0aS1yZWdpb24gQWNjZXNzIFBvaW50IChNUkFQKSB0byBCdWNrZXQsIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIFwiQGF3cy1zZGsvc2lnbmF0dXJlLXY0LWNydFwiIHBhY2thZ2UgdG8geW91ciBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBnbyB0byBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMja25vd24taXNzdWVzPC9wPlxuICAgKi9cbiAgQnVja2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiA8cD5UaGUgYWNjb3VudCBJRCBvZiB0aGUgZXhwZWN0ZWQgYnVja2V0IG93bmVyLiBJZiB0aGUgYWNjb3VudCBJRCB0aGF0IHlvdSBwcm92aWRlIGRvZXMgbm90IG1hdGNoIHRoZSBhY3R1YWwgb3duZXIgb2YgdGhlIGJ1Y2tldCwgdGhlIHJlcXVlc3QgZmFpbHMgd2l0aCB0aGUgSFRUUCBzdGF0dXMgY29kZSA8Y29kZT40MDMgRm9yYmlkZGVuPC9jb2RlPiAoYWNjZXNzIGRlbmllZCkuPC9wPlxuICAgKi9cbiAgRXhwZWN0ZWRCdWNrZXRPd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFNlcnZlclNpZGVFbmNyeXB0aW9uID0ge1xuICBBRVMyNTY6ICdBRVMyNTYnLFxuICBhd3Nfa21zOiAnYXdzOmttcycsXG4gIGF3c19rbXNfZHNzZTogJ2F3czprbXM6ZHNzZScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlRW5jcnlwdGlvbiA9ICh0eXBlb2YgU2VydmVyU2lkZUVuY3J5cHRpb24pW2tleW9mIHR5cGVvZiBTZXJ2ZXJTaWRlRW5jcnlwdGlvbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQge1xuICAvKipcbiAgICogPHA+U2VydmVyLXNpZGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gdG8gdXNlIGZvciB0aGUgZGVmYXVsdCBlbmNyeXB0aW9uLjwvcD5cbiAgICovXG4gIFNTRUFsZ29yaXRobTogU2VydmVyU2lkZUVuY3J5cHRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiA8cD5BbWF6b24gV2ViIFNlcnZpY2VzIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykgY3VzdG9tZXIgQW1hem9uIFdlYiBTZXJ2aWNlcyBLTVMga2V5IElEIHRvIHVzZSBmb3IgdGhlIGRlZmF1bHRcbiAgICogICAgICAgICAgZW5jcnlwdGlvbi4gVGhpcyBwYXJhbWV0ZXIgaXMgYWxsb3dlZCBpZiBhbmQgb25seSBpZiA8Y29kZT5TU0VBbGdvcml0aG08L2NvZGU+IGlzIHNldCB0b1xuICAgKiAgICAgICAgICA8Y29kZT5hd3M6a21zPC9jb2RlPiBvciA8Y29kZT5hd3M6a21zOmRzc2U8L2NvZGU+LjwvcD5cbiAgICogICAgICAgICAgPHA+WW91IGNhbiBzcGVjaWZ5IHRoZSBrZXkgSUQsIGtleSBhbGlhcywgb3IgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBLTVNcbiAgICogICAgICAgICAga2V5LjwvcD5cbiAgICogICAgICAgICAgPHVsPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPktleSBJRDogPGNvZGU+MTIzNGFiY2QtMTJhYi0zNGNkLTU2ZWYtMTIzNDU2Nzg5MGFiPC9jb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+S2V5IEFSTjogPGNvZGU+YXJuOmF3czprbXM6dXMtZWFzdC0yOjExMTEyMjIyMzMzMzprZXkvMTIzNGFiY2QtMTJhYi0zNGNkLTU2ZWYtMTIzNDU2Nzg5MGFiPC9jb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+S2V5IEFsaWFzOiA8Y29kZT5hbGlhcy9hbGlhcy1uYW1lPC9jb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgIDwvdWw+XG4gICAqICAgICAgICAgIDxwPklmIHlvdSB1c2UgYSBrZXkgSUQsIHlvdSBjYW4gcnVuIGludG8gYSBMb2dEZXN0aW5hdGlvbiB1bmRlbGl2ZXJhYmxlIGVycm9yIHdoZW4gY3JlYXRpbmdcbiAgICogICAgICAgICAgYSBWUEMgZmxvdyBsb2cuIDwvcD5cbiAgICogICAgICAgICAgPHA+SWYgeW91IGFyZSB1c2luZyBlbmNyeXB0aW9uIHdpdGggY3Jvc3MtYWNjb3VudCBvciBBbWF6b24gV2ViIFNlcnZpY2VzIHNlcnZpY2Ugb3BlcmF0aW9ucyB5b3UgbXVzdCB1c2VcbiAgICogICAgICAgICAgYSBmdWxseSBxdWFsaWZpZWQgS01TIGtleSBBUk4uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2J1Y2tldC1lbmNyeXB0aW9uLmh0bWwjYnVja2V0LWVuY3J5cHRpb24tdXBkYXRlLWJ1Y2tldC1wb2xpY3lcIj5Vc2luZyBlbmNyeXB0aW9uIGZvciBjcm9zcy1hY2NvdW50IG9wZXJhdGlvbnM8L2E+LjwvcD5cbiAgICogICAgICAgICAgPGltcG9ydGFudD5cbiAgICogICAgICAgICAgICAgPHA+QW1hem9uIFMzIG9ubHkgc3VwcG9ydHMgc3ltbWV0cmljIGVuY3J5cHRpb24gS01TIGtleXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9rbXMvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3N5bW1ldHJpYy1hc3ltbWV0cmljLmh0bWxcIj5Bc3ltbWV0cmljIGtleXMgaW4gQW1hem9uIFdlYiBTZXJ2aWNlcyBLTVM8L2E+IGluIHRoZSA8aT5BbWF6b24gV2ViIFNlcnZpY2VzIEtleSBNYW5hZ2VtZW50IFNlcnZpY2VcbiAgICogICAgICAgICAgICAgICAgRGV2ZWxvcGVyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDwvaW1wb3J0YW50PlxuICAgKi9cbiAgS01TTWFzdGVyS2V5SUQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyU2lkZUVuY3J5cHRpb25SdWxlIHtcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHRvIGFwcGx5IHRvIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuIElmIGFcbiAgICogICAgICAgICAgUFVUIE9iamVjdCByZXF1ZXN0IGRvZXNuJ3Qgc3BlY2lmeSBhbnkgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgdGhpcyBkZWZhdWx0IGVuY3J5cHRpb24gd2lsbFxuICAgKiAgICAgICAgICBiZSBhcHBsaWVkLjwvcD5cbiAgICovXG4gIEFwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ/OiBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdDtcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB3aGV0aGVyIEFtYXpvbiBTMyBzaG91bGQgdXNlIGFuIFMzIEJ1Y2tldCBLZXkgd2l0aCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzaW5nIEtNU1xuICAgKiAgICAgICAgICAoU1NFLUtNUykgZm9yIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuIEV4aXN0aW5nIG9iamVjdHMgYXJlIG5vdCBhZmZlY3RlZC4gU2V0dGluZyB0aGVcbiAgICogICAgICAgICAgICAgPGNvZGU+QnVja2V0S2V5RW5hYmxlZDwvY29kZT4gZWxlbWVudCB0byA8Y29kZT50cnVlPC9jb2RlPiBjYXVzZXMgQW1hem9uIFMzIHRvIHVzZSBhbiBTM1xuICAgKiAgICAgICAgICBCdWNrZXQgS2V5LiBCeSBkZWZhdWx0LCBTMyBCdWNrZXQgS2V5IGlzIG5vdCBlbmFibGVkLjwvcD5cbiAgICogICAgICAgICAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvYnVja2V0LWtleS5odG1sXCI+QW1hem9uIFMzIEJ1Y2tldCBLZXlzPC9hPiBpbiB0aGVcbiAgICogICAgICAgICAgICAgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIEJ1Y2tldEtleUVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiA8cD5Db250YWluZXIgZm9yIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogICAgICAgICAgcnVsZS48L3A+XG4gICAqL1xuICBSdWxlczogU2VydmVyU2lkZUVuY3J5cHRpb25SdWxlW10gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVja2V0RW5jcnlwdGlvbk91dHB1dCB7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUtZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLjwvcD5cbiAgICovXG4gIFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dFxuICBleHRlbmRzIEdldEJ1Y2tldEVuY3J5cHRpb25PdXRwdXQsXG4gIE1ldGFkYXRhQmVhcmVyIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRJbnB1dCB7XG4gIC8qKlxuICAgKiA8cD5UaGUgbmFtZSBvZiB0aGUgYnVja2V0IGZvciB3aGljaCB0byBnZXQgdGhlIGxvY2F0aW9uLjwvcD5cbiAgICogICAgICAgICAgPHA+V2hlbiB5b3UgdXNlIHRoaXMgQVBJIG9wZXJhdGlvbiB3aXRoIGFuIGFjY2VzcyBwb2ludCwgcHJvdmlkZSB0aGUgYWxpYXMgb2YgdGhlIGFjY2VzcyBwb2ludCBpbiBwbGFjZSBvZiB0aGUgYnVja2V0IG5hbWUuPC9wPlxuICAgKiAgICAgICAgICA8cD5XaGVuIHlvdSB1c2UgdGhpcyBBUEkgb3BlcmF0aW9uIHdpdGggYW4gT2JqZWN0IExhbWJkYSBhY2Nlc3MgcG9pbnQsIHByb3ZpZGUgdGhlIGFsaWFzIG9mIHRoZSBPYmplY3QgTGFtYmRhIGFjY2VzcyBwb2ludCBpbiBwbGFjZSBvZiB0aGUgYnVja2V0IG5hbWUuXG4gICAqIElmIHRoZSBPYmplY3QgTGFtYmRhIGFjY2VzcyBwb2ludCBhbGlhcyBpbiBhIHJlcXVlc3QgaXMgbm90IHZhbGlkLCB0aGUgZXJyb3IgY29kZSA8Y29kZT5JbnZhbGlkQWNjZXNzUG9pbnRBbGlhc0Vycm9yPC9jb2RlPiBpcyByZXR1cm5lZC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgPGNvZGU+SW52YWxpZEFjY2Vzc1BvaW50QWxpYXNFcnJvcjwvY29kZT4sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvRXJyb3JSZXNwb25zZXMuaHRtbCNFcnJvckNvZGVMaXN0XCI+TGlzdCBvZlxuICAgKiAgICAgICAgICAgICBFcnJvciBDb2RlczwvYT4uPC9wPlxuICAgKiA8cD5Ob3RlOiBUbyBzdXBwbHkgdGhlIE11bHRpLXJlZ2lvbiBBY2Nlc3MgUG9pbnQgKE1SQVApIHRvIEJ1Y2tldCwgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgXCJAYXdzLXNkay9zaWduYXR1cmUtdjQtY3J0XCIgcGFja2FnZSB0byB5b3VyIHByb2plY3QgZGVwZW5kZW5jaWVzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGdvIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy12MyNrbm93bi1pc3N1ZXM8L3A+XG4gICAqL1xuICBCdWNrZXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIDxwPlRoZSBhY2NvdW50IElEIG9mIHRoZSBleHBlY3RlZCBidWNrZXQgb3duZXIuIElmIHRoZSBhY2NvdW50IElEIHRoYXQgeW91IHByb3ZpZGUgZG9lcyBub3QgbWF0Y2ggdGhlIGFjdHVhbCBvd25lciBvZiB0aGUgYnVja2V0LCB0aGUgcmVxdWVzdCBmYWlscyB3aXRoIHRoZSBIVFRQIHN0YXR1cyBjb2RlIDxjb2RlPjQwMyBGb3JiaWRkZW48L2NvZGU+IChhY2Nlc3MgZGVuaWVkKS48L3A+XG4gICAqL1xuICBFeHBlY3RlZEJ1Y2tldE93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQnVja2V0TG9jYXRpb25Db25zdHJhaW50ID0ge1xuICBFVTogJ0VVJyxcbiAgYWZfc291dGhfMTogJ2FmLXNvdXRoLTEnLFxuICBhcF9lYXN0XzE6ICdhcC1lYXN0LTEnLFxuICBhcF9ub3J0aGVhc3RfMTogJ2FwLW5vcnRoZWFzdC0xJyxcbiAgYXBfbm9ydGhlYXN0XzI6ICdhcC1ub3J0aGVhc3QtMicsXG4gIGFwX25vcnRoZWFzdF8zOiAnYXAtbm9ydGhlYXN0LTMnLFxuICBhcF9zb3V0aF8xOiAnYXAtc291dGgtMScsXG4gIGFwX3NvdXRoXzI6ICdhcC1zb3V0aC0yJyxcbiAgYXBfc291dGhlYXN0XzE6ICdhcC1zb3V0aGVhc3QtMScsXG4gIGFwX3NvdXRoZWFzdF8yOiAnYXAtc291dGhlYXN0LTInLFxuICBhcF9zb3V0aGVhc3RfMzogJ2FwLXNvdXRoZWFzdC0zJyxcbiAgYXBfc291dGhlYXN0XzQ6ICdhcC1zb3V0aGVhc3QtNCcsXG4gIGFwX3NvdXRoZWFzdF81OiAnYXAtc291dGhlYXN0LTUnLFxuICBjYV9jZW50cmFsXzE6ICdjYS1jZW50cmFsLTEnLFxuICBjbl9ub3J0aF8xOiAnY24tbm9ydGgtMScsXG4gIGNuX25vcnRod2VzdF8xOiAnY24tbm9ydGh3ZXN0LTEnLFxuICBldV9jZW50cmFsXzE6ICdldS1jZW50cmFsLTEnLFxuICBldV9jZW50cmFsXzI6ICdldS1jZW50cmFsLTInLFxuICBldV9ub3J0aF8xOiAnZXUtbm9ydGgtMScsXG4gIGV1X3NvdXRoXzE6ICdldS1zb3V0aC0xJyxcbiAgZXVfc291dGhfMjogJ2V1LXNvdXRoLTInLFxuICBldV93ZXN0XzE6ICdldS13ZXN0LTEnLFxuICBldV93ZXN0XzI6ICdldS13ZXN0LTInLFxuICBldV93ZXN0XzM6ICdldS13ZXN0LTMnLFxuICBpbF9jZW50cmFsXzE6ICdpbC1jZW50cmFsLTEnLFxuICBtZV9zb3V0aF8xOiAnbWUtc291dGgtMScsXG4gIG1lX2NlbnRyYWxfMTogJ21lLWNlbnRyYWwtMScsXG4gIHNhX2Vhc3RfMTogJ3NhLWVhc3QtMScsXG4gIHVzX2Vhc3RfMjogJ3VzLWVhc3QtMicsXG4gIHVzX2dvdl9lYXN0XzE6ICd1cy1nb3YtZWFzdC0xJyxcbiAgdXNfZ292X3dlc3RfMTogJ3VzLWdvdi13ZXN0LTEnLFxuICB1c193ZXN0XzE6ICd1cy13ZXN0LTEnLFxuICB1c193ZXN0XzI6ICd1cy13ZXN0LTInLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVja2V0TG9jYXRpb25Db25zdHJhaW50ID1cbiAgKHR5cGVvZiBCdWNrZXRMb2NhdGlvbkNvbnN0cmFpbnQpW2tleW9mIHR5cGVvZiBCdWNrZXRMb2NhdGlvbkNvbnN0cmFpbnRdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Y2tldExvY2F0aW9uT3V0cHV0IHtcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB0aGUgUmVnaW9uIHdoZXJlIHRoZSBidWNrZXQgcmVzaWRlcy4gRm9yIGEgbGlzdCBvZiBhbGwgdGhlIEFtYXpvbiBTMyBzdXBwb3J0ZWRcbiAgICogICAgICAgICAgbG9jYXRpb24gY29uc3RyYWludHMgYnkgUmVnaW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9yYW5kZS5odG1sI3MzX3JlZ2lvblwiPlJlZ2lvbnMgYW5kIEVuZHBvaW50czwvYT4uIEJ1Y2tldHMgaW5cbiAgICogICAgICAgICAgUmVnaW9uIDxjb2RlPnVzLWVhc3QtMTwvY29kZT4gaGF2ZSBhIExvY2F0aW9uQ29uc3RyYWludCBvZiA8Y29kZT5udWxsPC9jb2RlPi48L3A+XG4gICAqL1xuICBMb2NhdGlvbkNvbnN0cmFpbnQ/OiBCdWNrZXRMb2NhdGlvbkNvbnN0cmFpbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kT3V0cHV0IGV4dGVuZHMgR2V0QnVja2V0TG9jYXRpb25PdXRwdXQsIE1ldGFkYXRhQmVhcmVyIHtcbn1cblxuZXhwb3J0IGNvbnN0IEVuY29kaW5nVHlwZSA9IHtcbiAgdXJsOiAndXJsJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEVuY29kaW5nVHlwZSA9ICh0eXBlb2YgRW5jb2RpbmdUeXBlKVtrZXlvZiB0eXBlb2YgRW5jb2RpbmdUeXBlXTtcblxuZXhwb3J0IGNvbnN0IFJlcXVlc3RQYXllciA9IHtcbiAgcmVxdWVzdGVyOiAncmVxdWVzdGVyJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RQYXllciA9ICh0eXBlb2YgUmVxdWVzdFBheWVyKVtrZXlvZiB0eXBlb2YgUmVxdWVzdFBheWVyXTtcblxuZXhwb3J0IGNvbnN0IE9wdGlvbmFsT2JqZWN0QXR0cmlidXRlcyA9IHtcbiAgUkVTVE9SRV9TVEFUVVM6ICdSZXN0b3JlU3RhdHVzJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE9wdGlvbmFsT2JqZWN0QXR0cmlidXRlcyA9XG4gICh0eXBlb2YgT3B0aW9uYWxPYmplY3RBdHRyaWJ1dGVzKVtrZXlvZiB0eXBlb2YgT3B0aW9uYWxPYmplY3RBdHRyaWJ1dGVzXTtcblxuZXhwb3J0IGludGVyZmFjZSBMaXN0T2JqZWN0c1YyQ29tbWFuZElucHV0IHtcbiAgLyoqXG4gICAqIDxwPlxuICAgKiAgICAgICAgICAgICA8Yj5EaXJlY3RvcnkgYnVja2V0czwvYj4gLSBXaGVuIHlvdSB1c2UgdGhpcyBvcGVyYXRpb24gd2l0aCBhIGRpcmVjdG9yeSBidWNrZXQsIHlvdSBtdXN0IHVzZSB2aXJ0dWFsLWhvc3RlZC1zdHlsZSByZXF1ZXN0cyBpbiB0aGUgZm9ybWF0IDxjb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8aT5CdWNrZXRfbmFtZTwvaT4uczNleHByZXNzLTxpPmF6X2lkPC9pPi48aT5yZWdpb248L2k+LmFtYXpvbmF3cy5jb208L2NvZGU+LiBQYXRoLXN0eWxlIHJlcXVlc3RzIGFyZSBub3Qgc3VwcG9ydGVkLiAgRGlyZWN0b3J5IGJ1Y2tldCBuYW1lcyBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgY2hvc2VuIEF2YWlsYWJpbGl0eSBab25lLiBCdWNrZXQgbmFtZXMgbXVzdCBmb2xsb3cgdGhlIGZvcm1hdCA8Y29kZT5cbiAgICogICAgICAgICAgICAgICAgPGk+YnVja2V0X2Jhc2VfbmFtZTwvaT4tLTxpPmF6LWlkPC9pPi0teC1zMzwvY29kZT4gKGZvciBleGFtcGxlLCA8Y29kZT5cbiAgICogICAgICAgICAgICAgICAgPGk+RE9DLUVYQU1QTEUtQlVDS0VUPC9pPi0tPGk+dXN3Mi1hejE8L2k+LS14LXMzPC9jb2RlPikuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBidWNrZXQgbmFtaW5nXG4gICAqICAgICAgICAgIHJlc3RyaWN0aW9ucywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9kaXJlY3RvcnktYnVja2V0LW5hbWluZy1ydWxlcy5odG1sXCI+RGlyZWN0b3J5IGJ1Y2tldCBuYW1pbmdcbiAgICogICAgICAgICAgICAgcnVsZXM8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGI+QWNjZXNzIHBvaW50czwvYj4gLSBXaGVuIHlvdSB1c2UgdGhpcyBhY3Rpb24gd2l0aCBhbiBhY2Nlc3MgcG9pbnQsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGFsaWFzIG9mIHRoZSBhY2Nlc3MgcG9pbnQgaW4gcGxhY2Ugb2YgdGhlIGJ1Y2tldCBuYW1lIG9yIHNwZWNpZnkgdGhlIGFjY2VzcyBwb2ludCBBUk4uIFdoZW4gdXNpbmcgdGhlIGFjY2VzcyBwb2ludCBBUk4sIHlvdSBtdXN0IGRpcmVjdCByZXF1ZXN0cyB0byB0aGUgYWNjZXNzIHBvaW50IGhvc3RuYW1lLiBUaGUgYWNjZXNzIHBvaW50IGhvc3RuYW1lIHRha2VzIHRoZSBmb3JtIDxpPkFjY2Vzc1BvaW50TmFtZTwvaT4tPGk+QWNjb3VudElkPC9pPi5zMy1hY2Nlc3Nwb2ludC48aT5SZWdpb248L2k+LmFtYXpvbmF3cy5jb20uIFdoZW4gdXNpbmcgdGhpcyBhY3Rpb24gd2l0aCBhbiBhY2Nlc3MgcG9pbnQgdGhyb3VnaCB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBTREtzLCB5b3UgcHJvdmlkZSB0aGUgYWNjZXNzIHBvaW50IEFSTiBpbiBwbGFjZSBvZiB0aGUgYnVja2V0IG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFjY2VzcyBwb2ludCBBUk5zLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3VzaW5nLWFjY2Vzcy1wb2ludHMuaHRtbFwiPlVzaW5nIGFjY2VzcyBwb2ludHM8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+QWNjZXNzIHBvaW50cyBhbmQgT2JqZWN0IExhbWJkYSBhY2Nlc3MgcG9pbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGI+UzMgb24gT3V0cG9zdHM8L2I+IC0gV2hlbiB5b3UgdXNlIHRoaXMgYWN0aW9uIHdpdGggQW1hem9uIFMzIG9uIE91dHBvc3RzLCB5b3UgbXVzdCBkaXJlY3QgcmVxdWVzdHMgdG8gdGhlIFMzIG9uIE91dHBvc3RzIGhvc3RuYW1lLiBUaGUgUzMgb24gT3V0cG9zdHMgaG9zdG5hbWUgdGFrZXMgdGhlIGZvcm0gPGNvZGU+XG4gICAqICAgICAgICAgICAgICAgIDxpPkFjY2Vzc1BvaW50TmFtZTwvaT4tPGk+QWNjb3VudElkPC9pPi48aT5vdXRwb3N0SUQ8L2k+LnMzLW91dHBvc3RzLjxpPlJlZ2lvbjwvaT4uYW1hem9uYXdzLmNvbTwvY29kZT4uIFdoZW4geW91IHVzZSB0aGlzIGFjdGlvbiB3aXRoIFMzIG9uIE91dHBvc3RzIHRocm91Z2ggdGhlIEFtYXpvbiBXZWIgU2VydmljZXMgU0RLcywgeW91IHByb3ZpZGUgdGhlIE91dHBvc3RzIGFjY2VzcyBwb2ludCBBUk4gaW4gcGxhY2Ugb2YgdGhlIGJ1Y2tldCBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBTMyBvbiBPdXRwb3N0cyBBUk5zLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL1Mzb25PdXRwb3N0cy5odG1sXCI+V2hhdCBpcyBTMyBvbiBPdXRwb3N0cz88L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiA8cD5Ob3RlOiBUbyBzdXBwbHkgdGhlIE11bHRpLXJlZ2lvbiBBY2Nlc3MgUG9pbnQgKE1SQVApIHRvIEJ1Y2tldCwgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgXCJAYXdzLXNkay9zaWduYXR1cmUtdjQtY3J0XCIgcGFja2FnZSB0byB5b3VyIHByb2plY3QgZGVwZW5kZW5jaWVzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGdvIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy12MyNrbm93bi1pc3N1ZXM8L3A+XG4gICAqL1xuICBCdWNrZXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIDxwPkEgZGVsaW1pdGVyIGlzIGEgY2hhcmFjdGVyIHRoYXQgeW91IHVzZSB0byBncm91cCBrZXlzLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gRm9yIGRpcmVjdG9yeSBidWNrZXRzLCA8Y29kZT4vPC9jb2RlPiBpcyB0aGUgb25seSBzdXBwb3J0ZWQgZGVsaW1pdGVyLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHMgPC9iPiAtIFdoZW4geW91IHF1ZXJ5IDxjb2RlPkxpc3RPYmplY3RzVjI8L2NvZGU+IHdpdGggYSBkZWxpbWl0ZXIgZHVyaW5nIGluLXByb2dyZXNzIG11bHRpcGFydCB1cGxvYWRzLCB0aGVcbiAgICogICAgICAgICAgICAgPGNvZGU+Q29tbW9uUHJlZml4ZXM8L2NvZGU+IHJlc3BvbnNlIHBhcmFtZXRlciBjb250YWlucyB0aGUgcHJlZml4ZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbi1wcm9ncmVzcyBtdWx0aXBhcnQgdXBsb2Fkcy5cbiAgICogICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbXVsdGlwYXJ0IHVwbG9hZHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbFwiPk11bHRpcGFydCBVcGxvYWQgT3ZlcnZpZXc8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBEZWxpbWl0ZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5FbmNvZGluZyB0eXBlIHVzZWQgYnkgQW1hem9uIFMzIHRvIGVuY29kZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1rZXlzLmh0bWxcIj5vYmplY3Qga2V5czwvYT4gaW4gdGhlIHJlc3BvbnNlLlxuICAgKiAgICAgICAgICBSZXNwb25zZXMgYXJlIGVuY29kZWQgb25seSBpbiBVVEYtOC4gQW4gb2JqZWN0IGtleSBjYW4gY29udGFpbiBhbnkgVW5pY29kZSBjaGFyYWN0ZXIuXG4gICAqICAgICAgICAgIEhvd2V2ZXIsIHRoZSBYTUwgMS4wIHBhcnNlciBjYW4ndCBwYXJzZSBjZXJ0YWluIGNoYXJhY3RlcnMsIHN1Y2ggYXMgY2hhcmFjdGVycyB3aXRoIGFuXG4gICAqICAgICAgICAgIEFTQ0lJIHZhbHVlIGZyb20gMCB0byAxMC4gRm9yIGNoYXJhY3RlcnMgdGhhdCBhcmVuJ3Qgc3VwcG9ydGVkIGluIFhNTCAxLjAsIHlvdSBjYW4gYWRkIHRoaXNcbiAgICogICAgICAgICAgcGFyYW1ldGVyIHRvIHJlcXVlc3QgdGhhdCBBbWF6b24gUzMgZW5jb2RlIHRoZSBrZXlzIGluIHRoZSByZXNwb25zZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcbiAgICogICAgICAgICAgY2hhcmFjdGVycyB0byBhdm9pZCBpbiBvYmplY3Qga2V5IG5hbWVzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1rZXlzLmh0bWwjb2JqZWN0LWtleS1ndWlkZWxpbmVzXCI+T2JqZWN0IGtleSBuYW1pbmdcbiAgICogICAgICAgICAgICAgZ3VpZGVsaW5lczwvYT4uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+V2hlbiB1c2luZyB0aGUgVVJMIGVuY29kaW5nIHR5cGUsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVzZWQgaW4gYW4gb2JqZWN0J3NcbiAgICogICAgICAgICAgICAga2V5IG5hbWUgd2lsbCBiZSBwZXJjZW50LWVuY29kZWQgYWNjb3JkaW5nIHRvIFVURi04IGNvZGUgdmFsdWVzLiBGb3IgZXhhbXBsZSwgdGhlIG9iamVjdFxuICAgKiAgICAgICAgICAgICA8Y29kZT50ZXN0X2ZpbGUoMykucG5nPC9jb2RlPiB3aWxsIGFwcGVhciBhc1xuICAgKiAgICAgICAgICAgICA8Y29kZT50ZXN0X2ZpbGUlMjgzJTI5LnBuZzwvY29kZT4uPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBFbmNvZGluZ1R5cGU/OiBFbmNvZGluZ1R5cGU7XG4gIC8qKlxuICAgKiA8cD5TZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBrZXlzIHJldHVybmVkIGluIHRoZSByZXNwb25zZS4gQnkgZGVmYXVsdCwgdGhlIGFjdGlvbiByZXR1cm5zXG4gICAqICAgICAgICAgIHVwIHRvIDEsMDAwIGtleSBuYW1lcy4gVGhlIHJlc3BvbnNlIG1pZ2h0IGNvbnRhaW4gZmV3ZXIga2V5cyBidXQgd2lsbCBuZXZlciBjb250YWluXG4gICAqICAgICAgICAgIG1vcmUuPC9wPlxuICAgKi9cbiAgTWF4S2V5cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIDxwPkxpbWl0cyB0aGUgcmVzcG9uc2UgdG8ga2V5cyB0aGF0IGJlZ2luIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzPC9iPiAtIEZvciBkaXJlY3RvcnkgYnVja2V0cywgb25seSBwcmVmaXhlcyB0aGF0IGVuZCBpbiBhIGRlbGltaXRlciAoPGNvZGU+LzwvY29kZT4pIGFyZSBzdXBwb3J0ZWQuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+Q29udGludWF0aW9uVG9rZW48L2NvZGU+IGluZGljYXRlcyB0byBBbWF6b24gUzMgdGhhdCB0aGUgbGlzdCBpcyBiZWluZyBjb250aW51ZWQgb25cbiAgICogICAgICAgICAgdGhpcyBidWNrZXQgd2l0aCBhIHRva2VuLiA8Y29kZT5Db250aW51YXRpb25Ub2tlbjwvY29kZT4gaXMgb2JmdXNjYXRlZCBhbmQgaXMgbm90IGEgcmVhbFxuICAgKiAgICAgICAgICBrZXkuIFlvdSBjYW4gdXNlIHRoaXMgPGNvZGU+Q29udGludWF0aW9uVG9rZW48L2NvZGU+IGZvciBwYWdpbmF0aW9uIG9mIHRoZSBsaXN0IHJlc3VsdHMuICA8L3A+XG4gICAqL1xuICBDb250aW51YXRpb25Ub2tlbj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBvd25lciBmaWVsZCBpcyBub3QgcHJlc2VudCBpbiA8Y29kZT5MaXN0T2JqZWN0c1YyPC9jb2RlPiBieSBkZWZhdWx0LiBJZiB5b3Ugd2FudCB0b1xuICAgKiAgICAgICAgICByZXR1cm4gdGhlIG93bmVyIGZpZWxkIHdpdGggZWFjaCBrZXkgaW4gdGhlIHJlc3VsdCwgdGhlbiBzZXQgdGhlIDxjb2RlPkZldGNoT3duZXI8L2NvZGU+XG4gICAqICAgICAgICAgIGZpZWxkIHRvIDxjb2RlPnRydWU8L2NvZGU+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICAgICA8Yj5EaXJlY3RvcnkgYnVja2V0czwvYj4gLSBGb3IgZGlyZWN0b3J5IGJ1Y2tldHMsIHRoZSBidWNrZXQgb3duZXIgaXMgcmV0dXJuZWQgYXMgdGhlIG9iamVjdCBvd25lciBmb3IgYWxsIG9iamVjdHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBGZXRjaE93bmVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIDxwPlN0YXJ0QWZ0ZXIgaXMgd2hlcmUgeW91IHdhbnQgQW1hem9uIFMzIHRvIHN0YXJ0IGxpc3RpbmcgZnJvbS4gQW1hem9uIFMzIHN0YXJ0cyBsaXN0aW5nIGFmdGVyIHRoaXNcbiAgICogICAgICAgICAgc3BlY2lmaWVkIGtleS4gU3RhcnRBZnRlciBjYW4gYmUgYW55IGtleSBpbiB0aGUgYnVja2V0LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFN0YXJ0QWZ0ZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5Db25maXJtcyB0aGF0IHRoZSByZXF1ZXN0ZXIga25vd3MgdGhhdCBzaGUgb3IgaGUgd2lsbCBiZSBjaGFyZ2VkIGZvciB0aGUgbGlzdCBvYmplY3RzXG4gICAqICAgICAgICAgIHJlcXVlc3QgaW4gVjIgc3R5bGUuIEJ1Y2tldCBvd25lcnMgbmVlZCBub3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciBpbiB0aGVpclxuICAgKiAgICAgICAgICByZXF1ZXN0cy48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBSZXF1ZXN0UGF5ZXI/OiBSZXF1ZXN0UGF5ZXI7XG4gIC8qKlxuICAgKiA8cD5UaGUgYWNjb3VudCBJRCBvZiB0aGUgZXhwZWN0ZWQgYnVja2V0IG93bmVyLiBJZiB0aGUgYWNjb3VudCBJRCB0aGF0IHlvdSBwcm92aWRlIGRvZXMgbm90IG1hdGNoIHRoZSBhY3R1YWwgb3duZXIgb2YgdGhlIGJ1Y2tldCwgdGhlIHJlcXVlc3QgZmFpbHMgd2l0aCB0aGUgSFRUUCBzdGF0dXMgY29kZSA8Y29kZT40MDMgRm9yYmlkZGVuPC9jb2RlPiAoYWNjZXNzIGRlbmllZCkuPC9wPlxuICAgKi9cbiAgRXhwZWN0ZWRCdWNrZXRPd25lcj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB0aGUgb3B0aW9uYWwgZmllbGRzIHRoYXQgeW91IHdhbnQgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlLiBGaWVsZHMgdGhhdCB5b3UgZG9cbiAgICogICAgICAgICAgbm90IHNwZWNpZnkgYXJlIG5vdCByZXR1cm5lZC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBPcHRpb25hbE9iamVjdEF0dHJpYnV0ZXM/OiBPcHRpb25hbE9iamVjdEF0dHJpYnV0ZXNbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlcXVlc3RDaGFyZ2VkID0ge1xuICByZXF1ZXN0ZXI6ICdyZXF1ZXN0ZXInLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVxdWVzdENoYXJnZWQgPSAodHlwZW9mIFJlcXVlc3RDaGFyZ2VkKVtrZXlvZiB0eXBlb2YgUmVxdWVzdENoYXJnZWRdO1xuXG5leHBvcnQgY29uc3QgQ2hlY2tzdW1BbGdvcml0aG1JbiA9IHtcbiAgQ1JDMzI6ICdDUkMzMicsXG4gIENSQzMyQzogJ0NSQzMyQycsXG4gIFNIQTE6ICdTSEExJyxcbiAgU0hBMjU2OiAnU0hBMjU2Jyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIENoZWNrc3VtQWxnb3JpdGhtSW4gPSAodHlwZW9mIENoZWNrc3VtQWxnb3JpdGhtSW4pW2tleW9mIHR5cGVvZiBDaGVja3N1bUFsZ29yaXRobUluXTtcblxuZXhwb3J0IHR5cGUgQ2hlY2tzdW1BbGdvcml0aG1PdXQgPSBzdHJpbmc7XG5cbmV4cG9ydCBjb25zdCBPYmplY3RTdG9yYWdlQ2xhc3MgPSB7XG4gIERFRVBfQVJDSElWRTogJ0RFRVBfQVJDSElWRScsXG4gIEVYUFJFU1NfT05FWk9ORTogJ0VYUFJFU1NfT05FWk9ORScsXG4gIEdMQUNJRVI6ICdHTEFDSUVSJyxcbiAgR0xBQ0lFUl9JUjogJ0dMQUNJRVJfSVInLFxuICBJTlRFTExJR0VOVF9USUVSSU5HOiAnSU5URUxMSUdFTlRfVElFUklORycsXG4gIE9ORVpPTkVfSUE6ICdPTkVaT05FX0lBJyxcbiAgT1VUUE9TVFM6ICdPVVRQT1NUUycsXG4gIFJFRFVDRURfUkVEVU5EQU5DWTogJ1JFRFVDRURfUkVEVU5EQU5DWScsXG4gIFNOT1c6ICdTTk9XJyxcbiAgU1RBTkRBUkQ6ICdTVEFOREFSRCcsXG4gIFNUQU5EQVJEX0lBOiAnU1RBTkRBUkRfSUEnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgT2JqZWN0U3RvcmFnZUNsYXNzID0gKHR5cGVvZiBPYmplY3RTdG9yYWdlQ2xhc3MpW2tleW9mIHR5cGVvZiBPYmplY3RTdG9yYWdlQ2xhc3NdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE93bmVyIHtcbiAgLyoqXG4gICAqIDxwPkNvbnRhaW5lciBmb3IgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgb3duZXIuIFRoaXMgdmFsdWUgaXMgb25seSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAqICAgICAgICAgIGZvbGxvd2luZyBBbWF6b24gV2ViIFNlcnZpY2VzIFJlZ2lvbnM6PC9wPlxuICAgKiAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+VVMgRWFzdCAoTi4gVmlyZ2luaWEpPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPlVTIFdlc3QgKE4uIENhbGlmb3JuaWEpPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPlVTIFdlc3QgKE9yZWdvbik8L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+QXNpYSBQYWNpZmljIChTaW5nYXBvcmUpPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPkFzaWEgUGFjaWZpYyAoU3lkbmV5KTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5Bc2lhIFBhY2lmaWMgKFRva3lvKTwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5FdXJvcGUgKElyZWxhbmQpPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPlNvdXRoIEFtZXJpY2EgKFPDo28gUGF1bG8pPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgRGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIDxwPkNvbnRhaW5lciBmb3IgdGhlIElEIG9mIHRoZSBvd25lci48L3A+XG4gICAqL1xuICBJRD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0b3JlU3RhdHVzIHtcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB3aGV0aGVyIHRoZSBvYmplY3QgaXMgY3VycmVudGx5IGJlaW5nIHJlc3RvcmVkLiBJZiB0aGUgb2JqZWN0IHJlc3RvcmF0aW9uIGlzXG4gICAqICAgICAgICAgIGluIHByb2dyZXNzLCB0aGUgaGVhZGVyIHJldHVybnMgdGhlIHZhbHVlIDxjb2RlPlRSVUU8L2NvZGU+LiBGb3IgZXhhbXBsZTo8L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT54LWFtei1vcHRpb25hbC1vYmplY3QtYXR0cmlidXRlczogSXNSZXN0b3JlSW5Qcm9ncmVzcz1cInRydWVcIjwvY29kZT5cbiAgICogICAgICAgICAgPC9wPlxuICAgKiAgICAgICAgICA8cD5JZiB0aGUgb2JqZWN0IHJlc3RvcmF0aW9uIGhhcyBjb21wbGV0ZWQsIHRoZSBoZWFkZXIgcmV0dXJucyB0aGUgdmFsdWVcbiAgICogICAgICAgICAgPGNvZGU+RkFMU0U8L2NvZGU+LiBGb3IgZXhhbXBsZTo8L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT54LWFtei1vcHRpb25hbC1vYmplY3QtYXR0cmlidXRlczogSXNSZXN0b3JlSW5Qcm9ncmVzcz1cImZhbHNlXCIsXG4gICAqICAgICAgICAgICAgIFJlc3RvcmVFeHBpcnlEYXRlPVwiMjAxMi0xMi0yMVQwMDowMDowMC4wMDBaXCI8L2NvZGU+XG4gICAqICAgICAgICAgIDwvcD5cbiAgICogICAgICAgICAgPHA+SWYgdGhlIG9iamVjdCBoYXNuJ3QgYmVlbiByZXN0b3JlZCwgdGhlcmUgaXMgbm8gaGVhZGVyIHJlc3BvbnNlLjwvcD5cbiAgICovXG4gIElzUmVzdG9yZUluUHJvZ3Jlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiA8cD5JbmRpY2F0ZXMgd2hlbiB0aGUgcmVzdG9yZWQgY29weSB3aWxsIGV4cGlyZS4gVGhpcyB2YWx1ZSBpcyBwb3B1bGF0ZWQgb25seSBpZiB0aGUgb2JqZWN0XG4gICAqICAgICAgICAgIGhhcyBhbHJlYWR5IGJlZW4gcmVzdG9yZWQuIEZvciBleGFtcGxlOjwvcD5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxjb2RlPngtYW16LW9wdGlvbmFsLW9iamVjdC1hdHRyaWJ1dGVzOiBJc1Jlc3RvcmVJblByb2dyZXNzPVwiZmFsc2VcIixcbiAgICogICAgICAgICAgICAgUmVzdG9yZUV4cGlyeURhdGU9XCIyMDEyLTEyLTIxVDAwOjAwOjAwLjAwMFpcIjwvY29kZT5cbiAgICogICAgICAgICAgPC9wPlxuICAgKi9cbiAgUmVzdG9yZUV4cGlyeURhdGU/OiBEYXRlO1xufVxuXG4vKipcbiAqIFJldHVybiBvbmUgb2YgMiB0eXBlcywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgYXJlIHBhc3NpbmcgdmFsdWVzIGluIG9yIG91dFxuICpcbiAqIFVzZSBhcyBmb2xsb3dzOlxuICpcbiAqIGBgYHRzXG4gKiBpbnRlcmZhY2UgQ29udGFpbmluZ1R5cGU8RGlyPiB7XG4gKiAgICBmaWVsZDogSW5PdXQ8RGlyLCBGaWVsZFR5cGVJbiwgRmllbGRUeXBlT3V0PjtcbiAqIH1cbiAqIGBgYFxuICovXG50eXBlIEluT3V0PERpciwgSSwgTz4gPSBEaXIgZXh0ZW5kcyAnaW4nID8gSSA6IERpciBleHRlbmRzICdvdXQnID8gTyA6IG5ldmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIF9PYmplY3Q8RGlyPiB7XG4gIC8qKlxuICAgKiA8cD5UaGUgbmFtZSB0aGF0IHlvdSBhc3NpZ24gdG8gYW4gb2JqZWN0LiBZb3UgdXNlIHRoZSBvYmplY3Qga2V5IHRvIHJldHJpZXZlIHRoZVxuICAgKiAgICAgICAgICBvYmplY3QuPC9wPlxuICAgKi9cbiAgS2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiA8cD5DcmVhdGlvbiBkYXRlIG9mIHRoZSBvYmplY3QuPC9wPlxuICAgKi9cbiAgTGFzdE1vZGlmaWVkPzogRGF0ZTtcblxuICAvKipcbiAgICogPHA+VGhlIGVudGl0eSB0YWcgaXMgYSBoYXNoIG9mIHRoZSBvYmplY3QuIFRoZSBFVGFnIHJlZmxlY3RzIGNoYW5nZXMgb25seSB0byB0aGUgY29udGVudHNcbiAgICogICAgICAgICAgb2YgYW4gb2JqZWN0LCBub3QgaXRzIG1ldGFkYXRhLiBUaGUgRVRhZyBtYXkgb3IgbWF5IG5vdCBiZSBhbiBNRDUgZGlnZXN0IG9mIHRoZSBvYmplY3RcbiAgICogICAgICAgICAgZGF0YS4gV2hldGhlciBvciBub3QgaXQgaXMgZGVwZW5kcyBvbiBob3cgdGhlIG9iamVjdCB3YXMgY3JlYXRlZCBhbmQgaG93IGl0IGlzIGVuY3J5cHRlZCBhc1xuICAgKiAgICAgICAgICBkZXNjcmliZWQgYmVsb3c6PC9wPlxuICAgKiAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+T2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBQVVQgT2JqZWN0LCBQT1NUIE9iamVjdCwgb3IgQ29weSBvcGVyYXRpb24sIG9yIHRocm91Z2ggdGhlXG4gICAqICAgICAgICAgICAgICAgIEFtYXpvbiBXZWIgU2VydmljZXMgTWFuYWdlbWVudCBDb25zb2xlLCBhbmQgYXJlIGVuY3J5cHRlZCBieSBTU0UtUzMgb3IgcGxhaW50ZXh0LCBoYXZlIEVUYWdzIHRoYXRcbiAgICogICAgICAgICAgICAgICAgYXJlIGFuIE1ENSBkaWdlc3Qgb2YgdGhlaXIgb2JqZWN0IGRhdGEuPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPk9iamVjdHMgY3JlYXRlZCBieSB0aGUgUFVUIE9iamVjdCwgUE9TVCBPYmplY3QsIG9yIENvcHkgb3BlcmF0aW9uLCBvciB0aHJvdWdoIHRoZVxuICAgKiAgICAgICAgICAgICAgICBBbWF6b24gV2ViIFNlcnZpY2VzIE1hbmFnZW1lbnQgQ29uc29sZSwgYW5kIGFyZSBlbmNyeXB0ZWQgYnkgU1NFLUMgb3IgU1NFLUtNUywgaGF2ZSBFVGFncyB0aGF0IGFyZVxuICAgKiAgICAgICAgICAgICAgICBub3QgYW4gTUQ1IGRpZ2VzdCBvZiB0aGVpciBvYmplY3QgZGF0YS48L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgPHA+SWYgYW4gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgZWl0aGVyIHRoZSBNdWx0aXBhcnQgVXBsb2FkIG9yIFBhcnQgQ29weSBvcGVyYXRpb24sIHRoZVxuICAgKiAgICAgICAgICAgICAgICBFVGFnIGlzIG5vdCBhbiBNRDUgZGlnZXN0LCByZWdhcmRsZXNzIG9mIHRoZSBtZXRob2Qgb2YgZW5jcnlwdGlvbi4gSWYgYW4gb2JqZWN0IGlzXG4gICAqICAgICAgICAgICAgICAgIGxhcmdlciB0aGFuIDE2IE1CLCB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBNYW5hZ2VtZW50IENvbnNvbGUgd2lsbCB1cGxvYWQgb3IgY29weSB0aGF0IG9iamVjdCBhcyBhXG4gICAqICAgICAgICAgICAgICAgIE11bHRpcGFydCBVcGxvYWQsIGFuZCB0aGVyZWZvcmUgdGhlIEVUYWcgd2lsbCBub3QgYmUgYW4gTUQ1IGRpZ2VzdC48L3A+XG4gICAqICAgICAgICAgICAgIDwvbGk+XG4gICAqICAgICAgICAgIDwvdWw+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gTUQ1IGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBFVGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgYWxnb3JpdGhtIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIGEgY2hlY2tzdW0gb2YgdGhlIG9iamVjdC48L3A+XG4gICAqL1xuICBDaGVja3N1bUFsZ29yaXRobT86IEluT3V0PERpciwgQ2hlY2tzdW1BbGdvcml0aG1JbiwgQ2hlY2tzdW1BbGdvcml0aG1PdXQ+W107XG5cbiAgLyoqXG4gICAqIDxwPlNpemUgaW4gYnl0ZXMgb2YgdGhlIG9iamVjdDwvcD5cbiAgICovXG4gIFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIDxwPlRoZSBjbGFzcyBvZiBzdG9yYWdlIHVzZWQgdG8gc3RvcmUgdGhlIG9iamVjdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gT25seSB0aGUgUzMgRXhwcmVzcyBPbmUgWm9uZSBzdG9yYWdlIGNsYXNzIGlzIHN1cHBvcnRlZCBieSBkaXJlY3RvcnkgYnVja2V0cyB0byBzdG9yZSBvYmplY3RzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU3RvcmFnZUNsYXNzPzogT2JqZWN0U3RvcmFnZUNsYXNzO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgb3duZXIgb2YgdGhlIG9iamVjdDwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICAgICA8Yj5EaXJlY3RvcnkgYnVja2V0czwvYj4gLSBUaGUgYnVja2V0IG93bmVyIGlzIHJldHVybmVkIGFzIHRoZSBvYmplY3Qgb3duZXIuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBPd25lcj86IE93bmVyO1xuXG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgdGhlIHJlc3RvcmF0aW9uIHN0YXR1cyBvZiBhbiBvYmplY3QuIE9iamVjdHMgaW4gY2VydGFpbiBzdG9yYWdlIGNsYXNzZXMgbXVzdFxuICAgKiAgICAgICAgICBiZSByZXN0b3JlZCBiZWZvcmUgdGhleSBjYW4gYmUgcmV0cmlldmVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBzdG9yYWdlIGNsYXNzZXNcbiAgICogICAgICAgICAgYW5kIGhvdyB0byB3b3JrIHdpdGggYXJjaGl2ZWQgb2JqZWN0cywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9hcmNoaXZlZC1vYmplY3RzLmh0bWxcIj4gV29ya2luZyB3aXRoIGFyY2hpdmVkXG4gICAqICAgICAgICAgICAgIG9iamVjdHM8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLiBPbmx5IHRoZSBTMyBFeHByZXNzIE9uZSBab25lIHN0b3JhZ2UgY2xhc3MgaXMgc3VwcG9ydGVkIGJ5IGRpcmVjdG9yeSBidWNrZXRzIHRvIHN0b3JlIG9iamVjdHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBSZXN0b3JlU3RhdHVzPzogUmVzdG9yZVN0YXR1cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25QcmVmaXgge1xuICAvKipcbiAgICogPHA+Q29udGFpbmVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbW1vbiBwcmVmaXguPC9wPlxuICAgKi9cbiAgUHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RPYmplY3RzVjJPdXRwdXQge1xuICAvKipcbiAgICogPHA+U2V0IHRvIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBhbGwgb2YgdGhlIHJlc3VsdHMgd2VyZSByZXR1cm5lZC4gU2V0IHRvIDxjb2RlPnRydWU8L2NvZGU+XG4gICAqICAgICAgICAgIGlmIG1vcmUga2V5cyBhcmUgYXZhaWxhYmxlIHRvIHJldHVybi4gSWYgdGhlIG51bWJlciBvZiByZXN1bHRzIGV4Y2VlZHMgdGhhdCBzcGVjaWZpZWQgYnlcbiAgICogICAgICAgICAgICAgPGNvZGU+TWF4S2V5czwvY29kZT4sIGFsbCBvZiB0aGUgcmVzdWx0cyBtaWdodCBub3QgYmUgcmV0dXJuZWQuPC9wPlxuICAgKi9cbiAgSXNUcnVuY2F0ZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogPHA+TWV0YWRhdGEgYWJvdXQgZWFjaCBvYmplY3QgcmV0dXJuZWQuPC9wPlxuICAgKi9cbiAgQ29udGVudHM/OiBfT2JqZWN0PCdvdXQnPltdO1xuICAvKipcbiAgICogPHA+VGhlIGJ1Y2tldCBuYW1lLjwvcD5cbiAgICovXG4gIE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5LZXlzIHRoYXQgYmVnaW4gd2l0aCB0aGUgaW5kaWNhdGVkIHByZWZpeC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gRm9yIGRpcmVjdG9yeSBidWNrZXRzLCBvbmx5IHByZWZpeGVzIHRoYXQgZW5kIGluIGEgZGVsaW1pdGVyICg8Y29kZT4vPC9jb2RlPikgYXJlIHN1cHBvcnRlZC48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkNhdXNlcyBrZXlzIHRoYXQgY29udGFpbiB0aGUgc2FtZSBzdHJpbmcgYmV0d2VlbiB0aGUgPGNvZGU+cHJlZml4PC9jb2RlPiBhbmQgdGhlIGZpcnN0XG4gICAqICAgICAgICAgIG9jY3VycmVuY2Ugb2YgdGhlIGRlbGltaXRlciB0byBiZSByb2xsZWQgdXAgaW50byBhIHNpbmdsZSByZXN1bHQgZWxlbWVudCBpbiB0aGVcbiAgICogICAgICAgICAgICAgPGNvZGU+Q29tbW9uUHJlZml4ZXM8L2NvZGU+IGNvbGxlY3Rpb24uIFRoZXNlIHJvbGxlZC11cCBrZXlzIGFyZSBub3QgcmV0dXJuZWQgZWxzZXdoZXJlXG4gICAqICAgICAgICAgIGluIHRoZSByZXNwb25zZS4gRWFjaCByb2xsZWQtdXAgcmVzdWx0IGNvdW50cyBhcyBvbmx5IG9uZSByZXR1cm4gYWdhaW5zdCB0aGVcbiAgICogICAgICAgICAgICAgPGNvZGU+TWF4S2V5czwvY29kZT4gdmFsdWUuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzPC9iPiAtIEZvciBkaXJlY3RvcnkgYnVja2V0cywgPGNvZGU+LzwvY29kZT4gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGRlbGltaXRlci48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIERlbGltaXRlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGtleXMgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlLiBCeSBkZWZhdWx0LCB0aGUgYWN0aW9uIHJldHVybnNcbiAgICogICAgICAgICAgdXAgdG8gMSwwMDAga2V5IG5hbWVzLiBUaGUgcmVzcG9uc2UgbWlnaHQgY29udGFpbiBmZXdlciBrZXlzIGJ1dCB3aWxsIG5ldmVyIGNvbnRhaW5cbiAgICogICAgICAgICAgbW9yZS48L3A+XG4gICAqL1xuICBNYXhLZXlzPzogbnVtYmVyO1xuICAvKipcbiAgICogPHA+QWxsIG9mIHRoZSBrZXlzICh1cCB0byAxLDAwMCkgdGhhdCBzaGFyZSB0aGUgc2FtZSBwcmVmaXggYXJlIGdyb3VwZWQgdG9nZXRoZXIuIFdoZW4gY291bnRpbmcgdGhlIHRvdGFsIG51bWJlcnMgb2YgcmV0dXJucyBieSB0aGlzIEFQSSBvcGVyYXRpb24sXG4gICAqICAgICAgICAgIHRoaXMgZ3JvdXAgb2Yga2V5cyBpcyBjb25zaWRlcmVkIGFzIG9uZSBpdGVtLjwvcD5cbiAgICogICAgICAgICAgPHA+QSByZXNwb25zZSBjYW4gY29udGFpbiA8Y29kZT5Db21tb25QcmVmaXhlczwvY29kZT4gb25seSBpZiB5b3Ugc3BlY2lmeSBhXG4gICAqICAgICAgICAgIGRlbGltaXRlci48L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT5Db21tb25QcmVmaXhlczwvY29kZT4gY29udGFpbnMgYWxsIChpZiB0aGVyZSBhcmUgYW55KSBrZXlzIGJldHdlZW5cbiAgICogICAgICAgICAgICAgPGNvZGU+UHJlZml4PC9jb2RlPiBhbmQgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIHNwZWNpZmllZCBieSBhXG4gICAqICAgICAgICAgIGRlbGltaXRlci48L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT5Db21tb25QcmVmaXhlczwvY29kZT4gbGlzdHMga2V5cyB0aGF0IGFjdCBsaWtlIHN1YmRpcmVjdG9yaWVzIGluIHRoZSBkaXJlY3RvcnlcbiAgICogICAgICAgICAgc3BlY2lmaWVkIGJ5IDxjb2RlPlByZWZpeDwvY29kZT4uPC9wPlxuICAgKiAgICAgICAgICA8cD5Gb3IgZXhhbXBsZSwgaWYgdGhlIHByZWZpeCBpcyA8Y29kZT5ub3Rlcy88L2NvZGU+IGFuZCB0aGUgZGVsaW1pdGVyIGlzIGEgc2xhc2hcbiAgICogICAgICAgICAgICAgKDxjb2RlPi88L2NvZGU+KSBhcyBpbiA8Y29kZT5ub3Rlcy9zdW1tZXIvanVseTwvY29kZT4sIHRoZSBjb21tb24gcHJlZml4IGlzXG4gICAqICAgICAgICAgICAgIDxjb2RlPm5vdGVzL3N1bW1lci88L2NvZGU+LiBBbGwgb2YgdGhlIGtleXMgdGhhdCByb2xsIHVwIGludG8gYSBjb21tb24gcHJlZml4IGNvdW50IGFzIGFcbiAgICogICAgICAgICAgc2luZ2xlIHJldHVybiB3aGVuIGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YgcmV0dXJucy4gPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHVsPlxuICAgKiAgICAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICAgICAgICAgICA8Yj5EaXJlY3RvcnkgYnVja2V0czwvYj4gLSBGb3IgZGlyZWN0b3J5IGJ1Y2tldHMsIG9ubHkgcHJlZml4ZXMgdGhhdCBlbmQgaW4gYSBkZWxpbWl0ZXIgKDxjb2RlPi88L2NvZGU+KSBhcmUgc3VwcG9ydGVkLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHMgPC9iPiAtIFdoZW4geW91IHF1ZXJ5IDxjb2RlPkxpc3RPYmplY3RzVjI8L2NvZGU+IHdpdGggYSBkZWxpbWl0ZXIgZHVyaW5nIGluLXByb2dyZXNzIG11bHRpcGFydCB1cGxvYWRzLCB0aGVcbiAgICogICAgICAgICAgICAgICAgPGNvZGU+Q29tbW9uUHJlZml4ZXM8L2NvZGU+IHJlc3BvbnNlIHBhcmFtZXRlciBjb250YWlucyB0aGUgcHJlZml4ZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbi1wcm9ncmVzcyBtdWx0aXBhcnQgdXBsb2Fkcy5cbiAgICogICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbXVsdGlwYXJ0IHVwbG9hZHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbFwiPk11bHRpcGFydCBVcGxvYWQgT3ZlcnZpZXc8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBDb21tb25QcmVmaXhlcz86IENvbW1vblByZWZpeFtdO1xuICAvKipcbiAgICogPHA+RW5jb2RpbmcgdHlwZSB1c2VkIGJ5IEFtYXpvbiBTMyB0byBlbmNvZGUgb2JqZWN0IGtleSBuYW1lcyBpbiB0aGUgWE1MIHJlc3BvbnNlLjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgeW91IHNwZWNpZnkgdGhlIDxjb2RlPmVuY29kaW5nLXR5cGU8L2NvZGU+IHJlcXVlc3QgcGFyYW1ldGVyLCBBbWF6b24gUzMgaW5jbHVkZXMgdGhpc1xuICAgKiAgICAgICAgICBlbGVtZW50IGluIHRoZSByZXNwb25zZSwgYW5kIHJldHVybnMgZW5jb2RlZCBrZXkgbmFtZSB2YWx1ZXMgaW4gdGhlIGZvbGxvd2luZyByZXNwb25zZVxuICAgKiAgICAgICAgICBlbGVtZW50czo8L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT5EZWxpbWl0ZXIsIFByZWZpeCwgS2V5LDwvY29kZT4gYW5kIDxjb2RlPlN0YXJ0QWZ0ZXI8L2NvZGU+LjwvcD5cbiAgICovXG4gIEVuY29kaW5nVHlwZT86IEVuY29kaW5nVHlwZTtcbiAgLyoqXG4gICAqIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT5LZXlDb3VudDwvY29kZT4gaXMgdGhlIG51bWJlciBvZiBrZXlzIHJldHVybmVkIHdpdGggdGhpcyByZXF1ZXN0LlxuICAgKiAgICAgICAgICAgICA8Y29kZT5LZXlDb3VudDwvY29kZT4gd2lsbCBhbHdheXMgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSA8Y29kZT5NYXhLZXlzPC9jb2RlPlxuICAgKiAgICAgICAgICBmaWVsZC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhc2sgZm9yIDUwIGtleXMsIHlvdXIgcmVzdWx0IHdpbGwgaW5jbHVkZSA1MCBrZXlzIG9yXG4gICAqICAgICAgICAgIGZld2VyLjwvcD5cbiAgICovXG4gIEtleUNvdW50PzogbnVtYmVyO1xuICAvKipcbiAgICogPHA+IElmIDxjb2RlPkNvbnRpbnVhdGlvblRva2VuPC9jb2RlPiB3YXMgc2VudCB3aXRoIHRoZSByZXF1ZXN0LCBpdCBpcyBpbmNsdWRlZCBpbiB0aGVcbiAgICogICAgICAgICAgcmVzcG9uc2UuIFlvdSBjYW4gdXNlIHRoZSByZXR1cm5lZCA8Y29kZT5Db250aW51YXRpb25Ub2tlbjwvY29kZT4gZm9yIHBhZ2luYXRpb24gb2YgdGhlIGxpc3QgcmVzcG9uc2UuIFlvdSBjYW4gdXNlIHRoaXMgPGNvZGU+Q29udGludWF0aW9uVG9rZW48L2NvZGU+IGZvciBwYWdpbmF0aW9uIG9mIHRoZSBsaXN0IHJlc3VsdHMuIDwvcD5cbiAgICovXG4gIENvbnRpbnVhdGlvblRva2VuPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+XG4gICAqICAgICAgICAgICAgIDxjb2RlPk5leHRDb250aW51YXRpb25Ub2tlbjwvY29kZT4gaXMgc2VudCB3aGVuIDxjb2RlPmlzVHJ1bmNhdGVkPC9jb2RlPiBpcyB0cnVlLCB3aGljaFxuICAgKiAgICAgICAgICBtZWFucyB0aGVyZSBhcmUgbW9yZSBrZXlzIGluIHRoZSBidWNrZXQgdGhhdCBjYW4gYmUgbGlzdGVkLiBUaGUgbmV4dCBsaXN0IHJlcXVlc3RzIHRvIEFtYXpvbiBTM1xuICAgKiAgICAgICAgICBjYW4gYmUgY29udGludWVkIHdpdGggdGhpcyA8Y29kZT5OZXh0Q29udGludWF0aW9uVG9rZW48L2NvZGU+LlxuICAgKiAgICAgICAgICAgICA8Y29kZT5OZXh0Q29udGludWF0aW9uVG9rZW48L2NvZGU+IGlzIG9iZnVzY2F0ZWQgYW5kIGlzIG5vdCBhIHJlYWwga2V5PC9wPlxuICAgKi9cbiAgTmV4dENvbnRpbnVhdGlvblRva2VuPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+SWYgU3RhcnRBZnRlciB3YXMgc2VudCB3aXRoIHRoZSByZXF1ZXN0LCBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgcmVzcG9uc2UuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU3RhcnRBZnRlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPklmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSByZXF1ZXN0ZXIgd2FzIHN1Y2Nlc3NmdWxseSBjaGFyZ2VkIGZvciB0aGVcbiAgICogICAgICAgICAgcmVxdWVzdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBSZXF1ZXN0Q2hhcmdlZD86IFJlcXVlc3RDaGFyZ2VkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RPYmplY3RzVjJDb21tYW5kT3V0cHV0IGV4dGVuZHMgTGlzdE9iamVjdHNWMk91dHB1dCwgTWV0YWRhdGFCZWFyZXIge1xufVxuXG5leHBvcnQgY29uc3QgT2JqZWN0Q2FubmVkQUNMID0ge1xuICBhdXRoZW50aWNhdGVkX3JlYWQ6ICdhdXRoZW50aWNhdGVkLXJlYWQnLFxuICBhd3NfZXhlY19yZWFkOiAnYXdzLWV4ZWMtcmVhZCcsXG4gIGJ1Y2tldF9vd25lcl9mdWxsX2NvbnRyb2w6ICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJyxcbiAgYnVja2V0X293bmVyX3JlYWQ6ICdidWNrZXQtb3duZXItcmVhZCcsXG4gIHByaXZhdGU6ICdwcml2YXRlJyxcbiAgcHVibGljX3JlYWQ6ICdwdWJsaWMtcmVhZCcsXG4gIHB1YmxpY19yZWFkX3dyaXRlOiAncHVibGljLXJlYWQtd3JpdGUnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgT2JqZWN0Q2FubmVkQUNMID0gKHR5cGVvZiBPYmplY3RDYW5uZWRBQ0wpW2tleW9mIHR5cGVvZiBPYmplY3RDYW5uZWRBQ0xdO1xuXG5leHBvcnQgY29uc3QgT2JqZWN0TG9ja01vZGUgPSB7XG4gIENPTVBMSUFOQ0U6ICdDT01QTElBTkNFJyxcbiAgR09WRVJOQU5DRTogJ0dPVkVSTkFOQ0UnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja01vZGUgPSAodHlwZW9mIE9iamVjdExvY2tNb2RlKVtrZXlvZiB0eXBlb2YgT2JqZWN0TG9ja01vZGVdO1xuXG5leHBvcnQgY29uc3QgT2JqZWN0TG9ja0xlZ2FsSG9sZFN0YXR1cyA9IHtcbiAgT0ZGOiAnT0ZGJyxcbiAgT046ICdPTicsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBPYmplY3RMb2NrTGVnYWxIb2xkU3RhdHVzID1cbiAgKHR5cGVvZiBPYmplY3RMb2NrTGVnYWxIb2xkU3RhdHVzKVtrZXlvZiB0eXBlb2YgT2JqZWN0TG9ja0xlZ2FsSG9sZFN0YXR1c107XG5cbmV4cG9ydCBjb25zdCBTdG9yYWdlQ2xhc3MgPSB7XG4gIERFRVBfQVJDSElWRTogJ0RFRVBfQVJDSElWRScsXG4gIEVYUFJFU1NfT05FWk9ORTogJ0VYUFJFU1NfT05FWk9ORScsXG4gIEdMQUNJRVI6ICdHTEFDSUVSJyxcbiAgR0xBQ0lFUl9JUjogJ0dMQUNJRVJfSVInLFxuICBJTlRFTExJR0VOVF9USUVSSU5HOiAnSU5URUxMSUdFTlRfVElFUklORycsXG4gIE9ORVpPTkVfSUE6ICdPTkVaT05FX0lBJyxcbiAgT1VUUE9TVFM6ICdPVVRQT1NUUycsXG4gIFJFRFVDRURfUkVEVU5EQU5DWTogJ1JFRFVDRURfUkVEVU5EQU5DWScsXG4gIFNOT1c6ICdTTk9XJyxcbiAgU1RBTkRBUkQ6ICdTVEFOREFSRCcsXG4gIFNUQU5EQVJEX0lBOiAnU1RBTkRBUkRfSUEnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUNsYXNzID0gKHR5cGVvZiBTdG9yYWdlQ2xhc3MpW2tleW9mIHR5cGVvZiBTdG9yYWdlQ2xhc3NdO1xuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5IHtcbiAgLyoqXG4gICAqIEEgYERhdGVgIHdoZW4gdGhlIGlkZW50aXR5IG9yIGNyZWRlbnRpYWwgd2lsbCBubyBsb25nZXIgYmUgYWNjZXB0ZWQuXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uPzogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyPElkZW50aXR5VCBleHRlbmRzIElkZW50aXR5PiB7XG4gIChpZGVudGl0eVByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxJZGVudGl0eVQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF3c0NyZWRlbnRpYWxJZGVudGl0eSBleHRlbmRzIElkZW50aXR5IHtcbiAgLyoqXG4gICAqIEFXUyBhY2Nlc3Mga2V5IElEXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NLZXlJZDogc3RyaW5nO1xuICAvKipcbiAgICogQVdTIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqL1xuICByZWFkb25seSBzZWNyZXRBY2Nlc3NLZXk6IHN0cmluZztcbiAgLyoqXG4gICAqIEEgc2VjdXJpdHkgb3Igc2Vzc2lvbiB0b2tlbiB0byB1c2Ugd2l0aCB0aGVzZSBjcmVkZW50aWFscy4gVXN1YWxseVxuICAgKiBwcmVzZW50IGZvciB0ZW1wb3JhcnkgY3JlZGVudGlhbHMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uVG9rZW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBV1MgY3JlZGVudGlhbCBzY29wZSBmb3IgdGhpcyBzZXQgb2YgY3JlZGVudGlhbHMuXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsU2NvcGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBV1MgYWNjb3VudElkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciA9IElkZW50aXR5UHJvdmlkZXI8QXdzQ3JlZGVudGlhbElkZW50aXR5PjtcblxuZXhwb3J0IGludGVyZmFjZSBQdXRPYmplY3RSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIDxwPlRoZSBjYW5uZWQgQUNMIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2FjbC1vdmVydmlldy5odG1sI0Nhbm5lZEFDTFwiPkNhbm5lZFxuICAgKiAgICAgICAgICBBQ0w8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKiAgICAgICAgICA8cD5XaGVuIGFkZGluZyBhIG5ldyBvYmplY3QsIHlvdSBjYW4gdXNlIGhlYWRlcnMgdG8gZ3JhbnQgQUNMLWJhc2VkIHBlcm1pc3Npb25zIHRvXG4gICAqICAgICAgICAgIGluZGl2aWR1YWwgQW1hem9uIFdlYiBTZXJ2aWNlcyBhY2NvdW50cyBvciB0byBwcmVkZWZpbmVkIGdyb3VwcyBkZWZpbmVkIGJ5IEFtYXpvbiBTMy4gVGhlc2UgcGVybWlzc2lvbnMgYXJlXG4gICAqICAgICAgICAgIHRoZW4gYWRkZWQgdG8gdGhlIEFDTCBvbiB0aGUgb2JqZWN0LiBCeSBkZWZhdWx0LCBhbGwgb2JqZWN0cyBhcmUgcHJpdmF0ZS4gT25seSB0aGUgb3duZXJcbiAgICogICAgICAgICAgaGFzIGZ1bGwgYWNjZXNzIGNvbnRyb2wuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2FjbC1vdmVydmlldy5odG1sXCI+QWNjZXNzIENvbnRyb2wgTGlzdCAoQUNMKSBPdmVydmlldzwvYT5cbiAgICogICAgICAgICAgYW5kIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9hY2wtdXNpbmctcmVzdC1hcGkuaHRtbFwiPk1hbmFnaW5nXG4gICAqICAgICAgICAgICAgIEFDTHMgVXNpbmcgdGhlIFJFU1QgQVBJPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgdGhlIGJ1Y2tldCB0aGF0IHlvdSdyZSB1cGxvYWRpbmcgb2JqZWN0cyB0byB1c2VzIHRoZSBidWNrZXQgb3duZXIgZW5mb3JjZWQgc2V0dGluZ1xuICAgKiAgICAgICAgICBmb3IgUzMgT2JqZWN0IE93bmVyc2hpcCwgQUNMcyBhcmUgZGlzYWJsZWQgYW5kIG5vIGxvbmdlciBhZmZlY3QgcGVybWlzc2lvbnMuIEJ1Y2tldHMgdGhhdFxuICAgKiAgICAgICAgICB1c2UgdGhpcyBzZXR0aW5nIG9ubHkgYWNjZXB0IFBVVCByZXF1ZXN0cyB0aGF0IGRvbid0IHNwZWNpZnkgYW4gQUNMIG9yIFBVVCByZXF1ZXN0cyB0aGF0XG4gICAqICAgICAgICAgIHNwZWNpZnkgYnVja2V0IG93bmVyIGZ1bGwgY29udHJvbCBBQ0xzLCBzdWNoIGFzIHRoZSA8Y29kZT5idWNrZXQtb3duZXItZnVsbC1jb250cm9sPC9jb2RlPlxuICAgKiAgICAgICAgICBjYW5uZWQgQUNMIG9yIGFuIGVxdWl2YWxlbnQgZm9ybSBvZiB0aGlzIEFDTCBleHByZXNzZWQgaW4gdGhlIFhNTCBmb3JtYXQuIFBVVCByZXF1ZXN0cyB0aGF0XG4gICAqICAgICAgICAgIGNvbnRhaW4gb3RoZXIgQUNMcyAoZm9yIGV4YW1wbGUsIGN1c3RvbSBncmFudHMgdG8gY2VydGFpbiBBbWF6b24gV2ViIFNlcnZpY2VzIGFjY291bnRzKSBmYWlsIGFuZCByZXR1cm4gYVxuICAgKiAgICAgICAgICA8Y29kZT40MDA8L2NvZGU+IGVycm9yIHdpdGggdGhlIGVycm9yIGNvZGUgPGNvZGU+QWNjZXNzQ29udHJvbExpc3ROb3RTdXBwb3J0ZWQ8L2NvZGU+LlxuICAgKiAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9hYm91dC1vYmplY3Qtb3duZXJzaGlwLmh0bWxcIj4gQ29udHJvbGxpbmcgb3duZXJzaGlwIG9mXG4gICAqICAgICAgICAgICAgIG9iamVjdHMgYW5kIGRpc2FibGluZyBBQ0xzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBBbWF6b24gUzMgb24gT3V0cG9zdHMuPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBBQ0w/OiBPYmplY3RDYW5uZWRBQ0w7XG4gIC8qKlxuICAgKiA8cD5PYmplY3QgZGF0YS48L3A+XG4gICAqL1xuICBCb2R5PzogUmVhZGFibGU7XG4gIC8qKlxuICAgKiA8cD5UaGUgYnVja2V0IG5hbWUgdG8gd2hpY2ggdGhlIFBVVCBhY3Rpb24gd2FzIGluaXRpYXRlZC4gPC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGI+RGlyZWN0b3J5IGJ1Y2tldHM8L2I+IC0gV2hlbiB5b3UgdXNlIHRoaXMgb3BlcmF0aW9uIHdpdGggYSBkaXJlY3RvcnkgYnVja2V0LCB5b3UgbXVzdCB1c2UgdmlydHVhbC1ob3N0ZWQtc3R5bGUgcmVxdWVzdHMgaW4gdGhlIGZvcm1hdCA8Y29kZT5cbiAgICogICAgICAgICAgICAgICAgPGk+QnVja2V0X25hbWU8L2k+LnMzZXhwcmVzcy08aT5hel9pZDwvaT4uPGk+cmVnaW9uPC9pPi5hbWF6b25hd3MuY29tPC9jb2RlPi4gUGF0aC1zdHlsZSByZXF1ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4gIERpcmVjdG9yeSBidWNrZXQgbmFtZXMgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNob3NlbiBBdmFpbGFiaWxpdHkgWm9uZS4gQnVja2V0IG5hbWVzIG11c3QgZm9sbG93IHRoZSBmb3JtYXQgPGNvZGU+XG4gICAqICAgICAgICAgICAgICAgIDxpPmJ1Y2tldF9iYXNlX25hbWU8L2k+LS08aT5hei1pZDwvaT4tLXgtczM8L2NvZGU+IChmb3IgZXhhbXBsZSwgPGNvZGU+XG4gICAqICAgICAgICAgICAgICAgIDxpPkRPQy1FWEFNUExFLUJVQ0tFVDwvaT4tLTxpPnVzdzItYXoxPC9pPi0teC1zMzwvY29kZT4pLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgYnVja2V0IG5hbWluZ1xuICAgKiAgICAgICAgICByZXN0cmljdGlvbnMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvZGlyZWN0b3J5LWJ1Y2tldC1uYW1pbmctcnVsZXMuaHRtbFwiPkRpcmVjdG9yeSBidWNrZXQgbmFtaW5nXG4gICAqICAgICAgICAgICAgIHJ1bGVzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxiPkFjY2VzcyBwb2ludHM8L2I+IC0gV2hlbiB5b3UgdXNlIHRoaXMgYWN0aW9uIHdpdGggYW4gYWNjZXNzIHBvaW50LCB5b3UgbXVzdCBwcm92aWRlIHRoZSBhbGlhcyBvZiB0aGUgYWNjZXNzIHBvaW50IGluIHBsYWNlIG9mIHRoZSBidWNrZXQgbmFtZSBvciBzcGVjaWZ5IHRoZSBhY2Nlc3MgcG9pbnQgQVJOLiBXaGVuIHVzaW5nIHRoZSBhY2Nlc3MgcG9pbnQgQVJOLCB5b3UgbXVzdCBkaXJlY3QgcmVxdWVzdHMgdG8gdGhlIGFjY2VzcyBwb2ludCBob3N0bmFtZS4gVGhlIGFjY2VzcyBwb2ludCBob3N0bmFtZSB0YWtlcyB0aGUgZm9ybSA8aT5BY2Nlc3NQb2ludE5hbWU8L2k+LTxpPkFjY291bnRJZDwvaT4uczMtYWNjZXNzcG9pbnQuPGk+UmVnaW9uPC9pPi5hbWF6b25hd3MuY29tLiBXaGVuIHVzaW5nIHRoaXMgYWN0aW9uIHdpdGggYW4gYWNjZXNzIHBvaW50IHRocm91Z2ggdGhlIEFtYXpvbiBXZWIgU2VydmljZXMgU0RLcywgeW91IHByb3ZpZGUgdGhlIGFjY2VzcyBwb2ludCBBUk4gaW4gcGxhY2Ugb2YgdGhlIGJ1Y2tldCBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhY2Nlc3MgcG9pbnQgQVJOcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS91c2luZy1hY2Nlc3MtcG9pbnRzLmh0bWxcIj5Vc2luZyBhY2Nlc3MgcG9pbnRzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPkFjY2VzcyBwb2ludHMgYW5kIE9iamVjdCBMYW1iZGEgYWNjZXNzIHBvaW50cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxiPlMzIG9uIE91dHBvc3RzPC9iPiAtIFdoZW4geW91IHVzZSB0aGlzIGFjdGlvbiB3aXRoIEFtYXpvbiBTMyBvbiBPdXRwb3N0cywgeW91IG11c3QgZGlyZWN0IHJlcXVlc3RzIHRvIHRoZSBTMyBvbiBPdXRwb3N0cyBob3N0bmFtZS4gVGhlIFMzIG9uIE91dHBvc3RzIGhvc3RuYW1lIHRha2VzIHRoZSBmb3JtIDxjb2RlPlxuICAgKiAgICAgICAgICAgICAgICA8aT5BY2Nlc3NQb2ludE5hbWU8L2k+LTxpPkFjY291bnRJZDwvaT4uPGk+b3V0cG9zdElEPC9pPi5zMy1vdXRwb3N0cy48aT5SZWdpb248L2k+LmFtYXpvbmF3cy5jb208L2NvZGU+LiBXaGVuIHlvdSB1c2UgdGhpcyBhY3Rpb24gd2l0aCBTMyBvbiBPdXRwb3N0cyB0aHJvdWdoIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIFNES3MsIHlvdSBwcm92aWRlIHRoZSBPdXRwb3N0cyBhY2Nlc3MgcG9pbnQgQVJOIGluIHBsYWNlIG9mIHRoZSBidWNrZXQgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgUzMgb24gT3V0cG9zdHMgQVJOcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9TM29uT3V0cG9zdHMuaHRtbFwiPldoYXQgaXMgUzMgb24gT3V0cG9zdHM/PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogPHA+Tm90ZTogVG8gc3VwcGx5IHRoZSBNdWx0aS1yZWdpb24gQWNjZXNzIFBvaW50IChNUkFQKSB0byBCdWNrZXQsIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIFwiQGF3cy1zZGsvc2lnbmF0dXJlLXY0LWNydFwiIHBhY2thZ2UgdG8geW91ciBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBnbyB0byBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMja25vd24taXNzdWVzPC9wPlxuICAgKi9cbiAgQnVja2V0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiA8cD5DYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNhY2hpbmcgYmVoYXZpb3IgYWxvbmcgdGhlIHJlcXVlc3QvcmVwbHkgY2hhaW4uIEZvciBtb3JlXG4gICAqICAgICAgICAgIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTQuaHRtbCNzZWMxNC45XCI+aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxNC5odG1sI3NlYzE0Ljk8L2E+LjwvcD5cbiAgICovXG4gIENhY2hlQ29udHJvbD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyBwcmVzZW50YXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIG9iamVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjYjc2VjdGlvbi00XCI+aHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjYjc2VjdGlvbi00PC9hPi48L3A+XG4gICAqL1xuICBDb250ZW50RGlzcG9zaXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5TcGVjaWZpZXMgd2hhdCBjb250ZW50IGVuY29kaW5ncyBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGUgb2JqZWN0IGFuZCB0aHVzIHdoYXQgZGVjb2RpbmdcbiAgICogICAgICAgICAgbWVjaGFuaXNtcyBtdXN0IGJlIGFwcGxpZWQgdG8gb2J0YWluIHRoZSBtZWRpYS10eXBlIHJlZmVyZW5jZWQgYnkgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICogICAgICAgICAgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwLmh0bWwjZmllbGQuY29udGVudC1lbmNvZGluZ1wiPmh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwLmh0bWwjZmllbGQuY29udGVudC1lbmNvZGluZzwvYT4uPC9wPlxuICAgKi9cbiAgQ29udGVudEVuY29kaW5nPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIGxhbmd1YWdlIHRoZSBjb250ZW50IGlzIGluLjwvcD5cbiAgICovXG4gIENvbnRlbnRMYW5ndWFnZT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNpemUgb2YgdGhlIGJvZHkgaW4gYnl0ZXMuIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWZ1bCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib2R5IGNhbm5vdCBiZVxuICAgKiAgICAgICAgICBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwLmh0bWwjbmFtZS1jb250ZW50LWxlbmd0aFwiPmh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwLmh0bWwjbmFtZS1jb250ZW50LWxlbmd0aDwvYT4uPC9wPlxuICAgKi9cbiAgQ29udGVudExlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIDxwPlRoZSBiYXNlNjQtZW5jb2RlZCAxMjgtYml0IE1ENSBkaWdlc3Qgb2YgdGhlIG1lc3NhZ2UgKHdpdGhvdXQgdGhlIGhlYWRlcnMpIGFjY29yZGluZyB0b1xuICAgKiAgICAgICAgICBSRkMgMTg2NC4gVGhpcyBoZWFkZXIgY2FuIGJlIHVzZWQgYXMgYSBtZXNzYWdlIGludGVncml0eSBjaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgZGF0YSBpc1xuICAgKiAgICAgICAgICB0aGUgc2FtZSBkYXRhIHRoYXQgd2FzIG9yaWdpbmFsbHkgc2VudC4gQWx0aG91Z2ggaXQgaXMgb3B0aW9uYWwsIHdlIHJlY29tbWVuZCB1c2luZyB0aGVcbiAgICogICAgICAgICAgQ29udGVudC1NRDUgbWVjaGFuaXNtIGFzIGFuIGVuZC10by1lbmQgaW50ZWdyaXR5IGNoZWNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBSRVNUXG4gICAqICAgICAgICAgIHJlcXVlc3QgYXV0aGVudGljYXRpb24sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvUkVTVEF1dGhlbnRpY2F0aW9uLmh0bWxcIj5SRVNUIEF1dGhlbnRpY2F0aW9uPC9hPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGUgPGNvZGU+Q29udGVudC1NRDU8L2NvZGU+IGhlYWRlciBpcyByZXF1aXJlZCBmb3IgYW55IHJlcXVlc3QgdG8gdXBsb2FkIGFuXG4gICAqICAgICAgICAgIG9iamVjdCB3aXRoIGEgcmV0ZW50aW9uIHBlcmlvZCBjb25maWd1cmVkIHVzaW5nIEFtYXpvbiBTMyBPYmplY3QgTG9jay4gRm9yIG1vcmVcbiAgICogICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFMzIE9iamVjdCBMb2NrLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L29iamVjdC1sb2NrLW92ZXJ2aWV3Lmh0bWxcIj5BbWF6b24gUzMgT2JqZWN0IExvY2tcbiAgICogICAgICAgICAgICAgT3ZlcnZpZXc8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uIDwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgQ29udGVudE1ENT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkEgc3RhbmRhcmQgTUlNRSB0eXBlIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCBvZiB0aGUgY29udGVudHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwLmh0bWwjbmFtZS1jb250ZW50LXR5cGVcIj5odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMC5odG1sI25hbWUtY29udGVudC10eXBlPC9hPi48L3A+XG4gICAqL1xuICBDb250ZW50VHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPkluZGljYXRlcyB0aGUgYWxnb3JpdGhtIHVzZWQgdG8gY3JlYXRlIHRoZSBjaGVja3N1bSBmb3IgdGhlIG9iamVjdCB3aGVuIHlvdSB1c2UgdGhlIFNESy4gVGhpcyBoZWFkZXIgd2lsbCBub3QgcHJvdmlkZSBhbnlcbiAgICogICAgIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBpZiB5b3UgZG9uJ3QgdXNlIHRoZSBTREsuIFdoZW4geW91IHNlbmQgdGhpcyBoZWFkZXIsIHRoZXJlIG11c3QgYmUgYSBjb3JyZXNwb25kaW5nIDxjb2RlPngtYW16LWNoZWNrc3VtLTxpPmFsZ29yaXRobTwvaT5cbiAgICogICAgICAgICAgICAgPC9jb2RlPiBvclxuICAgKiAgICAgPGNvZGU+eC1hbXotdHJhaWxlcjwvY29kZT4gaGVhZGVyIHNlbnQuIE90aGVyd2lzZSwgQW1hem9uIFMzIGZhaWxzIHRoZSByZXF1ZXN0IHdpdGggdGhlIEhUVFAgc3RhdHVzIGNvZGUgPGNvZGU+NDAwIEJhZCBSZXF1ZXN0PC9jb2RlPi48L3A+XG4gICAqICAgICAgICAgIDxwPkZvciB0aGUgPGNvZGU+eC1hbXotY2hlY2tzdW0tPGk+YWxnb3JpdGhtPC9pPlxuICAgKiAgICAgICAgICAgICA8L2NvZGU+IGhlYWRlciwgcmVwbGFjZSA8Y29kZT5cbiAgICogICAgICAgICAgICAgICAgPGk+YWxnb3JpdGhtPC9pPlxuICAgKiAgICAgICAgICAgICA8L2NvZGU+IHdpdGggdGhlIHN1cHBvcnRlZCBhbGdvcml0aG0gZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6IDwvcD5cbiAgICogICAgICAgICAgPHVsPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPkNSQzMyPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPkNSQzMyQzwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICA8cD5TSEExPC9wPlxuICAgKiAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgIDxwPlNIQTI1NjwvcD5cbiAgICogICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPHA+Rm9yIG1vcmVcbiAgICogICAgIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2NoZWNraW5nLW9iamVjdC1pbnRlZ3JpdHkuaHRtbFwiPkNoZWNraW5nIG9iamVjdCBpbnRlZ3JpdHk8L2E+IGluXG4gICAqICAgICB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgdGhlIGluZGl2aWR1YWwgY2hlY2tzdW0gdmFsdWUgeW91IHByb3ZpZGUgdGhyb3VnaCA8Y29kZT54LWFtei1jaGVja3N1bS08aT5hbGdvcml0aG08L2k+XG4gICAqICAgICAgICAgICAgIDwvY29kZT4gZG9lc24ndCBtYXRjaCB0aGUgY2hlY2tzdW0gYWxnb3JpdGhtIHlvdSBzZXQgdGhyb3VnaCA8Y29kZT54LWFtei1zZGstY2hlY2tzdW0tYWxnb3JpdGhtPC9jb2RlPiwgIEFtYXpvbiBTMyBpZ25vcmVzIGFueSBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICA8Y29kZT5DaGVja3N1bUFsZ29yaXRobTwvY29kZT4gcGFyYW1ldGVyIGFuZCB1c2VzIHRoZSBjaGVja3N1bSBhbGdvcml0aG0gdGhhdCBtYXRjaGVzIHRoZSBwcm92aWRlZCB2YWx1ZSBpbiA8Y29kZT54LWFtei1jaGVja3N1bS08aT5hbGdvcml0aG08L2k+XG4gICAqICAgICAgICAgICAgIDwvY29kZT4uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+Rm9yIGRpcmVjdG9yeSBidWNrZXRzLCB3aGVuIHlvdSB1c2UgQW1hem9uIFdlYiBTZXJ2aWNlcyBTREtzLCA8Y29kZT5DUkMzMjwvY29kZT4gaXMgdGhlIGRlZmF1bHQgY2hlY2tzdW0gYWxnb3JpdGhtIHRoYXQncyB1c2VkIGZvciBwZXJmb3JtYW5jZS48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIENoZWNrc3VtQWxnb3JpdGhtPzogQ2hlY2tzdW1BbGdvcml0aG1JbjtcbiAgLyoqXG4gICAqIDxwPlRoaXMgaGVhZGVyIGNhbiBiZSB1c2VkIGFzIGEgZGF0YSBpbnRlZ3JpdHkgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIGRhdGEgcmVjZWl2ZWQgaXMgdGhlIHNhbWUgZGF0YSB0aGF0IHdhcyBvcmlnaW5hbGx5IHNlbnQuXG4gICAqICAgICBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIGJhc2U2NC1lbmNvZGVkLCAzMi1iaXQgQ1JDMzIgY2hlY2tzdW0gb2YgdGhlIG9iamVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuICAgKiAgICAgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2NoZWNraW5nLW9iamVjdC1pbnRlZ3JpdHkuaHRtbFwiPkNoZWNraW5nIG9iamVjdCBpbnRlZ3JpdHk8L2E+IGluIHRoZVxuICAgKiAgICAgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIENoZWNrc3VtQ1JDMzI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGlzIGhlYWRlciBjYW4gYmUgdXNlZCBhcyBhIGRhdGEgaW50ZWdyaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGF0IHRoZSBkYXRhIHJlY2VpdmVkIGlzIHRoZSBzYW1lIGRhdGEgdGhhdCB3YXMgb3JpZ2luYWxseSBzZW50LlxuICAgKiAgICAgVGhpcyBoZWFkZXIgc3BlY2lmaWVzIHRoZSBiYXNlNjQtZW5jb2RlZCwgMzItYml0IENSQzMyQyBjaGVja3N1bSBvZiB0aGUgb2JqZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4gICAqICAgICA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvY2hlY2tpbmctb2JqZWN0LWludGVncml0eS5odG1sXCI+Q2hlY2tpbmcgb2JqZWN0IGludGVncml0eTwvYT4gaW4gdGhlXG4gICAqICAgICA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgQ2hlY2tzdW1DUkMzMkM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGlzIGhlYWRlciBjYW4gYmUgdXNlZCBhcyBhIGRhdGEgaW50ZWdyaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGF0IHRoZSBkYXRhIHJlY2VpdmVkIGlzIHRoZSBzYW1lIGRhdGEgdGhhdCB3YXMgb3JpZ2luYWxseSBzZW50LlxuICAgKiAgICAgVGhpcyBoZWFkZXIgc3BlY2lmaWVzIHRoZSBiYXNlNjQtZW5jb2RlZCwgMTYwLWJpdCBTSEEtMSBkaWdlc3Qgb2YgdGhlIG9iamVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuICAgKiAgICAgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2NoZWNraW5nLW9iamVjdC1pbnRlZ3JpdHkuaHRtbFwiPkNoZWNraW5nIG9iamVjdCBpbnRlZ3JpdHk8L2E+IGluIHRoZVxuICAgKiAgICAgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIENoZWNrc3VtU0hBMT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoaXMgaGVhZGVyIGNhbiBiZSB1c2VkIGFzIGEgZGF0YSBpbnRlZ3JpdHkgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIGRhdGEgcmVjZWl2ZWQgaXMgdGhlIHNhbWUgZGF0YSB0aGF0IHdhcyBvcmlnaW5hbGx5IHNlbnQuXG4gICAqICAgICBUaGlzIGhlYWRlciBzcGVjaWZpZXMgdGhlIGJhc2U2NC1lbmNvZGVkLCAyNTYtYml0IFNIQS0yNTYgZGlnZXN0IG9mIHRoZSBvYmplY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogICAgIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWxcIj5DaGVja2luZyBvYmplY3QgaW50ZWdyaXR5PC9hPiBpbiB0aGVcbiAgICogICAgIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqL1xuICBDaGVja3N1bVNIQTI1Nj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBkYXRlIGFuZCB0aW1lIGF0IHdoaWNoIHRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIGNhY2hlYWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuICAgKiAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzQjc2VjdGlvbi01LjNcIj5odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzNCNzZWN0aW9uLTUuMzwvYT4uPC9wPlxuICAgKi9cbiAgRXhwaXJlcz86IERhdGU7XG4gIC8qKlxuICAgKiA8cD5VcGxvYWRzIHRoZSBvYmplY3Qgb25seSBpZiB0aGUgb2JqZWN0IGtleSBuYW1lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gdGhlIGJ1Y2tldCBzcGVjaWZpZWQuIE90aGVyd2lzZSwgQW1hem9uIFMzIHJldHVybnMgYSA8Y29kZT40MTIgUHJlY29uZGl0aW9uIEZhaWxlZDwvY29kZT4gZXJyb3IuPC9wPlxuICAgKiAgICAgICAgICA8cD5JZiBhIGNvbmZsaWN0aW5nIG9wZXJhdGlvbiBvY2N1cnMgZHVyaW5nIHRoZSB1cGxvYWQgUzMgcmV0dXJucyBhIDxjb2RlPjQwOSBDb25kaXRpb25hbFJlcXVlc3RDb25mbGljdDwvY29kZT4gcmVzcG9uc2UuIE9uIGEgNDA5IGZhaWx1cmUgeW91IHNob3VsZCByZXRyeSB0aGUgdXBsb2FkLjwvcD5cbiAgICogICAgICAgICAgPHA+RXhwZWN0cyB0aGUgJyonIChhc3RlcmlzaykgY2hhcmFjdGVyLjwvcD5cbiAgICogICAgICAgICAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29uZGl0aW9uYWwgcmVxdWVzdHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzJcIj5SRkMgNzIzMjwvYT4sIG9yIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jb25kaXRpb25hbC1yZXF1ZXN0cy5odG1sXCI+Q29uZGl0aW9uYWwgcmVxdWVzdHM8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgSWZOb25lTWF0Y2g/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5HaXZlcyB0aGUgZ3JhbnRlZSBSRUFELCBSRUFEX0FDUCwgYW5kIFdSSVRFX0FDUCBwZXJtaXNzaW9ucyBvbiB0aGUgb2JqZWN0LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBBbWF6b24gUzMgb24gT3V0cG9zdHMuPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBHcmFudEZ1bGxDb250cm9sPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+QWxsb3dzIGdyYW50ZWUgdG8gcmVhZCB0aGUgb2JqZWN0IGRhdGEgYW5kIGl0cyBtZXRhZGF0YS48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQW1hem9uIFMzIG9uIE91dHBvc3RzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgR3JhbnRSZWFkPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+QWxsb3dzIGdyYW50ZWUgdG8gcmVhZCB0aGUgb2JqZWN0IEFDTC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8dWw+XG4gICAqICAgICAgICAgICAgICAgIDxsaT5cbiAgICogICAgICAgICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQW1hem9uIFMzIG9uIE91dHBvc3RzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgR3JhbnRSZWFkQUNQPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+QWxsb3dzIGdyYW50ZWUgdG8gd3JpdGUgdGhlIEFDTCBmb3IgdGhlIGFwcGxpY2FibGUgb2JqZWN0LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICAgICA8bGk+XG4gICAqICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBBbWF6b24gUzMgb24gT3V0cG9zdHMuPC9wPlxuICAgKiAgICAgICAgICAgICAgICA8L2xpPlxuICAgKiAgICAgICAgICAgICA8L3VsPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBHcmFudFdyaXRlQUNQPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+T2JqZWN0IGtleSBmb3Igd2hpY2ggdGhlIFBVVCBhY3Rpb24gd2FzIGluaXRpYXRlZC48L3A+XG4gICAqL1xuICBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIDxwPkEgbWFwIG9mIG1ldGFkYXRhIHRvIHN0b3JlIHdpdGggdGhlIG9iamVjdCBpbiBTMy48L3A+XG4gICAqL1xuICBNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiA8cD5UaGUgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gdGhhdCB3YXMgdXNlZCB3aGVuIHlvdSBzdG9yZSB0aGlzIG9iamVjdCBpbiBBbWF6b24gUzMgKGZvciBleGFtcGxlLFxuICAgKiAgICAgICAgICAgICA8Y29kZT5BRVMyNTY8L2NvZGU+LCA8Y29kZT5hd3M6a21zPC9jb2RlPiwgPGNvZGU+YXdzOmttczpkc3NlPC9jb2RlPikuPC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGI+R2VuZXJhbCBwdXJwb3NlIGJ1Y2tldHMgPC9iPiAtIFlvdSBoYXZlIGZvdXIgbXV0dWFsbHkgZXhjbHVzaXZlIG9wdGlvbnMgdG8gcHJvdGVjdCBkYXRhIHVzaW5nIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gaW5cbiAgICogICAgICAgICAgICAgICAgQW1hem9uIFMzLCBkZXBlbmRpbmcgb24gaG93IHlvdSBjaG9vc2UgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGtleXMuIFNwZWNpZmljYWxseSwgdGhlXG4gICAqICAgICAgICAgICAgICAgIGVuY3J5cHRpb24ga2V5IG9wdGlvbnMgYXJlIEFtYXpvbiBTMyBtYW5hZ2VkIGtleXMgKFNTRS1TMyksIEFtYXpvbiBXZWIgU2VydmljZXMgS01TIGtleXMgKFNTRS1LTVMgb3JcbiAgICogICAgICAgICAgICAgICAgRFNTRS1LTVMpLCBhbmQgY3VzdG9tZXItcHJvdmlkZWQga2V5cyAoU1NFLUMpLiBBbWF6b24gUzMgZW5jcnlwdHMgZGF0YSB3aXRoIHNlcnZlci1zaWRlXG4gICAqICAgICAgICAgICAgICAgIGVuY3J5cHRpb24gYnkgdXNpbmcgQW1hem9uIFMzIG1hbmFnZWQga2V5cyAoU1NFLVMzKSBieSBkZWZhdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgdGVsbCBBbWF6b24gUzMgdG9cbiAgICogICAgICAgICAgICAgICAgZW5jcnlwdCBkYXRhIGF0IHJlc3QgYnkgdXNpbmcgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB3aXRoIG90aGVyIGtleSBvcHRpb25zLiBGb3IgbW9yZVxuICAgKiAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Vc2luZ1NlcnZlclNpZGVFbmNyeXB0aW9uLmh0bWxcIj5Vc2luZyBTZXJ2ZXItU2lkZVxuICAgKiAgICAgICAgICAgICAgICAgICBFbmNyeXB0aW9uPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPHA+XG4gICAqICAgICAgICAgICAgIDxiPkRpcmVjdG9yeSBidWNrZXRzIDwvYj4gLSBGb3IgZGlyZWN0b3J5IGJ1Y2tldHMsIG9ubHkgdGhlIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBBbWF6b24gUzMgbWFuYWdlZCBrZXlzIChTU0UtUzMpICg8Y29kZT5BRVMyNTY8L2NvZGU+KSB2YWx1ZSBpcyBzdXBwb3J0ZWQuPC9wPlxuICAgKi9cbiAgU2VydmVyU2lkZUVuY3J5cHRpb24/OiBTZXJ2ZXJTaWRlRW5jcnlwdGlvbjtcbiAgLyoqXG4gICAqIDxwPkJ5IGRlZmF1bHQsIEFtYXpvbiBTMyB1c2VzIHRoZSBTVEFOREFSRCBTdG9yYWdlIENsYXNzIHRvIHN0b3JlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0cy4gVGhlXG4gICAqICAgICAgICAgIFNUQU5EQVJEIHN0b3JhZ2UgY2xhc3MgcHJvdmlkZXMgaGlnaCBkdXJhYmlsaXR5IGFuZCBoaWdoIGF2YWlsYWJpbGl0eS4gRGVwZW5kaW5nIG9uXG4gICAqICAgICAgICAgIHBlcmZvcm1hbmNlIG5lZWRzLCB5b3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgU3RvcmFnZSBDbGFzcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvc3RvcmFnZS1jbGFzcy1pbnRyby5odG1sXCI+U3RvcmFnZSBDbGFzc2VzPC9hPiBpbiB0aGVcbiAgICogICAgICAgICAgICAgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDx1bD5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5Gb3IgZGlyZWN0b3J5IGJ1Y2tldHMsIG9ubHkgdGhlIFMzIEV4cHJlc3MgT25lIFpvbmUgc3RvcmFnZSBjbGFzcyBpcyBzdXBwb3J0ZWQgdG8gc3RvcmUgbmV3bHkgY3JlYXRlZCBvYmplY3RzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgICAgPGxpPlxuICAgKiAgICAgICAgICAgICAgICAgICA8cD5BbWF6b24gUzMgb24gT3V0cG9zdHMgb25seSB1c2VzXG4gICAqICAgICAgICAgICAgICAgIHRoZSBPVVRQT1NUUyBTdG9yYWdlIENsYXNzLjwvcD5cbiAgICogICAgICAgICAgICAgICAgPC9saT5cbiAgICogICAgICAgICAgICAgPC91bD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgU3RvcmFnZUNsYXNzPzogU3RvcmFnZUNsYXNzO1xuICAvKipcbiAgICogPHA+SWYgdGhlIGJ1Y2tldCBpcyBjb25maWd1cmVkIGFzIGEgd2Vic2l0ZSwgcmVkaXJlY3RzIHJlcXVlc3RzIGZvciB0aGlzIG9iamVjdCB0byBhbm90aGVyXG4gICAqICAgICAgICAgIG9iamVjdCBpbiB0aGUgc2FtZSBidWNrZXQgb3IgdG8gYW4gZXh0ZXJuYWwgVVJMLiBBbWF6b24gUzMgc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGlzIGhlYWRlciBpblxuICAgKiAgICAgICAgICB0aGUgb2JqZWN0IG1ldGFkYXRhLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgb2JqZWN0IG1ldGFkYXRhLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1VzaW5nTWV0YWRhdGEuaHRtbFwiPk9iamVjdCBLZXkgYW5kIE1ldGFkYXRhPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzXG4gICAqICAgICAgICAgICAgICAgIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPHA+SW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgcmVxdWVzdCBoZWFkZXIgc2V0cyB0aGUgcmVkaXJlY3QgdG8gYW4gb2JqZWN0XG4gICAqICAgICAgICAgIChhbm90aGVyUGFnZS5odG1sKSBpbiB0aGUgc2FtZSBidWNrZXQ6PC9wPlxuICAgKiAgICAgICAgICA8cD5cbiAgICogICAgICAgICAgICAgPGNvZGU+eC1hbXotd2Vic2l0ZS1yZWRpcmVjdC1sb2NhdGlvbjogL2Fub3RoZXJQYWdlLmh0bWw8L2NvZGU+XG4gICAqICAgICAgICAgIDwvcD5cbiAgICogICAgICAgICAgPHA+SW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgcmVxdWVzdCBoZWFkZXIgc2V0cyB0aGUgb2JqZWN0IHJlZGlyZWN0IHRvIGFub3RoZXJcbiAgICogICAgICAgICAgd2Vic2l0ZTo8L3A+XG4gICAqICAgICAgICAgIDxwPlxuICAgKiAgICAgICAgICAgICA8Y29kZT54LWFtei13ZWJzaXRlLXJlZGlyZWN0LWxvY2F0aW9uOiBodHRwOi8vd3d3LmV4YW1wbGUuY29tLzwvY29kZT5cbiAgICogICAgICAgICAgPC9wPlxuICAgKiAgICAgICAgICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3ZWJzaXRlIGhvc3RpbmcgaW4gQW1hem9uIFMzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1dlYnNpdGVIb3N0aW5nLmh0bWxcIj5Ib3N0aW5nIFdlYnNpdGVzIG9uIEFtYXpvbiBTMzwvYT4gYW5kXG4gICAqICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9ob3ctdG8tcGFnZS1yZWRpcmVjdC5odG1sXCI+SG93IHRvXG4gICAqICAgICAgICAgICAgICAgIENvbmZpZ3VyZSBXZWJzaXRlIFBhZ2UgUmVkaXJlY3RzPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzXG4gICAqICAgICAgICAgICAgICAgICAgIFVzZXIgR3VpZGU8L2k+LiA8L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBXZWJzaXRlUmVkaXJlY3RMb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIHRvIHVzZSB3aGVuIGVuY3J5cHRpbmcgdGhlIG9iamVjdCAoZm9yIGV4YW1wbGUsXG4gICAqICAgICAgICAgIDxjb2RlPkFFUzI1NjwvY29kZT4pLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFNTRUN1c3RvbWVyQWxnb3JpdGhtPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+U3BlY2lmaWVzIHRoZSBjdXN0b21lci1wcm92aWRlZCBlbmNyeXB0aW9uIGtleSBmb3IgQW1hem9uIFMzIHRvIHVzZSBpbiBlbmNyeXB0aW5nIGRhdGEuIFRoaXNcbiAgICogICAgICAgICAgdmFsdWUgaXMgdXNlZCB0byBzdG9yZSB0aGUgb2JqZWN0IGFuZCB0aGVuIGl0IGlzIGRpc2NhcmRlZDsgQW1hem9uIFMzIGRvZXMgbm90IHN0b3JlIHRoZVxuICAgKiAgICAgICAgICBlbmNyeXB0aW9uIGtleS4gVGhlIGtleSBtdXN0IGJlIGFwcHJvcHJpYXRlIGZvciB1c2Ugd2l0aCB0aGUgYWxnb3JpdGhtIHNwZWNpZmllZCBpbiB0aGVcbiAgICogICAgICAgICAgICAgPGNvZGU+eC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbi1jdXN0b21lci1hbGdvcml0aG08L2NvZGU+IGhlYWRlci48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTU0VDdXN0b21lcktleT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB0aGUgMTI4LWJpdCBNRDUgZGlnZXN0IG9mIHRoZSBlbmNyeXB0aW9uIGtleSBhY2NvcmRpbmcgdG8gUkZDIDEzMjEuIEFtYXpvbiBTMyB1c2VzXG4gICAqICAgICAgICAgIHRoaXMgaGVhZGVyIGZvciBhIG1lc3NhZ2UgaW50ZWdyaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBlbmNyeXB0aW9uIGtleSB3YXMgdHJhbnNtaXR0ZWRcbiAgICogICAgICAgICAgd2l0aG91dCBlcnJvci48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTU0VDdXN0b21lcktleU1ENT86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPklmIDxjb2RlPngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb248L2NvZGU+IGhhcyBhIHZhbGlkIHZhbHVlIG9mIDxjb2RlPmF3czprbXM8L2NvZGU+XG4gICAqICAgICAgICAgIG9yIDxjb2RlPmF3czprbXM6ZHNzZTwvY29kZT4sIHRoaXMgaGVhZGVyIHNwZWNpZmllcyB0aGUgSUQgKEtleSBJRCwgS2V5IEFSTiwgb3IgS2V5IEFsaWFzKSBvZiB0aGUgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKVxuICAgKiAgICAgICAgICBzeW1tZXRyaWMgZW5jcnlwdGlvbiBjdXN0b21lciBtYW5hZ2VkIGtleSB0aGF0IHdhcyB1c2VkIGZvciB0aGUgb2JqZWN0LiBJZiB5b3Ugc3BlY2lmeVxuICAgKiAgICAgICAgICAgICA8Y29kZT54LWFtei1zZXJ2ZXItc2lkZS1lbmNyeXB0aW9uOmF3czprbXM8L2NvZGU+IG9yXG4gICAqICAgICAgICAgICAgIDxjb2RlPngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb246YXdzOmttczpkc3NlPC9jb2RlPiwgYnV0IGRvIG5vdCBwcm92aWRlPGNvZGU+XG4gICAqICAgICAgICAgICAgIHgtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24tYXdzLWttcy1rZXktaWQ8L2NvZGU+LCBBbWF6b24gUzMgdXNlcyB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBtYW5hZ2VkIGtleVxuICAgKiAgICAgICAgICAgICAoPGNvZGU+YXdzL3MzPC9jb2RlPikgdG8gcHJvdGVjdCB0aGUgZGF0YS4gSWYgdGhlIEtNUyBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHNhbWVcbiAgICogICAgICAgICAgYWNjb3VudCB0aGF0J3MgaXNzdWluZyB0aGUgY29tbWFuZCwgeW91IG11c3QgdXNlIHRoZSBmdWxsIEFSTiBhbmQgbm90IGp1c3QgdGhlIElELiA8L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTU0VLTVNLZXlJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB0aGUgQW1hem9uIFdlYiBTZXJ2aWNlcyBLTVMgRW5jcnlwdGlvbiBDb250ZXh0IHRvIHVzZSBmb3Igb2JqZWN0IGVuY3J5cHRpb24uIFRoZSB2YWx1ZSBvZlxuICAgKiAgICAgICAgICB0aGlzIGhlYWRlciBpcyBhIGJhc2U2NC1lbmNvZGVkIFVURi04IHN0cmluZyBob2xkaW5nIEpTT04gd2l0aCB0aGUgZW5jcnlwdGlvbiBjb250ZXh0XG4gICAqICAgICAgICAgIGtleS12YWx1ZSBwYWlycy4gVGhpcyB2YWx1ZSBpcyBzdG9yZWQgYXMgb2JqZWN0IG1ldGFkYXRhIGFuZCBhdXRvbWF0aWNhbGx5IGdldHMgcGFzc2VkIG9uXG4gICAqICAgICAgICAgIHRvIEFtYXpvbiBXZWIgU2VydmljZXMgS01TIGZvciBmdXR1cmUgPGNvZGU+R2V0T2JqZWN0PC9jb2RlPiBvciA8Y29kZT5Db3B5T2JqZWN0PC9jb2RlPiBvcGVyYXRpb25zIG9uXG4gICAqICAgICAgICAgIHRoaXMgb2JqZWN0LiBUaGlzIHZhbHVlIG11c3QgYmUgZXhwbGljaXRseSBhZGRlZCBkdXJpbmcgPGNvZGU+Q29weU9iamVjdDwvY29kZT4gb3BlcmF0aW9ucy48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTU0VLTVNFbmNyeXB0aW9uQ29udGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlNwZWNpZmllcyB3aGV0aGVyIEFtYXpvbiBTMyBzaG91bGQgdXNlIGFuIFMzIEJ1Y2tldCBLZXkgZm9yIG9iamVjdCBlbmNyeXB0aW9uIHdpdGhcbiAgICogICAgICAgICAgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB1c2luZyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGtleXMgKFNTRS1LTVMpLiBTZXR0aW5nIHRoaXMgaGVhZGVyIHRvXG4gICAqICAgICAgICAgICAgIDxjb2RlPnRydWU8L2NvZGU+IGNhdXNlcyBBbWF6b24gUzMgdG8gdXNlIGFuIFMzIEJ1Y2tldCBLZXkgZm9yIG9iamVjdCBlbmNyeXB0aW9uIHdpdGhcbiAgICogICAgICAgICAgU1NFLUtNUy48L3A+XG4gICAqICAgICAgICAgIDxwPlNwZWNpZnlpbmcgdGhpcyBoZWFkZXIgd2l0aCBhIFBVVCBhY3Rpb24gZG9lc27igJl0IGFmZmVjdCBidWNrZXQtbGV2ZWwgc2V0dGluZ3MgZm9yIFMzXG4gICAqICAgICAgICAgIEJ1Y2tldCBLZXkuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgQnVja2V0S2V5RW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiA8cD5Db25maXJtcyB0aGF0IHRoZSByZXF1ZXN0ZXIga25vd3MgdGhhdCB0aGV5IHdpbGwgYmUgY2hhcmdlZCBmb3IgdGhlIHJlcXVlc3QuIEJ1Y2tldFxuICAgKiAgICAgICAgICBvd25lcnMgbmVlZCBub3Qgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciBpbiB0aGVpciByZXF1ZXN0cy4gSWYgZWl0aGVyIHRoZSBzb3VyY2Ugb3JcbiAgICogICAgICAgICAgZGVzdGluYXRpb24gUzMgYnVja2V0IGhhcyBSZXF1ZXN0ZXIgUGF5cyBlbmFibGVkLCB0aGUgcmVxdWVzdGVyIHdpbGwgcGF5IGZvclxuICAgKiAgICAgICAgICBjb3JyZXNwb25kaW5nIGNoYXJnZXMgdG8gY29weSB0aGUgb2JqZWN0LiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgZG93bmxvYWRpbmcgb2JqZWN0cyBmcm9tXG4gICAqICAgICAgICAgIFJlcXVlc3RlciBQYXlzIGJ1Y2tldHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvT2JqZWN0c2luUmVxdWVzdGVyUGF5c0J1Y2tldHMuaHRtbFwiPkRvd25sb2FkaW5nIE9iamVjdHMgaW5cbiAgICogICAgICAgICAgICAgUmVxdWVzdGVyIFBheXMgQnVja2V0czwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBSZXF1ZXN0UGF5ZXI/OiBSZXF1ZXN0UGF5ZXI7XG4gIC8qKlxuICAgKiA8cD5UaGUgdGFnLXNldCBmb3IgdGhlIG9iamVjdC4gVGhlIHRhZy1zZXQgbXVzdCBiZSBlbmNvZGVkIGFzIFVSTCBRdWVyeSBwYXJhbWV0ZXJzLiAoRm9yXG4gICAqICAgICAgICAgIGV4YW1wbGUsIFwiS2V5MT1WYWx1ZTFcIik8L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBUYWdnaW5nPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIE9iamVjdCBMb2NrIG1vZGUgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGlzIG9iamVjdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBPYmplY3RMb2NrTW9kZT86IE9iamVjdExvY2tNb2RlO1xuICAvKipcbiAgICogPHA+VGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB5b3Ugd2FudCB0aGlzIG9iamVjdCdzIE9iamVjdCBMb2NrIHRvIGV4cGlyZS4gTXVzdCBiZSBmb3JtYXR0ZWRcbiAgICogICAgICAgICAgYXMgYSB0aW1lc3RhbXAgcGFyYW1ldGVyLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIE9iamVjdExvY2tSZXRhaW5VbnRpbERhdGU/OiBEYXRlO1xuICAvKipcbiAgICogPHA+U3BlY2lmaWVzIHdoZXRoZXIgYSBsZWdhbCBob2xkIHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIG9iamVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICogICAgICAgICAgYWJvdXQgUzMgT2JqZWN0IExvY2ssIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvb2JqZWN0LWxvY2suaHRtbFwiPk9iamVjdCBMb2NrPC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIE9iamVjdExvY2tMZWdhbEhvbGRTdGF0dXM/OiBPYmplY3RMb2NrTGVnYWxIb2xkU3RhdHVzO1xuICAvKipcbiAgICogPHA+VGhlIGFjY291bnQgSUQgb2YgdGhlIGV4cGVjdGVkIGJ1Y2tldCBvd25lci4gSWYgdGhlIGFjY291bnQgSUQgdGhhdCB5b3UgcHJvdmlkZSBkb2VzIG5vdCBtYXRjaCB0aGUgYWN0dWFsIG93bmVyIG9mIHRoZSBidWNrZXQsIHRoZSByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgc3RhdHVzIGNvZGUgPGNvZGU+NDAzIEZvcmJpZGRlbjwvY29kZT4gKGFjY2VzcyBkZW5pZWQpLjwvcD5cbiAgICovXG4gIEV4cGVjdGVkQnVja2V0T3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE5vZGVKc1J1bnRpbWVTdHJlYW1pbmdCbG9iUGF5bG9hZElucHV0VHlwZXMgPSBzdHJpbmcgfCBVaW50OEFycmF5IHwgQnVmZmVyIHwgUmVhZGFibGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHV0T2JqZWN0Q29tbWFuZElucHV0IGV4dGVuZHMgT21pdDxQdXRPYmplY3RSZXF1ZXN0LCAnQm9keSc+IHtcbiAgQm9keT86IE5vZGVKc1J1bnRpbWVTdHJlYW1pbmdCbG9iUGF5bG9hZElucHV0VHlwZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRPdXRwdXQge1xuICAvKipcbiAgICogPHA+VGhlIFVSSSB0aGF0IGlkZW50aWZpZXMgdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LjwvcD5cbiAgICovXG4gIExvY2F0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCB0aGF0IGNvbnRhaW5zIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC4gRG9lcyBub3QgcmV0dXJuIHRoZSBhY2Nlc3MgcG9pbnRcbiAgICogICAgICAgICAgQVJOIG9yIGFjY2VzcyBwb2ludCBhbGlhcyBpZiB1c2VkLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPkFjY2VzcyBwb2ludHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBCdWNrZXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgb2JqZWN0IGtleSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuPC9wPlxuICAgKi9cbiAgS2V5Pzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+SWYgdGhlIG9iamVjdCBleHBpcmF0aW9uIGlzIGNvbmZpZ3VyZWQsIHRoaXMgd2lsbCBjb250YWluIHRoZSBleHBpcmF0aW9uIGRhdGVcbiAgICogICAgICAgICAgICAgKDxjb2RlPmV4cGlyeS1kYXRlPC9jb2RlPikgYW5kIHJ1bGUgSUQgKDxjb2RlPnJ1bGUtaWQ8L2NvZGU+KS4gVGhlIHZhbHVlIG9mXG4gICAqICAgICAgICAgICAgIDxjb2RlPnJ1bGUtaWQ8L2NvZGU+IGlzIFVSTC1lbmNvZGVkLjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIEV4cGlyYXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5FbnRpdHkgdGFnIHRoYXQgaWRlbnRpZmllcyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QncyBkYXRhLiBPYmplY3RzIHdpdGggZGlmZmVyZW50XG4gICAqICAgICAgICAgIG9iamVjdCBkYXRhIHdpbGwgaGF2ZSBkaWZmZXJlbnQgZW50aXR5IHRhZ3MuIFRoZSBlbnRpdHkgdGFnIGlzIGFuIG9wYXF1ZSBzdHJpbmcuIFRoZSBlbnRpdHlcbiAgICogICAgICAgICAgdGFnIG1heSBvciBtYXkgbm90IGJlIGFuIE1ENSBkaWdlc3Qgb2YgdGhlIG9iamVjdCBkYXRhLiBJZiB0aGUgZW50aXR5IHRhZyBpcyBub3QgYW4gTUQ1XG4gICAqICAgICAgICAgIGRpZ2VzdCBvZiB0aGUgb2JqZWN0IGRhdGEsIGl0IHdpbGwgY29udGFpbiBvbmUgb3IgbW9yZSBub25oZXhhZGVjaW1hbCBjaGFyYWN0ZXJzIGFuZC9vclxuICAgKiAgICAgICAgICB3aWxsIGNvbnNpc3Qgb2YgbGVzcyB0aGFuIDMyIG9yIG1vcmUgdGhhbiAzMiBoZXhhZGVjaW1hbCBkaWdpdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0XG4gICAqICAgICAgICAgIGhvdyB0aGUgZW50aXR5IHRhZyBpcyBjYWxjdWxhdGVkLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2NoZWNraW5nLW9iamVjdC1pbnRlZ3JpdHkuaHRtbFwiPkNoZWNraW5nIG9iamVjdFxuICAgKiAgICAgICAgICAgICBpbnRlZ3JpdHk8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgRVRhZz86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBiYXNlNjQtZW5jb2RlZCwgMzItYml0IENSQzMyIGNoZWNrc3VtIG9mIHRoZSBvYmplY3QuIFRoaXMgd2lsbCBvbmx5IGJlIHByZXNlbnQgaWYgaXQgd2FzIHVwbG9hZGVkXG4gICAqICAgICB3aXRoIHRoZSBvYmplY3QuIFdoZW4geW91IHVzZSBhbiBBUEkgb3BlcmF0aW9uIG9uIGFuIG9iamVjdCB0aGF0IHdhcyB1cGxvYWRlZCB1c2luZyBtdWx0aXBhcnQgdXBsb2FkcywgdGhpcyB2YWx1ZSBtYXkgbm90IGJlIGEgZGlyZWN0IGNoZWNrc3VtIHZhbHVlIG9mIHRoZSBmdWxsIG9iamVjdC4gSW5zdGVhZCwgaXQncyBhIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHRoZSBjaGVja3N1bSB2YWx1ZXMgb2YgZWFjaCBpbmRpdmlkdWFsIHBhcnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyBjaGVja3N1bXMgYXJlIGNhbGN1bGF0ZWRcbiAgICogICAgIHdpdGggbXVsdGlwYXJ0IHVwbG9hZHMsIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvY2hlY2tpbmctb2JqZWN0LWludGVncml0eS5odG1sI2xhcmdlLW9iamVjdC1jaGVja3N1bXNcIj5cbiAgICogICAgIENoZWNraW5nIG9iamVjdCBpbnRlZ3JpdHk8L2E+IGluIHRoZSA8aT5BbWF6b24gUzMgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgQ2hlY2tzdW1DUkMzMj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBiYXNlNjQtZW5jb2RlZCwgMzItYml0IENSQzMyQyBjaGVja3N1bSBvZiB0aGUgb2JqZWN0LiBUaGlzIHdpbGwgb25seSBiZSBwcmVzZW50IGlmIGl0IHdhcyB1cGxvYWRlZFxuICAgKiAgICAgd2l0aCB0aGUgb2JqZWN0LiBXaGVuIHlvdSB1c2UgYW4gQVBJIG9wZXJhdGlvbiBvbiBhbiBvYmplY3QgdGhhdCB3YXMgdXBsb2FkZWQgdXNpbmcgbXVsdGlwYXJ0IHVwbG9hZHMsIHRoaXMgdmFsdWUgbWF5IG5vdCBiZSBhIGRpcmVjdCBjaGVja3N1bSB2YWx1ZSBvZiB0aGUgZnVsbCBvYmplY3QuIEluc3RlYWQsIGl0J3MgYSBjYWxjdWxhdGlvbiBiYXNlZCBvbiB0aGUgY2hlY2tzdW0gdmFsdWVzIG9mIGVhY2ggaW5kaXZpZHVhbCBwYXJ0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgY2hlY2tzdW1zIGFyZSBjYWxjdWxhdGVkXG4gICAqICAgICB3aXRoIG11bHRpcGFydCB1cGxvYWRzLCBzZWUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2NoZWNraW5nLW9iamVjdC1pbnRlZ3JpdHkuaHRtbCNsYXJnZS1vYmplY3QtY2hlY2tzdW1zXCI+XG4gICAqICAgICBDaGVja2luZyBvYmplY3QgaW50ZWdyaXR5PC9hPiBpbiB0aGUgPGk+QW1hem9uIFMzIFVzZXIgR3VpZGU8L2k+LjwvcD5cbiAgICovXG4gIENoZWNrc3VtQ1JDMzJDPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIGJhc2U2NC1lbmNvZGVkLCAxNjAtYml0IFNIQS0xIGRpZ2VzdCBvZiB0aGUgb2JqZWN0LiBUaGlzIHdpbGwgb25seSBiZSBwcmVzZW50IGlmIGl0IHdhcyB1cGxvYWRlZFxuICAgKiAgICAgd2l0aCB0aGUgb2JqZWN0LiBXaGVuIHlvdSB1c2UgdGhlIEFQSSBvcGVyYXRpb24gb24gYW4gb2JqZWN0IHRoYXQgd2FzIHVwbG9hZGVkIHVzaW5nIG11bHRpcGFydCB1cGxvYWRzLCB0aGlzIHZhbHVlIG1heSBub3QgYmUgYSBkaXJlY3QgY2hlY2tzdW0gdmFsdWUgb2YgdGhlIGZ1bGwgb2JqZWN0LiBJbnN0ZWFkLCBpdCdzIGEgY2FsY3VsYXRpb24gYmFzZWQgb24gdGhlIGNoZWNrc3VtIHZhbHVlcyBvZiBlYWNoIGluZGl2aWR1YWwgcGFydC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGNoZWNrc3VtcyBhcmUgY2FsY3VsYXRlZFxuICAgKiAgICAgd2l0aCBtdWx0aXBhcnQgdXBsb2Fkcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWwjbGFyZ2Utb2JqZWN0LWNoZWNrc3Vtc1wiPlxuICAgKiAgICAgQ2hlY2tpbmcgb2JqZWN0IGludGVncml0eTwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqL1xuICBDaGVja3N1bVNIQTE/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgYmFzZTY0LWVuY29kZWQsIDI1Ni1iaXQgU0hBLTI1NiBkaWdlc3Qgb2YgdGhlIG9iamVjdC4gVGhpcyB3aWxsIG9ubHkgYmUgcHJlc2VudCBpZiBpdCB3YXMgdXBsb2FkZWRcbiAgICogICAgIHdpdGggdGhlIG9iamVjdC4gV2hlbiB5b3UgdXNlIGFuIEFQSSBvcGVyYXRpb24gb24gYW4gb2JqZWN0IHRoYXQgd2FzIHVwbG9hZGVkIHVzaW5nIG11bHRpcGFydCB1cGxvYWRzLCB0aGlzIHZhbHVlIG1heSBub3QgYmUgYSBkaXJlY3QgY2hlY2tzdW0gdmFsdWUgb2YgdGhlIGZ1bGwgb2JqZWN0LiBJbnN0ZWFkLCBpdCdzIGEgY2FsY3VsYXRpb24gYmFzZWQgb24gdGhlIGNoZWNrc3VtIHZhbHVlcyBvZiBlYWNoIGluZGl2aWR1YWwgcGFydC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGNoZWNrc3VtcyBhcmUgY2FsY3VsYXRlZFxuICAgKiAgICAgd2l0aCBtdWx0aXBhcnQgdXBsb2Fkcywgc2VlIDxhIGhyZWY9XCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9jaGVja2luZy1vYmplY3QtaW50ZWdyaXR5Lmh0bWwjbGFyZ2Utb2JqZWN0LWNoZWNrc3Vtc1wiPlxuICAgKiAgICAgQ2hlY2tpbmcgb2JqZWN0IGludGVncml0eTwvYT4gaW4gdGhlIDxpPkFtYXpvbiBTMyBVc2VyIEd1aWRlPC9pPi48L3A+XG4gICAqL1xuICBDaGVja3N1bVNIQTI1Nj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGFsZ29yaXRobSB1c2VkIHdoZW4gc3RvcmluZyB0aGlzIG9iamVjdCBpbiBBbWF6b24gUzMgKGZvciBleGFtcGxlLFxuICAgKiAgICAgICAgICAgICA8Y29kZT5BRVMyNTY8L2NvZGU+LCA8Y29kZT5hd3M6a21zPC9jb2RlPikuPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+Rm9yIGRpcmVjdG9yeSBidWNrZXRzLCBvbmx5IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBBbWF6b24gUzMgbWFuYWdlZCBrZXlzIChTU0UtUzMpICg8Y29kZT5BRVMyNTY8L2NvZGU+KSBpcyBzdXBwb3J0ZWQuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbj86IFNlcnZlclNpZGVFbmNyeXB0aW9uO1xuICAvKipcbiAgICogPHA+VmVyc2lvbiBJRCBvZiB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QsIGluIGNhc2UgdGhlIGJ1Y2tldCBoYXMgdmVyc2lvbmluZyB0dXJuZWRcbiAgICogICAgICAgICAgb24uPC9wPlxuICAgKiAgICAgICAgICA8bm90ZT5cbiAgICogICAgICAgICAgICAgPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yeSBidWNrZXRzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgVmVyc2lvbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+SWYgcHJlc2VudCwgaW5kaWNhdGVzIHRoZSBJRCBvZiB0aGUgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBjdXN0b21lciBtYW5hZ2VkIGtleVxuICAgKiAgICAgICAgICB0aGF0IHdhcyB1c2VkIGZvciB0aGUgb2JqZWN0LjwvcD5cbiAgICogICAgICAgICAgPG5vdGU+XG4gICAqICAgICAgICAgICAgIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXJlY3RvcnkgYnVja2V0cy48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIFNTRUtNU0tleUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+SW5kaWNhdGVzIHdoZXRoZXIgdGhlIG11bHRpcGFydCB1cGxvYWQgdXNlcyBhbiBTMyBCdWNrZXQgS2V5IGZvciBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uXG4gICAqICAgICAgICAgIHdpdGggS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBrZXlzIChTU0UtS01TKS48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBCdWNrZXRLZXlFbmFibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIDxwPklmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSByZXF1ZXN0ZXIgd2FzIHN1Y2Nlc3NmdWxseSBjaGFyZ2VkIGZvciB0aGVcbiAgICogICAgICAgICAgcmVxdWVzdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlyZWN0b3J5IGJ1Y2tldHMuPC9wPlxuICAgKiAgICAgICAgICA8L25vdGU+XG4gICAqL1xuICBSZXF1ZXN0Q2hhcmdlZD86IFJlcXVlc3RDaGFyZ2VkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dFxuICBleHRlbmRzIENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkT3V0cHV0LFxuICBNZXRhZGF0YUJlYXJlciB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VJZGVudGlmaWVyIHtcbiAgLyoqXG4gICAqIDxwPlRoZSA8Y29kZT5zaGEyNTY8L2NvZGU+IGRpZ2VzdCBvZiB0aGUgaW1hZ2UgbWFuaWZlc3QuPC9wPlxuICAgKi9cbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgdGFnIHVzZWQgZm9yIHRoZSBpbWFnZS48L3A+XG4gICAqL1xuICBpbWFnZVRhZz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmliZUltYWdlc0ZpbHRlciB7XG4gIC8qKlxuICAgKiA8cD5UaGUgdGFnIHN0YXR1cyB3aXRoIHdoaWNoIHRvIGZpbHRlciB5b3VyIDxhPkRlc2NyaWJlSW1hZ2VzPC9hPiByZXN1bHRzLiBZb3VcbiAgICogICAgICAgICAgICAgY2FuIGZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHdoZXRoZXIgdGhleSBhcmUgPGNvZGU+VEFHR0VEPC9jb2RlPiBvclxuICAgKiAgICAgICAgICAgICAgICAgPGNvZGU+VU5UQUdHRUQ8L2NvZGU+LjwvcD5cbiAgICovXG4gIHRhZ1N0YXR1cz86IFRhZ1N0YXR1cztcbn1cblxuZXhwb3J0IGNvbnN0IFRhZ1N0YXR1cyA9IHtcbiAgQU5ZOiAnQU5ZJyxcbiAgVEFHR0VEOiAnVEFHR0VEJyxcbiAgVU5UQUdHRUQ6ICdVTlRBR0dFRCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBUYWdTdGF0dXMgPSAodHlwZW9mIFRhZ1N0YXR1cylba2V5b2YgdHlwZW9mIFRhZ1N0YXR1c107XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVJbWFnZXNSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIDxwPlRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIGFjY291bnQgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IGNvbnRhaW5zIHRoZSByZXBvc2l0b3J5IGluXG4gICAqICAgICAgICAgICAgIHdoaWNoIHRvIGRlc2NyaWJlIGltYWdlcy4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgcmVnaXN0cnksIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5IGlzIGFzc3VtZWQuPC9wPlxuICAgKi9cbiAgcmVnaXN0cnlJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSByZXBvc2l0b3J5IHRoYXQgY29udGFpbnMgdGhlIGltYWdlcyB0byBkZXNjcmliZS48L3A+XG4gICAqL1xuICByZXBvc2l0b3J5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogPHA+VGhlIGxpc3Qgb2YgaW1hZ2UgSURzIGZvciB0aGUgcmVxdWVzdGVkIHJlcG9zaXRvcnkuPC9wPlxuICAgKi9cbiAgaW1hZ2VJZHM/OiBJbWFnZUlkZW50aWZpZXJbXTtcbiAgLyoqXG4gICAqIDxwPlRoZSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlIHJldHVybmVkIGZyb20gYSBwcmV2aW91cyBwYWdpbmF0ZWRcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPkRlc2NyaWJlSW1hZ2VzPC9jb2RlPiByZXF1ZXN0IHdoZXJlIDxjb2RlPm1heFJlc3VsdHM8L2NvZGU+IHdhcyB1c2VkIGFuZCB0aGVcbiAgICogICAgICAgICAgICAgcmVzdWx0cyBleGNlZWRlZCB0aGUgdmFsdWUgb2YgdGhhdCBwYXJhbWV0ZXIuIFBhZ2luYXRpb24gY29udGludWVzIGZyb20gdGhlIGVuZCBvZiB0aGVcbiAgICogICAgICAgICAgICAgcHJldmlvdXMgcmVzdWx0cyB0aGF0IHJldHVybmVkIHRoZSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlLiBUaGlzIHZhbHVlIGlzXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHJlc3VsdHMgdG8gcmV0dXJuLiBUaGlzIG9wdGlvbiBjYW5ub3QgYmVcbiAgICogICAgICAgICAgICAgdXNlZCB3aGVuIHlvdSBzcGVjaWZ5IGltYWdlcyB3aXRoIDxjb2RlPmltYWdlSWRzPC9jb2RlPi48L3A+XG4gICAqL1xuICBuZXh0VG9rZW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5UaGUgbWF4aW11bSBudW1iZXIgb2YgcmVwb3NpdG9yeSByZXN1bHRzIHJldHVybmVkIGJ5IDxjb2RlPkRlc2NyaWJlSW1hZ2VzPC9jb2RlPiBpblxuICAgKiAgICAgICAgICAgICBwYWdpbmF0ZWQgb3V0cHV0LiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHVzZWQsIDxjb2RlPkRlc2NyaWJlSW1hZ2VzPC9jb2RlPiBvbmx5IHJldHVybnNcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPm1heFJlc3VsdHM8L2NvZGU+IHJlc3VsdHMgaW4gYSBzaW5nbGUgcGFnZSBhbG9uZyB3aXRoIGEgPGNvZGU+bmV4dFRva2VuPC9jb2RlPlxuICAgKiAgICAgICAgICAgICByZXNwb25zZSBlbGVtZW50LiBUaGUgcmVtYWluaW5nIHJlc3VsdHMgb2YgdGhlIGluaXRpYWwgcmVxdWVzdCBjYW4gYmUgc2VlbiBieSBzZW5kaW5nXG4gICAqICAgICAgICAgICAgIGFub3RoZXIgPGNvZGU+RGVzY3JpYmVJbWFnZXM8L2NvZGU+IHJlcXVlc3Qgd2l0aCB0aGUgcmV0dXJuZWQgPGNvZGU+bmV4dFRva2VuPC9jb2RlPlxuICAgKiAgICAgICAgICAgICB2YWx1ZS4gVGhpcyB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAxIGFuZCAxMDAwLiBJZiB0aGlzXG4gICAqICAgICAgICAgICAgIHBhcmFtZXRlciBpcyBub3QgdXNlZCwgdGhlbiA8Y29kZT5EZXNjcmliZUltYWdlczwvY29kZT4gcmV0dXJucyB1cCB0b1xuICAgKiAgICAgICAgICAgICAxMDAgcmVzdWx0cyBhbmQgYSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlLCBpZiBhcHBsaWNhYmxlLiBUaGlzXG4gICAqICAgICAgICAgICAgIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aGVuIHlvdSBzcGVjaWZ5IGltYWdlcyB3aXRoIDxjb2RlPmltYWdlSWRzPC9jb2RlPi48L3A+XG4gICAqL1xuICBtYXhSZXN1bHRzPzogbnVtYmVyO1xuICAvKipcbiAgICogPHA+VGhlIGZpbHRlciBrZXkgYW5kIHZhbHVlIHdpdGggd2hpY2ggdG8gZmlsdGVyIHlvdXIgPGNvZGU+RGVzY3JpYmVJbWFnZXM8L2NvZGU+XG4gICAqICAgICAgICAgICAgIHJlc3VsdHMuPC9wPlxuICAgKi9cbiAgZmlsdGVyPzogRGVzY3JpYmVJbWFnZXNGaWx0ZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQgZXh0ZW5kcyBEZXNjcmliZUltYWdlc1JlcXVlc3Qge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCBleHRlbmRzIERlc2NyaWJlSW1hZ2VzUmVzcG9uc2UsIE1ldGFkYXRhQmVhcmVyIHtcbn1cblxuZXhwb3J0IGNvbnN0IFNjYW5TdGF0dXMgPSB7XG4gIEFDVElWRTogJ0FDVElWRScsXG4gIENPTVBMRVRFOiAnQ09NUExFVEUnLFxuICBGQUlMRUQ6ICdGQUlMRUQnLFxuICBGSU5ESU5HU19VTkFWQUlMQUJMRTogJ0ZJTkRJTkdTX1VOQVZBSUxBQkxFJyxcbiAgSU5fUFJPR1JFU1M6ICdJTl9QUk9HUkVTUycsXG4gIFBFTkRJTkc6ICdQRU5ESU5HJyxcbiAgU0NBTl9FTElHSUJJTElUWV9FWFBJUkVEOiAnU0NBTl9FTElHSUJJTElUWV9FWFBJUkVEJyxcbiAgVU5TVVBQT1JURURfSU1BR0U6ICdVTlNVUFBPUlRFRF9JTUFHRScsXG4gIExJTUlUX0VYQ0VFREVEOiAnTElNSVRfRVhDRUVERUQnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2NhblN0YXR1cyA9ICh0eXBlb2YgU2NhblN0YXR1cylba2V5b2YgdHlwZW9mIFNjYW5TdGF0dXNdO1xuXG5leHBvcnQgY29uc3QgRmluZGluZ1NldmVyaXR5ID0ge1xuICBDUklUSUNBTDogJ0NSSVRJQ0FMJyxcbiAgSElHSDogJ0hJR0gnLFxuICBJTkZPUk1BVElPTkFMOiAnSU5GT1JNQVRJT05BTCcsXG4gIExPVzogJ0xPVycsXG4gIE1FRElVTTogJ01FRElVTScsXG4gIFVOREVGSU5FRDogJ1VOREVGSU5FRCcsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqL1xuZXhwb3J0IHR5cGUgRmluZGluZ1NldmVyaXR5ID0gKHR5cGVvZiBGaW5kaW5nU2V2ZXJpdHkpW2tleW9mIHR5cGVvZiBGaW5kaW5nU2V2ZXJpdHldO1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU2NhblN0YXR1cyB7XG4gIC8qKlxuICAgKiA8cD5UaGUgY3VycmVudCBzdGF0ZSBvZiBhbiBpbWFnZSBzY2FuLjwvcD5cbiAgICovXG4gIHN0YXR1cz86IFNjYW5TdGF0dXM7XG4gIC8qKlxuICAgKiA8cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlIHNjYW4gc3RhdHVzLjwvcD5cbiAgICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU2NhbkZpbmRpbmdzU3VtbWFyeSB7XG4gIC8qKlxuICAgKiA8cD5UaGUgdGltZSBvZiB0aGUgbGFzdCBjb21wbGV0ZWQgaW1hZ2Ugc2Nhbi48L3A+XG4gICAqL1xuICBpbWFnZVNjYW5Db21wbGV0ZWRBdD86IERhdGU7XG4gIC8qKlxuICAgKiA8cD5UaGUgdGltZSB3aGVuIHRoZSB2dWxuZXJhYmlsaXR5IGRhdGEgd2FzIGxhc3Qgc2Nhbm5lZC48L3A+XG4gICAqL1xuICB2dWxuZXJhYmlsaXR5U291cmNlVXBkYXRlZEF0PzogRGF0ZTtcbiAgLyoqXG4gICAqIDxwPlRoZSBpbWFnZSB2dWxuZXJhYmlsaXR5IGNvdW50cywgc29ydGVkIGJ5IHNldmVyaXR5LjwvcD5cbiAgICovXG4gIGZpbmRpbmdTZXZlcml0eUNvdW50cz86IFBhcnRpYWw8UmVjb3JkPEZpbmRpbmdTZXZlcml0eSwgbnVtYmVyPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VEZXRhaWwge1xuICAvKipcbiAgICogPHA+VGhlIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudCBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZ2lzdHJ5IHRvIHdoaWNoIHRoaXMgaW1hZ2UgYmVsb25ncy48L3A+XG4gICAqL1xuICByZWdpc3RyeUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG8gd2hpY2ggdGhpcyBpbWFnZSBiZWxvbmdzLjwvcD5cbiAgICovXG4gIHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIDxjb2RlPnNoYTI1NjwvY29kZT4gZGlnZXN0IG9mIHRoZSBpbWFnZSBtYW5pZmVzdC48L3A+XG4gICAqL1xuICBpbWFnZURpZ2VzdD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBsaXN0IG9mIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW1hZ2UuPC9wPlxuICAgKi9cbiAgaW1hZ2VUYWdzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiA8cD5UaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBpbWFnZSBpbiB0aGUgcmVwb3NpdG9yeS48L3A+XG4gICAqICAgICAgICAgIDxwPklmIHRoZSBpbWFnZSBpcyBhIG1hbmlmZXN0IGxpc3QsIHRoaXMgd2lsbCBiZSB0aGUgbWF4IHNpemUgb2YgYWxsIG1hbmlmZXN0cyBpbiB0aGVcbiAgICogICAgICAgICAgICAgbGlzdC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5CZWdpbm5pbmcgd2l0aCBEb2NrZXIgdmVyc2lvbiAxLjksIHRoZSBEb2NrZXIgY2xpZW50IGNvbXByZXNzZXMgaW1hZ2UgbGF5ZXJzXG4gICAqICAgICAgICAgICAgICAgICBiZWZvcmUgcHVzaGluZyB0aGVtIHRvIGEgVjIgRG9ja2VyIHJlZ2lzdHJ5LiBUaGUgb3V0cHV0IG9mIHRoZSA8Y29kZT5kb2NrZXJcbiAgICogICAgICAgICAgICAgICAgICAgICBpbWFnZXM8L2NvZGU+IGNvbW1hbmQgc2hvd3MgdGhlIHVuY29tcHJlc3NlZCBpbWFnZSBzaXplLCBzbyBpdCBtYXkgcmV0dXJuIGFcbiAgICogICAgICAgICAgICAgICAgIGxhcmdlciBpbWFnZSBzaXplIHRoYW4gdGhlIGltYWdlIHNpemVzIHJldHVybmVkIGJ5IDxhPkRlc2NyaWJlSW1hZ2VzPC9hPi48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIGltYWdlU2l6ZUluQnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiA8cD5UaGUgZGF0ZSBhbmQgdGltZSwgZXhwcmVzc2VkIGluIHN0YW5kYXJkIEphdmFTY3JpcHQgZGF0ZSBmb3JtYXQsIGF0IHdoaWNoIHRoZSBjdXJyZW50XG4gICAqICAgICAgICAgICAgIGltYWdlIHdhcyBwdXNoZWQgdG8gdGhlIHJlcG9zaXRvcnkuIDwvcD5cbiAgICovXG4gIGltYWdlUHVzaGVkQXQ/OiBEYXRlO1xuICAvKipcbiAgICogPHA+VGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNjYW4uPC9wPlxuICAgKi9cbiAgaW1hZ2VTY2FuU3RhdHVzPzogSW1hZ2VTY2FuU3RhdHVzO1xuICAvKipcbiAgICogPHA+QSBzdW1tYXJ5IG9mIHRoZSBsYXN0IGNvbXBsZXRlZCBpbWFnZSBzY2FuLjwvcD5cbiAgICovXG4gIGltYWdlU2NhbkZpbmRpbmdzU3VtbWFyeT86IEltYWdlU2NhbkZpbmRpbmdzU3VtbWFyeTtcbiAgLyoqXG4gICAqIDxwPlRoZSBtZWRpYSB0eXBlIG9mIHRoZSBpbWFnZSBtYW5pZmVzdC48L3A+XG4gICAqL1xuICBpbWFnZU1hbmlmZXN0TWVkaWFUeXBlPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIGFydGlmYWN0IG1lZGlhIHR5cGUgb2YgdGhlIGltYWdlLjwvcD5cbiAgICovXG4gIGFydGlmYWN0TWVkaWFUeXBlPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIGRhdGUgYW5kIHRpbWUsIGV4cHJlc3NlZCBpbiBzdGFuZGFyZCBKYXZhU2NyaXB0IGRhdGUgZm9ybWF0LCB3aGVuIEFtYXpvbiBFQ1IgcmVjb3JkZWRcbiAgICogICAgICAgICAgICAgdGhlIGxhc3QgaW1hZ2UgcHVsbC48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5BbWF6b24gRUNSIHJlZnJlc2hlcyB0aGUgbGFzdCBpbWFnZSBwdWxsIHRpbWVzdGFtcCBhdCBsZWFzdCBvbmNlIGV2ZXJ5IDI0IGhvdXJzLiBGb3JcbiAgICogICAgICAgICAgICAgICAgIGV4YW1wbGUsIGlmIHlvdSBwdWxsIGFuIGltYWdlIG9uY2UgYSBkYXkgdGhlbiB0aGUgPGNvZGU+bGFzdFJlY29yZGVkUHVsbFRpbWU8L2NvZGU+XG4gICAqICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgd2lsbCBpbmRpY2F0ZSB0aGUgZXhhY3QgdGltZSB0aGF0IHRoZSBpbWFnZSB3YXMgbGFzdCBwdWxsZWQuIEhvd2V2ZXIsIGlmXG4gICAqICAgICAgICAgICAgICAgICB5b3UgcHVsbCBhbiBpbWFnZSBvbmNlIGFuIGhvdXIsIGJlY2F1c2UgQW1hem9uIEVDUiByZWZyZXNoZXMgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgPGNvZGU+bGFzdFJlY29yZGVkUHVsbFRpbWU8L2NvZGU+IHRpbWVzdGFtcCBhdCBsZWFzdCBvbmNlIGV2ZXJ5IDI0IGhvdXJzLCB0aGVcbiAgICogICAgICAgICAgICAgICAgIHJlc3VsdCBtYXkgbm90IGJlIHRoZSBleGFjdCB0aW1lIHRoYXQgdGhlIGltYWdlIHdhcyBsYXN0IHB1bGxlZC48L3A+XG4gICAqICAgICAgICAgIDwvbm90ZT5cbiAgICovXG4gIGxhc3RSZWNvcmRlZFB1bGxUaW1lPzogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmliZUltYWdlc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIDxwPkEgbGlzdCBvZiA8YT5JbWFnZURldGFpbDwvYT4gb2JqZWN0cyB0aGF0IGNvbnRhaW4gZGF0YSBhYm91dCB0aGVcbiAgICogICAgICAgICAgICAgaW1hZ2UuPC9wPlxuICAgKi9cbiAgaW1hZ2VEZXRhaWxzPzogSW1hZ2VEZXRhaWxbXTtcbiAgLyoqXG4gICAqIDxwPlRoZSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlIHRvIGluY2x1ZGUgaW4gYSBmdXR1cmUgPGNvZGU+RGVzY3JpYmVJbWFnZXM8L2NvZGU+XG4gICAqICAgICAgICAgICAgIHJlcXVlc3QuIFdoZW4gdGhlIHJlc3VsdHMgb2YgYSA8Y29kZT5EZXNjcmliZUltYWdlczwvY29kZT4gcmVxdWVzdCBleGNlZWRcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPm1heFJlc3VsdHM8L2NvZGU+LCB0aGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBuZXh0IHBhZ2Ugb2ZcbiAgICogICAgICAgICAgICAgcmVzdWx0cy4gVGhpcyB2YWx1ZSBpcyA8Y29kZT5udWxsPC9jb2RlPiB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHJlc3VsdHMgdG9cbiAgICogICAgICAgICAgICAgcmV0dXJuLjwvcD5cbiAgICovXG4gIG5leHRUb2tlbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmliZVJlcG9zaXRvcmllc1JlcXVlc3Qge1xuICAvKipcbiAgICogPHA+VGhlIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudCBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZ2lzdHJ5IHRoYXQgY29udGFpbnMgdGhlIHJlcG9zaXRvcmllcyB0byBiZVxuICAgKiAgICAgICAgICAgICBkZXNjcmliZWQuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHJlZ2lzdHJ5LCB0aGUgZGVmYXVsdCByZWdpc3RyeSBpcyBhc3N1bWVkLjwvcD5cbiAgICovXG4gIHJlZ2lzdHJ5SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiA8cD5BIGxpc3Qgb2YgcmVwb3NpdG9yaWVzIHRvIGRlc2NyaWJlLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBvbWl0dGVkLCB0aGVuIGFsbFxuICAgKiAgICAgICAgICAgICByZXBvc2l0b3JpZXMgaW4gYSByZWdpc3RyeSBhcmUgZGVzY3JpYmVkLjwvcD5cbiAgICovXG4gIHJlcG9zaXRvcnlOYW1lcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogPHA+VGhlIDxjb2RlPm5leHRUb2tlbjwvY29kZT4gdmFsdWUgcmV0dXJuZWQgZnJvbSBhIHByZXZpb3VzIHBhZ2luYXRlZFxuICAgKiAgICAgICAgICAgICAgICAgPGNvZGU+RGVzY3JpYmVSZXBvc2l0b3JpZXM8L2NvZGU+IHJlcXVlc3Qgd2hlcmUgPGNvZGU+bWF4UmVzdWx0czwvY29kZT4gd2FzIHVzZWQgYW5kXG4gICAqICAgICAgICAgICAgIHRoZSByZXN1bHRzIGV4Y2VlZGVkIHRoZSB2YWx1ZSBvZiB0aGF0IHBhcmFtZXRlci4gUGFnaW5hdGlvbiBjb250aW51ZXMgZnJvbSB0aGUgZW5kIG9mXG4gICAqICAgICAgICAgICAgIHRoZSBwcmV2aW91cyByZXN1bHRzIHRoYXQgcmV0dXJuZWQgdGhlIDxjb2RlPm5leHRUb2tlbjwvY29kZT4gdmFsdWUuIFRoaXMgdmFsdWUgaXNcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgcmVzdWx0cyB0byByZXR1cm4uIFRoaXMgb3B0aW9uIGNhbm5vdCBiZVxuICAgKiAgICAgICAgICAgICB1c2VkIHdoZW4geW91IHNwZWNpZnkgcmVwb3NpdG9yaWVzIHdpdGggPGNvZGU+cmVwb3NpdG9yeU5hbWVzPC9jb2RlPi48L3A+XG4gICAqICAgICAgICAgIDxub3RlPlxuICAgKiAgICAgICAgICAgICA8cD5UaGlzIHRva2VuIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9wYXF1ZSBpZGVudGlmaWVyIHRoYXQgaXMgb25seSB1c2VkIHRvXG4gICAqICAgICAgICAgICAgICAgICByZXRyaWV2ZSB0aGUgbmV4dCBpdGVtcyBpbiBhIGxpc3QgYW5kIG5vdCBmb3Igb3RoZXIgcHJvZ3JhbW1hdGljIHB1cnBvc2VzLjwvcD5cbiAgICogICAgICAgICAgPC9ub3RlPlxuICAgKi9cbiAgbmV4dFRva2VuPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIHJlcG9zaXRvcnkgcmVzdWx0cyByZXR1cm5lZCBieSA8Y29kZT5EZXNjcmliZVJlcG9zaXRvcmllczwvY29kZT5cbiAgICogICAgICAgICAgICAgaW4gcGFnaW5hdGVkIG91dHB1dC4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCA8Y29kZT5EZXNjcmliZVJlcG9zaXRvcmllczwvY29kZT4gb25seVxuICAgKiAgICAgICAgICAgICByZXR1cm5zIDxjb2RlPm1heFJlc3VsdHM8L2NvZGU+IHJlc3VsdHMgaW4gYSBzaW5nbGUgcGFnZSBhbG9uZyB3aXRoIGFcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPm5leHRUb2tlbjwvY29kZT4gcmVzcG9uc2UgZWxlbWVudC4gVGhlIHJlbWFpbmluZyByZXN1bHRzIG9mIHRoZSBpbml0aWFsXG4gICAqICAgICAgICAgICAgIHJlcXVlc3QgY2FuIGJlIHNlZW4gYnkgc2VuZGluZyBhbm90aGVyIDxjb2RlPkRlc2NyaWJlUmVwb3NpdG9yaWVzPC9jb2RlPiByZXF1ZXN0IHdpdGhcbiAgICogICAgICAgICAgICAgdGhlIHJldHVybmVkIDxjb2RlPm5leHRUb2tlbjwvY29kZT4gdmFsdWUuIFRoaXMgdmFsdWUgY2FuIGJlIGJldHdlZW4gMVxuICAgKiAgICAgICAgICAgICBhbmQgMTAwMC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQsIHRoZW5cbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPkRlc2NyaWJlUmVwb3NpdG9yaWVzPC9jb2RlPiByZXR1cm5zIHVwIHRvIDEwMCByZXN1bHRzIGFuZCBhXG4gICAqICAgICAgICAgICAgICAgICA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlLCBpZiBhcHBsaWNhYmxlLiBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aGVuIHlvdVxuICAgKiAgICAgICAgICAgICBzcGVjaWZ5IHJlcG9zaXRvcmllcyB3aXRoIDxjb2RlPnJlcG9zaXRvcnlOYW1lczwvY29kZT4uPC9wPlxuICAgKi9cbiAgbWF4UmVzdWx0cz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCBleHRlbmRzIERlc2NyaWJlUmVwb3NpdG9yaWVzUmVxdWVzdCB7XG59XG5cbmV4cG9ydCBjb25zdCBJbWFnZVRhZ011dGFiaWxpdHkgPSB7XG4gIElNTVVUQUJMRTogJ0lNTVVUQUJMRScsXG4gIE1VVEFCTEU6ICdNVVRBQkxFJyxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICovXG5leHBvcnQgdHlwZSBJbWFnZVRhZ011dGFiaWxpdHkgPSAodHlwZW9mIEltYWdlVGFnTXV0YWJpbGl0eSlba2V5b2YgdHlwZW9mIEltYWdlVGFnTXV0YWJpbGl0eV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogPHA+VGhlIHNldHRpbmcgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgaW1hZ2VzIGFyZSBzY2FubmVkIGFmdGVyIGJlaW5nIHB1c2hlZCB0byBhXG4gICAqICAgICAgICAgICAgIHJlcG9zaXRvcnkuIElmIHNldCB0byA8Y29kZT50cnVlPC9jb2RlPiwgaW1hZ2VzIHdpbGwgYmUgc2Nhbm5lZCBhZnRlciBiZWluZyBwdXNoZWQuIElmXG4gICAqICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgZGVmYXVsdCB0byA8Y29kZT5mYWxzZTwvY29kZT4gYW5kIGltYWdlcyB3aWxsXG4gICAqICAgICAgICAgICAgIG5vdCBiZSBzY2FubmVkIHVubGVzcyBhIHNjYW4gaXMgbWFudWFsbHkgc3RhcnRlZCB3aXRoIHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdGFydEltYWdlU2Nhbi5odG1sXCI+QVBJX1N0YXJ0SW1hZ2VTY2FuPC9hPiBBUEkuPC9wPlxuICAgKi9cbiAgc2Nhbk9uUHVzaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBFbmNyeXB0aW9uVHlwZSA9IHtcbiAgQUVTMjU2OiAnQUVTMjU2JyxcbiAgS01TOiAnS01TJyxcbiAgS01TX0RTU0U6ICdLTVNfRFNTRScsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqL1xuZXhwb3J0IHR5cGUgRW5jcnlwdGlvblR5cGUgPSAodHlwZW9mIEVuY3J5cHRpb25UeXBlKVtrZXlvZiB0eXBlb2YgRW5jcnlwdGlvblR5cGVdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY3J5cHRpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIDxwPlRoZSBlbmNyeXB0aW9uIHR5cGUgdG8gdXNlLjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgeW91IHVzZSB0aGUgPGNvZGU+S01TPC9jb2RlPiBlbmNyeXB0aW9uIHR5cGUsIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3NpdG9yeSB3aWxsXG4gICAqICAgICAgICAgICAgIGJlIGVuY3J5cHRlZCB1c2luZyBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgc3RvcmVkIGluIEtNUy4gV2hlbiB5b3VcbiAgICogICAgICAgICAgICAgdXNlIEtNUyB0byBlbmNyeXB0IHlvdXIgZGF0YSwgeW91IGNhbiBlaXRoZXIgdXNlIHRoZSBkZWZhdWx0IEFtYXpvbiBXZWIgU2VydmljZXMgbWFuYWdlZCBLTVMga2V5XG4gICAqICAgICAgICAgICAgIGZvciBBbWF6b24gRUNSLCBvciBzcGVjaWZ5IHlvdXIgb3duIEtNUyBrZXksIHdoaWNoIHlvdSBhbHJlYWR5IGNyZWF0ZWQuPC9wPlxuICAgKiAgICAgICAgICA8cD5JZiB5b3UgdXNlIHRoZSA8Y29kZT5LTVNfRFNTRTwvY29kZT4gZW5jcnlwdGlvbiB0eXBlLCB0aGUgY29udGVudHMgb2YgdGhlIHJlcG9zaXRvcnlcbiAgICogICAgICAgICAgICAgd2lsbCBiZSBlbmNyeXB0ZWQgd2l0aCB0d28gbGF5ZXJzIG9mIGVuY3J5cHRpb24gdXNpbmcgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB3aXRoIHRoZVxuICAgKiAgICAgICAgICAgICBLTVMgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBzdG9yZWQgaW4gS01TLiBTaW1pbGFyIHRvIHRoZSA8Y29kZT5LTVM8L2NvZGU+IGVuY3J5cHRpb24gdHlwZSwgeW91XG4gICAqICAgICAgICAgICAgIGNhbiBlaXRoZXIgdXNlIHRoZSBkZWZhdWx0IEFtYXpvbiBXZWIgU2VydmljZXMgbWFuYWdlZCBLTVMga2V5IGZvciBBbWF6b24gRUNSLCBvciBzcGVjaWZ5IHlvdXIgb3duIEtNU1xuICAgKiAgICAgICAgICAgICBrZXksIHdoaWNoIHlvdSd2ZSBhbHJlYWR5IGNyZWF0ZWQuIDwvcD5cbiAgICogICAgICAgICAgPHA+SWYgeW91IHVzZSB0aGUgPGNvZGU+QUVTMjU2PC9jb2RlPiBlbmNyeXB0aW9uIHR5cGUsIEFtYXpvbiBFQ1IgdXNlcyBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uXG4gICAqICAgICAgICAgICAgIHdpdGggQW1hem9uIFMzLW1hbmFnZWQgZW5jcnlwdGlvbiBrZXlzIHdoaWNoIGVuY3J5cHRzIHRoZSBpbWFnZXMgaW4gdGhlIHJlcG9zaXRvcnkgdXNpbmcgYW5cbiAgICogICAgICAgICAgICAgQUVTMjU2IGVuY3J5cHRpb24gYWxnb3JpdGhtLjwvcD5cbiAgICogICAgICAgICAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUi9sYXRlc3QvdXNlcmd1aWRlL2VuY3J5cHRpb24tYXQtcmVzdC5odG1sXCI+QW1hem9uIEVDUiBlbmNyeXB0aW9uIGF0XG4gICAqICAgICAgICAgICAgIHJlc3Q8L2E+IGluIHRoZSA8aT5BbWF6b24gRWxhc3RpYyBDb250YWluZXIgUmVnaXN0cnkgVXNlciBHdWlkZTwvaT4uPC9wPlxuICAgKi9cbiAgZW5jcnlwdGlvblR5cGU6IEVuY3J5cHRpb25UeXBlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiA8cD5JZiB5b3UgdXNlIHRoZSA8Y29kZT5LTVM8L2NvZGU+IGVuY3J5cHRpb24gdHlwZSwgc3BlY2lmeSB0aGUgS01TIGtleSB0byB1c2UgZm9yXG4gICAqICAgICAgICAgICAgIGVuY3J5cHRpb24uIFRoZSBhbGlhcywga2V5IElELCBvciBmdWxsIEFSTiBvZiB0aGUgS01TIGtleSBjYW4gYmUgc3BlY2lmaWVkLiBUaGUga2V5XG4gICAqICAgICAgICAgICAgIG11c3QgZXhpc3QgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSByZXBvc2l0b3J5LiBJZiBubyBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdFxuICAgKiAgICAgICAgICAgICBBbWF6b24gV2ViIFNlcnZpY2VzIG1hbmFnZWQgS01TIGtleSBmb3IgQW1hem9uIEVDUiB3aWxsIGJlIHVzZWQuPC9wPlxuICAgKi9cbiAga21zS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9zaXRvcnkge1xuICAvKipcbiAgICogPHA+VGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIHRoYXQgaWRlbnRpZmllcyB0aGUgcmVwb3NpdG9yeS4gVGhlIEFSTiBjb250YWlucyB0aGUgPGNvZGU+YXJuOmF3czplY3I8L2NvZGU+IG5hbWVzcGFjZSwgZm9sbG93ZWQgYnkgdGhlIHJlZ2lvbiBvZiB0aGVcbiAgICogICAgIHJlcG9zaXRvcnksIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudCBJRCBvZiB0aGUgcmVwb3NpdG9yeSBvd25lciwgcmVwb3NpdG9yeSBuYW1lc3BhY2UsIGFuZCByZXBvc2l0b3J5IG5hbWUuXG4gICAqICAgICBGb3IgZXhhbXBsZSwgPGNvZGU+YXJuOmF3czplY3I6cmVnaW9uOjAxMjM0NTY3ODkxMDpyZXBvc2l0b3J5LW5hbWVzcGFjZS9yZXBvc2l0b3J5LW5hbWU8L2NvZGU+LjwvcD5cbiAgICovXG4gIHJlcG9zaXRvcnlBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIDxwPlRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIGFjY291bnQgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyeSB0aGF0IGNvbnRhaW5zIHRoZSByZXBvc2l0b3J5LjwvcD5cbiAgICovXG4gIHJlZ2lzdHJ5SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIDxwPlRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5LjwvcD5cbiAgICovXG4gIHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgVVJJIGZvciB0aGUgcmVwb3NpdG9yeS4gWW91IGNhbiB1c2UgdGhpcyBVUkkgZm9yIGNvbnRhaW5lciBpbWFnZSA8Y29kZT5wdXNoPC9jb2RlPlxuICAgKiAgICAgICAgICAgICBhbmQgPGNvZGU+cHVsbDwvY29kZT4gb3BlcmF0aW9ucy48L3A+XG4gICAqL1xuICByZXBvc2l0b3J5VXJpPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgZGF0ZSBhbmQgdGltZSwgaW4gSmF2YVNjcmlwdCBkYXRlIGZvcm1hdCwgd2hlbiB0aGUgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZC48L3A+XG4gICAqL1xuICBjcmVhdGVkQXQ/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgdGFnIG11dGFiaWxpdHkgc2V0dGluZyBmb3IgdGhlIHJlcG9zaXRvcnkuPC9wPlxuICAgKi9cbiAgaW1hZ2VUYWdNdXRhYmlsaXR5PzogSW1hZ2VUYWdNdXRhYmlsaXR5O1xuXG4gIC8qKlxuICAgKiA8cD5UaGUgaW1hZ2Ugc2Nhbm5pbmcgY29uZmlndXJhdGlvbiBmb3IgYSByZXBvc2l0b3J5LjwvcD5cbiAgICovXG4gIGltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uPzogSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIDxwPlRoZSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSByZXBvc2l0b3J5LiBUaGlzIGRldGVybWluZXMgaG93IHRoZSBjb250ZW50cyBvZlxuICAgKiAgICAgICAgICAgICB5b3VyIHJlcG9zaXRvcnkgYXJlIGVuY3J5cHRlZCBhdCByZXN0LjwvcD5cbiAgICovXG4gIGVuY3J5cHRpb25Db25maWd1cmF0aW9uPzogRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVSZXBvc2l0b3JpZXNSZXNwb25zZSB7XG4gIC8qKlxuICAgKiA8cD5BIGxpc3Qgb2YgcmVwb3NpdG9yeSBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdmFsaWQgcmVwb3NpdG9yaWVzLjwvcD5cbiAgICovXG4gIHJlcG9zaXRvcmllcz86IFJlcG9zaXRvcnlbXTtcbiAgLyoqXG4gICAqIDxwPlRoZSA8Y29kZT5uZXh0VG9rZW48L2NvZGU+IHZhbHVlIHRvIGluY2x1ZGUgaW4gYSBmdXR1cmVcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPkRlc2NyaWJlUmVwb3NpdG9yaWVzPC9jb2RlPiByZXF1ZXN0LiBXaGVuIHRoZSByZXN1bHRzIG9mIGFcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPkRlc2NyaWJlUmVwb3NpdG9yaWVzPC9jb2RlPiByZXF1ZXN0IGV4Y2VlZCA8Y29kZT5tYXhSZXN1bHRzPC9jb2RlPiwgdGhpcyB2YWx1ZVxuICAgKiAgICAgICAgICAgICBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHMuIFRoaXMgdmFsdWUgaXMgPGNvZGU+bnVsbDwvY29kZT4gd2hlblxuICAgKiAgICAgICAgICAgICB0aGVyZSBhcmUgbm8gbW9yZSByZXN1bHRzIHRvIHJldHVybi48L3A+XG4gICAqL1xuICBuZXh0VG9rZW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kT3V0cHV0XG4gIGV4dGVuZHMgRGVzY3JpYmVSZXBvc2l0b3JpZXNSZXNwb25zZSxcbiAgTWV0YWRhdGFCZWFyZXIge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEF1dGhvcml6YXRpb25Ub2tlblJlcXVlc3Qge1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICpcbiAgICogPHA+QSBsaXN0IG9mIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudCBJRHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyaWVzIGZvciB3aGljaCB0byBnZXRcbiAgICogICAgICAgICAgICAgQXV0aG9yaXphdGlvbkRhdGEgb2JqZWN0cy4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgcmVnaXN0cnksIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5IGlzIGFzc3VtZWQuPC9wPlxuICAgKi9cbiAgcmVnaXN0cnlJZHM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQgZXh0ZW5kcyBHZXRBdXRob3JpemF0aW9uVG9rZW5SZXF1ZXN0IHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRob3JpemF0aW9uRGF0YSB7XG4gIC8qKlxuICAgKiA8cD5BIGJhc2U2NC1lbmNvZGVkIHN0cmluZyB0aGF0IGNvbnRhaW5zIGF1dGhvcml6YXRpb24gZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBBbWF6b24gRUNSXG4gICAqICAgICAgICAgICAgIHJlZ2lzdHJ5LiBXaGVuIHRoZSBzdHJpbmcgaXMgZGVjb2RlZCwgaXQgaXMgcHJlc2VudGVkIGluIHRoZSBmb3JtYXRcbiAgICogICAgICAgICAgICAgICAgIDxjb2RlPnVzZXI6cGFzc3dvcmQ8L2NvZGU+IGZvciBwcml2YXRlIHJlZ2lzdHJ5IGF1dGhlbnRpY2F0aW9uIHVzaW5nIDxjb2RlPmRvY2tlclxuICAgKiAgICAgICAgICAgICAgICAgbG9naW48L2NvZGU+LjwvcD5cbiAgICovXG4gIGF1dGhvcml6YXRpb25Ub2tlbj86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBVbml4IHRpbWUgaW4gc2Vjb25kcyBhbmQgbWlsbGlzZWNvbmRzIHdoZW4gdGhlIGF1dGhvcml6YXRpb24gdG9rZW4gZXhwaXJlcy5cbiAgICogICAgICAgICAgICAgQXV0aG9yaXphdGlvbiB0b2tlbnMgYXJlIHZhbGlkIGZvciAxMiBob3Vycy48L3A+XG4gICAqL1xuICBleHBpcmVzQXQ/OiBEYXRlO1xuICAvKipcbiAgICogPHA+VGhlIHJlZ2lzdHJ5IFVSTCB0byB1c2UgZm9yIHRoaXMgYXV0aG9yaXphdGlvbiB0b2tlbiBpbiBhIDxjb2RlPmRvY2tlciBsb2dpbjwvY29kZT5cbiAgICogICAgICAgICAgICAgY29tbWFuZC4gVGhlIEFtYXpvbiBFQ1IgcmVnaXN0cnkgVVJMIGZvcm1hdCBpc1xuICAgKiAgICAgICAgIDxjb2RlPmh0dHBzOi8vYXdzX2FjY291bnRfaWQuZGtyLmVjci5yZWdpb24uYW1hem9uYXdzLmNvbTwvY29kZT4uIEZvciBleGFtcGxlLFxuICAgKiAgICAgICAgIDxjb2RlPmh0dHBzOi8vMDEyMzQ1Njc4OTEwLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb208L2NvZGU+Li4gPC9wPlxuICAgKi9cbiAgcHJveHlFbmRwb2ludD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRBdXRob3JpemF0aW9uVG9rZW5SZXNwb25zZSB7XG4gIC8qKlxuICAgKiA8cD5BIGxpc3Qgb2YgYXV0aG9yaXphdGlvbiB0b2tlbiBkYXRhIG9iamVjdHMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgPGNvZGU+cmVnaXN0cnlJZHM8L2NvZGU+IHZhbHVlcyBpbiB0aGUgcmVxdWVzdC48L3A+XG4gICAqL1xuICBhdXRob3JpemF0aW9uRGF0YT86IEF1dGhvcml6YXRpb25EYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dFxuICBleHRlbmRzIEdldEF1dGhvcml6YXRpb25Ub2tlblJlc3BvbnNlLFxuICBNZXRhZGF0YUJlYXJlciB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2VjcmV0VmFsdWVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIDxwPlRoZSBBUk4gb3IgbmFtZSBvZiB0aGUgc2VjcmV0IHRvIHJldHJpZXZlLiBUbyByZXRyaWV2ZSBhIHNlY3JldCBmcm9tIGFub3RoZXIgYWNjb3VudCwgeW91IG11c3QgdXNlIGFuIEFSTi48L3A+XG4gICAqICAgICAgICAgIDxwPkZvciBhbiBBUk4sIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IGEgY29tcGxldGUgQVJOIHJhdGhlclxuICAgKiAgICAgICB0aGFuIGEgcGFydGlhbCBBUk4uIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlY3JldHNtYW5hZ2VyL2xhdGVzdC91c2VyZ3VpZGUvdHJvdWJsZXNob290Lmh0bWwjQVJOX3NlY3JldG5hbWVoeXBoZW5cIj5GaW5kaW5nIGEgc2VjcmV0IGZyb20gYSBwYXJ0aWFsIEFSTjwvYT4uPC9wPlxuICAgKi9cbiAgU2VjcmV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIDxwPlRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgc2VjcmV0IHRvIHJldHJpZXZlLiBJZlxuICAgKiAgICAgICB5b3UgaW5jbHVkZSBib3RoIHRoaXMgcGFyYW1ldGVyIGFuZCA8Y29kZT5WZXJzaW9uU3RhZ2U8L2NvZGU+LCB0aGUgdHdvIHBhcmFtZXRlcnMgbXVzdCByZWZlclxuICAgKiAgICAgICB0byB0aGUgc2FtZSBzZWNyZXQgdmVyc2lvbi4gSWYgeW91IGRvbid0IHNwZWNpZnkgZWl0aGVyIGEgPGNvZGU+VmVyc2lvblN0YWdlPC9jb2RlPiBvclxuICAgKiAgICAgICAgIDxjb2RlPlZlcnNpb25JZDwvY29kZT4sIHRoZW4gU2VjcmV0cyBNYW5hZ2VyIHJldHVybnMgdGhlIDxjb2RlPkFXU0NVUlJFTlQ8L2NvZGU+IHZlcnNpb24uPC9wPlxuICAgKiAgICAgICAgICA8cD5UaGlzIHZhbHVlIGlzIHR5cGljYWxseSBhIDxhIGhyZWY9XCJodHRwczovL3dpa2lwZWRpYS5vcmcvd2lraS9Vbml2ZXJzYWxseV91bmlxdWVfaWRlbnRpZmllclwiPlVVSUQtdHlwZTwvYT4gdmFsdWUgd2l0aFxuICAgKiAgICAgICAzMiBoZXhhZGVjaW1hbCBkaWdpdHMuPC9wPlxuICAgKi9cbiAgVmVyc2lvbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIHN0YWdpbmcgbGFiZWwgb2YgdGhlIHZlcnNpb24gb2YgdGhlIHNlY3JldCB0byByZXRyaWV2ZS4gPC9wPlxuICAgKiAgICAgICAgICA8cD5TZWNyZXRzIE1hbmFnZXIgdXNlcyBzdGFnaW5nIGxhYmVscyB0byBrZWVwIHRyYWNrIG9mIGRpZmZlcmVudCB2ZXJzaW9ucyBkdXJpbmcgdGhlIHJvdGF0aW9uIHByb2Nlc3MuXG4gICAqICAgICAgIElmIHlvdSBpbmNsdWRlIGJvdGggdGhpcyBwYXJhbWV0ZXIgYW5kIDxjb2RlPlZlcnNpb25JZDwvY29kZT4sIHRoZSB0d28gcGFyYW1ldGVycyBtdXN0IHJlZmVyXG4gICAqICAgICAgIHRvIHRoZSBzYW1lIHNlY3JldCB2ZXJzaW9uLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBlaXRoZXIgYSA8Y29kZT5WZXJzaW9uU3RhZ2U8L2NvZGU+IG9yXG4gICAqICAgICAgIDxjb2RlPlZlcnNpb25JZDwvY29kZT4sIFNlY3JldHMgTWFuYWdlciByZXR1cm5zIHRoZSA8Y29kZT5BV1NDVVJSRU5UPC9jb2RlPiB2ZXJzaW9uLjwvcD5cbiAgICovXG4gIFZlcnNpb25TdGFnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCBleHRlbmRzIEdldFNlY3JldFZhbHVlUmVxdWVzdCB7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2VjcmV0VmFsdWVSZXNwb25zZSB7XG4gIC8qKlxuICAgKiA8cD5UaGUgQVJOIG9mIHRoZSBzZWNyZXQuPC9wPlxuICAgKi9cbiAgQVJOPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIGZyaWVuZGx5IG5hbWUgb2YgdGhlIHNlY3JldC48L3A+XG4gICAqL1xuICBOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+VGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgc2VjcmV0LjwvcD5cbiAgICovXG4gIFZlcnNpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIDxwPlRoZSBkZWNyeXB0ZWQgc2VjcmV0IHZhbHVlLCBpZiB0aGUgc2VjcmV0IHZhbHVlIHdhcyBvcmlnaW5hbGx5IHByb3ZpZGVkIGFzXG4gICAqICAgICAgIGJpbmFyeSBkYXRhIGluIHRoZSBmb3JtIG9mIGEgYnl0ZSBhcnJheS4gV2hlbiB5b3UgcmV0cmlldmUgYSA8Y29kZT5TZWNyZXRCaW5hcnk8L2NvZGU+IHVzaW5nIHRoZSBIVFRQIEFQSSwgdGhlIFB5dGhvbiBTREssIG9yIHRoZSBBbWF6b24gV2ViIFNlcnZpY2VzIENMSSwgdGhlIHZhbHVlIGlzIEJhc2U2NC1lbmNvZGVkLiBPdGhlcndpc2UsIGl0IGlzIG5vdCBlbmNvZGVkLjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgdGhlIHNlY3JldCB3YXMgY3JlYXRlZCBieSB1c2luZyB0aGUgU2VjcmV0cyBNYW5hZ2VyIGNvbnNvbGUsIG9yIGlmIHRoZSBzZWNyZXQgdmFsdWUgd2FzXG4gICAqICAgICAgIG9yaWdpbmFsbHkgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIHRoZW4gdGhpcyBmaWVsZCBpcyBvbWl0dGVkLiBUaGUgc2VjcmV0IHZhbHVlIGFwcGVhcnMgaW5cbiAgICogICAgICAgPGNvZGU+U2VjcmV0U3RyaW5nPC9jb2RlPiBpbnN0ZWFkLjwvcD5cbiAgICogICAgICAgICAgPHA+U2Vuc2l0aXZlOiBUaGlzIGZpZWxkIGNvbnRhaW5zIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgc28gdGhlIHNlcnZpY2UgZG9lcyBub3QgaW5jbHVkZSBpdCBpbiBDbG91ZFRyYWlsIGxvZyBlbnRyaWVzLiBJZiB5b3UgY3JlYXRlIHlvdXIgb3duIGxvZyBlbnRyaWVzLCB5b3UgbXVzdCBhbHNvIGF2b2lkIGxvZ2dpbmcgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmllbGQuPC9wPlxuICAgKi9cbiAgU2VjcmV0QmluYXJ5PzogVWludDhBcnJheTtcbiAgLyoqXG4gICAqIDxwPlRoZSBkZWNyeXB0ZWQgc2VjcmV0IHZhbHVlLCBpZiB0aGUgc2VjcmV0IHZhbHVlIHdhcyBvcmlnaW5hbGx5IHByb3ZpZGVkIGFzIGEgc3RyaW5nIG9yXG4gICAqICAgICAgIHRocm91Z2ggdGhlIFNlY3JldHMgTWFuYWdlciBjb25zb2xlLjwvcD5cbiAgICogICAgICAgICAgPHA+SWYgdGhpcyBzZWNyZXQgd2FzIGNyZWF0ZWQgYnkgdXNpbmcgdGhlIGNvbnNvbGUsIHRoZW4gU2VjcmV0cyBNYW5hZ2VyIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYXMgYVxuICAgKiAgICAgICBKU09OIHN0cnVjdHVyZSBvZiBrZXkvdmFsdWUgcGFpcnMuIDwvcD5cbiAgICogICAgICAgICAgPHA+U2Vuc2l0aXZlOiBUaGlzIGZpZWxkIGNvbnRhaW5zIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgc28gdGhlIHNlcnZpY2UgZG9lcyBub3QgaW5jbHVkZSBpdCBpbiBDbG91ZFRyYWlsIGxvZyBlbnRyaWVzLiBJZiB5b3UgY3JlYXRlIHlvdXIgb3duIGxvZyBlbnRyaWVzLCB5b3UgbXVzdCBhbHNvIGF2b2lkIGxvZ2dpbmcgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmllbGQuPC9wPlxuICAgKi9cbiAgU2VjcmV0U3RyaW5nPzogc3RyaW5nO1xuICAvKipcbiAgICogPHA+QSBsaXN0IG9mIGFsbCBvZiB0aGUgc3RhZ2luZyBsYWJlbHMgY3VycmVudGx5IGF0dGFjaGVkIHRvIHRoaXMgdmVyc2lvbiBvZiB0aGVcbiAgICogICAgICAgc2VjcmV0LjwvcD5cbiAgICovXG4gIFZlcnNpb25TdGFnZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIDxwPlRoZSBkYXRlIGFuZCB0aW1lIHRoYXQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzZWNyZXQgd2FzIGNyZWF0ZWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5XG4gICAqICAgICAgIHdoaWNoIHZlcnNpb24gaW4gPGNvZGU+VmVyc2lvbklkPC9jb2RlPiBvciA8Y29kZT5WZXJzaW9uU3RhZ2U8L2NvZGU+LCB0aGVuIFNlY3JldHMgTWFuYWdlciB1c2VzIHRoZVxuICAgKiAgICAgICA8Y29kZT5BV1NDVVJSRU5UPC9jb2RlPiB2ZXJzaW9uLjwvcD5cbiAgICovXG4gIENyZWF0ZWREYXRlPzogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQgZXh0ZW5kcyBHZXRTZWNyZXRWYWx1ZVJlc3BvbnNlLCBNZXRhZGF0YUJlYXJlciB7XG59XG4iXX0=
|
package/lib/aws.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AssumeRoleCommandInput } from '@aws-sdk/client-sts';
|
|
2
|
-
import { CompleteMultipartUploadCommandOutput, DescribeImagesCommandInput, DescribeImagesCommandOutput, DescribeRepositoriesCommandInput, DescribeRepositoriesCommandOutput, GetAuthorizationTokenCommandInput, GetAuthorizationTokenCommandOutput, GetBucketEncryptionCommandInput, GetBucketEncryptionCommandOutput, GetBucketLocationCommandInput, GetBucketLocationCommandOutput, GetSecretValueCommandInput, GetSecretValueCommandOutput, ListObjectsV2CommandInput, ListObjectsV2CommandOutput, PutObjectCommandInput } from './aws-types';
|
|
1
|
+
import type { AssumeRoleCommandInput } from '@aws-sdk/client-sts';
|
|
2
|
+
import type { CompleteMultipartUploadCommandOutput, DescribeImagesCommandInput, DescribeImagesCommandOutput, DescribeRepositoriesCommandInput, DescribeRepositoriesCommandOutput, GetAuthorizationTokenCommandInput, GetAuthorizationTokenCommandOutput, GetBucketEncryptionCommandInput, GetBucketEncryptionCommandOutput, GetBucketLocationCommandInput, GetBucketLocationCommandOutput, GetSecretValueCommandInput, GetSecretValueCommandOutput, ListObjectsV2CommandInput, ListObjectsV2CommandOutput, PutObjectCommandInput } from './aws-types';
|
|
3
3
|
export type AssumeRoleAdditionalOptions = Partial<Omit<AssumeRoleCommandInput, 'ExternalId' | 'RoleArn'>>;
|
|
4
4
|
export interface IS3Client {
|
|
5
5
|
getBucketEncryption(input: GetBucketEncryptionCommandInput): Promise<GetBucketEncryptionCommandOutput>;
|