@data-client/rest 0.16.5 → 0.16.6

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RFbmRwb2ludFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRW5kcG9pbnRFeHRyYU9wdGlvbnMsXG4gIEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRmV0Y2hGdW5jdGlvbixcbiAgUmVzb2x2ZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbGxlY3Rpb24gfSBmcm9tICcuL2V4dHJhY3RDb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7XG4gIE9wdGlvbnNUb0JvZHlBcmd1bWVudCxcbiAgT3B0aW9uc1RvRnVuY3Rpb24sXG59IGZyb20gJy4vT3B0aW9uc1RvRnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgUGF0aEFyZ3MsIFNvZnRQYXRoQXJncyB9IGZyb20gJy4vcGF0aFR5cGVzLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL1Jlc3RFbmRwb2ludFR5cGVIZWxwLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXN0SW5zdGFuY2VCYXNlPFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE0gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICB9ID0geyBwYXRoOiBzdHJpbmcgfSxcbj4gZXh0ZW5kcyBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlPEYsIFMsIE0+IHtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNib2R5ICovXG4gIHJlYWRvbmx5IGJvZHk/OiAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogYW55O1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NlYXJjaFBhcmFtcyAqL1xuICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gPyBPWydzZWFyY2hQYXJhbXMnXVxuICA6IC8vIHVua25vd24gaXMgaWRlbnRpdHkgd2l0aCAnJicgdHlwZSBvcGVyYXRvclxuICAgIHVua25vd247XG5cbiAgLyoqIFBhdHRlcm4gdG8gY29uc3RydWN0IHVybCBiYXNlZCBvbiBVcmwgUGFyYW1ldGVyc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogT1sncGF0aCddO1xuICAvKiogUHJlcGVuZGVkIHRvIGFsbCB1cmxzXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCN1cmxQcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHVybFByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQ7XG4gIC8qKiBIVFRQIHJlcXVlc3QgbWV0aG9kXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNtZXRob2RcbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogKE8gJiB7IG1ldGhvZDogc3RyaW5nIH0pWydtZXRob2QnXTtcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZDtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0aW9uRmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuXG4gIC8qIGZldGNoIGxpZmVjeWNsZXMgKi9cbiAgLyogYmVmb3JlLWZldGNoICovXG4gIC8qKiBCdWlsZHMgdGhlIFVSTCB0byBmZXRjaFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdXJsXG4gICAqL1xuICB1cmwoLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgLyoqIEVuY29kZSB0aGUgc2VhcmNoUGFyYW1zIGNvbXBvbmVudCBvZiB0aGUgdXJsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNzZWFyY2hUb1N0cmluZ1xuICAgKi9cbiAgc2VhcmNoVG9TdHJpbmcoc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nO1xuICAvKiogUHJlcGFyZXMgUmVxdWVzdEluaXQgdXNlZCBpbiBmZXRjaC4gVGhpcyBpcyBzZW50IHRvIGZldGNoUmVzcG9uc2UoKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0UmVxdWVzdEluaXRcbiAgICovXG4gIGdldFJlcXVlc3RJbml0KFxuICAgIHRoaXM6IGFueSxcbiAgICBib2R5PzogUmVxdWVzdEluaXRbJ2JvZHknXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBQcm9taXNlPFJlcXVlc3RJbml0PiB8IFJlcXVlc3RJbml0O1xuICAvKiogQ2FsbGVkIGJ5IGdldFJlcXVlc3RJbml0IHRvIGRldGVybWluZSBIVFRQIEhlYWRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldEhlYWRlcnNcbiAgICovXG4gIGdldEhlYWRlcnMoaGVhZGVyczogSGVhZGVyc0luaXQpOiBQcm9taXNlPEhlYWRlcnNJbml0PiB8IEhlYWRlcnNJbml0O1xuICAvKiBhZnRlci1mZXRjaCAqL1xuICAvKiogUGVyZm9ybXMgdGhlIGZldGNoIGNhbGxcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2ZldGNoUmVzcG9uc2VcbiAgICovXG4gIGZldGNoUmVzcG9uc2UoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+O1xuICAvKiogVGFrZXMgdGhlIFJlc3BvbnNlIGFuZCBwYXJzZXMgdmlhIC50ZXh0KCkgb3IgLmpzb24oKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFyc2VSZXNwb25zZVxuICAgKi9cbiAgcGFyc2VSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPGFueT47XG4gIC8qKiBQZXJmb3JtIGFueSB0cmFuc2Zvcm1zIHdpdGggdGhlIHBhcnNlZCByZXN1bHQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwcm9jZXNzXG4gICAqL1xuICBwcm9jZXNzKHZhbHVlOiBhbnksIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBSZXNvbHZlVHlwZTxGPjtcblxuICAvKiB1dGlsaXRpZXMgKi9cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgKGZldGNoKSBrZXkgbWF0Y2hlcyB0aGlzIGVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdGVzdEtleVxuICAgKi9cbiAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyogZXh0ZW5kZXJzICovXG4gIC8vIFRPRE86IGZpZ3VyZSBvdXQgYmV0dGVyIHdheSB0aGFuIHdyYXBwaW5nIHdob2xlIG9wdGlvbnMgaW4gUmVhZG9ubHk8PiArIG1ha2luZyBPIGV4dGVuZCBmcm9tIHt9XG4gIC8vICAgICAgIHRoaXMgaXMganVzdCBhIGhhY2sgdG8gaGFuZGxlIHdoZW4gbm8gbWVtYmVycyBvZiBQYXJ0aWFsUmVzdEdlbmVyaWNzIGFyZSBwcmVzZW50XG4gIC8vICAgICAgIE5vdGU6IFVzaW5nIG92ZXJsb2FkaW5nIChsaWtlIHBhZ2luYXRlZCBkaWQpIHN0cnVnZ2xlcyBiZWNhdXNlIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHdheSBvZiBkaXN0aW5ndWlzaGluZyBvbmVcbiAgLy8gICAgICAgc2hvdWxkIGJlIHVzZWQgZnJvbSB0aGUgb3RoZXIgKGR1ZSB0byBzYW1lIHByb2JsZW0gd2l0aCBldmVyeSBtZW1iZXIgYmVpbmcgcGFydGlhbClcbiAgLyoqIENyZWF0ZXMgYSBjaGlsZCBlbmRwb2ludCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyB3aGlsZSBvdmVycmlkaW5nIHByb3ZpZGVkIGBvcHRpb25zYC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2V4dGVuZFxuICAgKi9cbiAgZXh0ZW5kPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlLFxuICAgIEV4dGVuZE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzIHwge30sXG4gID4oXG4gICAgdGhpczogRSxcbiAgICBvcHRpb25zOiBSZWFkb25seTxcbiAgICAgIFJlc3RFbmRwb2ludEV4dGVuZE9wdGlvbnM8RXh0ZW5kT3B0aW9ucywgRSwgRj4gJiBFeHRlbmRPcHRpb25zXG4gICAgPixcbiAgKTogUmVzdEV4dGVuZGVkRW5kcG9pbnQ8RXh0ZW5kT3B0aW9ucywgRT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEluc3RhbmNlPFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE0gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nIH0sXG4+IGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGLCBTLCBNLCBPPiB7XG4gIC8qKiBDcmVhdGVzIGFuIEVuZHBvaW50IHRvIGFwcGVuZCB0aGUgbmV4dCBwYWdlIGV4dGVuZGluZyBhIGxpc3QgZm9yIHBhZ2luYXRpb25cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhZ2luYXRlZFxuICAgKi9cbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBBIGV4dGVuZHMgYW55W10sXG4gID4oXG4gICAgdGhpczogRSxcbiAgICByZW1vdmVDdXJzb3I6ICguLi5hcmdzOiBBKSA9PiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0sXG4gICk6IFBhZ2luYXRpb25FbmRwb2ludDxFLCBBPjtcbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBDIGV4dGVuZHMgc3RyaW5nLFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgY3Vyc29yRmllbGQ6IEMsXG4gICk6IFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PEUsIEM+O1xuICAvKiogQ29uY2F0aW5hdGUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzIChHRVQpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNnZXRQYWdlXG4gICAqL1xuICBnZXRQYWdlOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddIGV4dGVuZHMgc3RyaW5nID9cbiAgICAgIFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PFxuICAgICAgICBGICYgeyBzY2hlbWE6IFM7IHNpZGVFZmZlY3Q6IE0gfSAmIE8sXG4gICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICA+XG4gICAgOiB1bmRlZmluZWRcbiAgOiB1bmRlZmluZWQ7XG4gIC8qKiBDcmVhdGUgYSBuZXcgaXRlbSAoUE9TVCkgYW5kIGBwdXNoYCB0byB0aGUgZW5kXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwdXNoXG4gICAqL1xuICBwdXNoOiBBZGRFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+WydwdXNoJ10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIENyZWF0ZSBhIG5ldyBpdGVtIChQT1NUKSBhbmQgYHVuc2hpZnRgIHRvIHRoZSBiZWdpbm5pbmdcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Vuc2hpZnRcbiAgICovXG4gIHVuc2hpZnQ6IEFkZEVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3Vuc2hpZnQnXSxcbiAgICBFeGNsdWRlPE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5cbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPltdXG4gICAgICAgIHwgRm9ybURhdGE7XG4gICAgfVxuICA+O1xuICAvKiogQ3JlYXRlIG5ldyBpdGVtKHMpIChQT1NUKSBhbmQgYE9iamVjdC5hc3NpZ25gIG1lcmdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNhc3NpZ25cbiAgICovXG4gIGFzc2lnbjogQWRkRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPixcbiAgICBFeGNsdWRlPE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6IFJlY29yZDxzdHJpbmcsIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+PiB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIFJlbW92ZSBpdGVtKHMpIChQQVRDSCkgZnJvbSBjb2xsZWN0aW9uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNyZW1vdmVcbiAgICovXG4gIHJlbW92ZTogUmVtb3ZlRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPlsncmVtb3ZlJ10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIE1vdmUgaXRlbSBiZXR3ZWVuIGNvbGxlY3Rpb25zIChQQVRDSCkgLSByZW1vdmVzIGZyb20gb2xkLCBhZGRzIHRvIG5ld1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbW92ZVxuICAgKi9cbiAgbW92ZTogTW92ZUVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ21vdmUnXSxcbiAgICB7XG4gICAgICBwYXRoOiAnbW92ZVBhdGgnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21vdmVQYXRoJ10gJiBzdHJpbmcgOiBPWydwYXRoJ107XG4gICAgICBib2R5OiBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPiB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50RXh0ZW5kT3B0aW9uczxcbiAgTyBleHRlbmRzIFBhcnRpYWxSZXN0R2VuZXJpY3MsXG4gIEUgZXh0ZW5kcyB7IGJvZHk/OiBhbnk7IHBhdGg/OiBzdHJpbmc7IHNjaGVtYT86IFNjaGVtYTsgbWV0aG9kPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9IFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIE9wdGlvbnNUb0Z1bmN0aW9uPE8sIEUsIEY+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NjaGVtYSddLCBTY2hlbWEgfCB1bmRlZmluZWQ+XG4gIDogRVsnc2NoZW1hJ11cbj4gJlxuICBQYXJ0aWFsPFxuICAgIE9taXQ8XG4gICAgICBFLFxuICAgICAgS2V5b2ZSZXN0RW5kcG9pbnQgfCBrZXlvZiBQYXJ0aWFsUmVzdEdlbmVyaWNzIHwga2V5b2YgUmVzdEVuZHBvaW50T3B0aW9uc1xuICAgID5cbiAgPjtcblxudHlwZSBPcHRpb25zVG9SZXN0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzLFxuICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZSAmIHsgYm9keT86IGFueTsgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9XG4gICdwYXRoJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgICBPcHRpb25zVG9Cb2R5QXJndW1lbnQ8XG4gICAgICAgICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPIDogRSxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD47XG4gICAgICAgIGJvZHk6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFWydwYWdpbmF0aW9uRmllbGQnXTtcbiAgICAgIH1cbiAgICA+XG4gIDogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgUmVzdFR5cGU8XG4gICAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgICAgTyxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRVsncGF0aCddO1xuICAgICAgICBib2R5OiBPWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICBFLFxuICAgICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddXG4gICAgICA+LFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICBPWydwcm9jZXNzJ10gZXh0ZW5kcyB7fSA/IFJldHVyblR5cGU8T1sncHJvY2VzcyddPiA6IFJlc29sdmVUeXBlPEY+LFxuICAgICAge1xuICAgICAgICBwYXRoOiBFWydwYXRoJ107XG4gICAgICAgIGJvZHk6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiBPWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiBSZXN0SW5zdGFuY2U8XG4gICAgICBGLFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdwYXRoJyBleHRlbmRzIGtleW9mIE8gPyBFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPlxuICAgICAgICA6IEVbJ3BhdGgnXTtcbiAgICAgICAgYm9keTogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9bJ2JvZHknXSA6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gPyBPWydzZWFyY2hQYXJhbXMnXVxuICAgICAgICA6IEVbJ3NlYXJjaFBhcmFtcyddO1xuICAgICAgICBtZXRob2Q6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ107XG4gICAgICAgIHBhZ2luYXRpb25GaWVsZDogJ3BhZ2luYXRpb25GaWVsZCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgICBPWydwYWdpbmF0aW9uRmllbGQnXVxuICAgICAgICA6IEVbJ3BhZ2luYXRpb25GaWVsZCddO1xuICAgICAgfVxuICAgID47XG5cbmV4cG9ydCB0eXBlIFJlc3RFeHRlbmRlZEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyxcbiAgRSBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2UgJiB7IGdldFBhZ2U/OiB1bmtub3duIH0sXG4+ID0gT3B0aW9uc1RvUmVzdEVuZHBvaW50PFxuICBPLFxuICBFICZcbiAgICAoRSBleHRlbmRzIHsgZ2V0UGFnZTogeyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9IH0gP1xuICAgICAgeyBwYWdpbmF0aW9uRmllbGQ6IEVbJ2dldFBhZ2UnXVsncGFnaW5hdGlvbkZpZWxkJ10gfVxuICAgIDogdW5rbm93biksXG4gIFJlc3RJbnN0YW5jZTxcbiAgICAoXG4gICAgICAuLi5hcmdzOiBQYXJhbWV0ZXJzPEU+XG4gICAgKSA9PiBPWydwcm9jZXNzJ10gZXh0ZW5kcyB7fSA/IFByb21pc2U8UmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+PlxuICAgIDogUmV0dXJuVHlwZTxFPixcbiAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICA6IEVbJ3NpZGVFZmZlY3QnXVxuICA+XG4+ICZcbiAgT21pdDxPLCBLZXlvZlJlc3RFbmRwb2ludD4gJlxuICBPbWl0PEUsIEtleW9mUmVzdEVuZHBvaW50IHwga2V5b2YgTz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbFJlc3RHZW5lcmljcyB7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGF0aCAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NjaGVtYSAqL1xuICByZWFkb25seSBzY2hlbWE/OiBTY2hlbWEgfCB1bmRlZmluZWQ7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbWV0aG9kICovXG4gIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNib2R5ICovXG4gIGJvZHk/OiBhbnk7XG4gIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjc2VhcmNoUGFyYW1zICovXG4gIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0aW9uZmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Byb2Nlc3MgKi9cbiAgcHJvY2Vzcz8odmFsdWU6IGFueSwgLi4uYXJnczogYW55KTogYW55O1xufVxuLyoqIEdlbmVyaWMgdHlwZXMgd2hlbiBjb25zdHJ1Y3RpbmcgYSBSZXN0RW5kcG9pbnRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjaW5oZXJpdGFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0R2VuZXJpY3MgZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzIHtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uICYgUmVzdEdlbmVyaWNzICYgeyBzaWRlRWZmZWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBBIGV4dGVuZHMgYW55W10sXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUGFyYW1GZXRjaE5vQm9keTxBWzBdLCBSZXNvbHZlVHlwZTxFPj4sXG4gIEVbJ3NjaGVtYSddLFxuICBFWydzaWRlRWZmZWN0J10sXG4gIFBpY2s8RSwgJ3BhdGgnIHwgJ3NlYXJjaFBhcmFtcycgfCAnYm9keSc+ICYge1xuICAgIHNlYXJjaFBhcmFtczogT21pdDxBWzBdLCBrZXlvZiBQYXRoQXJnczxFWydwYXRoJ10+PjtcbiAgfVxuPjtcbi8qKiBNZXJnZSBwYWdpbmF0aW9uIGZpZWxkIEMgaW50byBib2R5LCBtYWtpbmcgaXQgcmVxdWlyZWQgKi9cbnR5cGUgUGFnaW5hdGlvbkludG9Cb2R5PEJvZHksIEMgZXh0ZW5kcyBzdHJpbmc+ID0gQm9keSAmIHtcbiAgW0sgaW4gQ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59O1xuXG4vKiogUGFnaW5hdGVkIHNlYXJjaFBhcmFtcyB0eXBlICovXG50eXBlIFBhZ2luYXRlZFNlYXJjaFBhcmFtczxcbiAgRSBleHRlbmRzIHsgc2VhcmNoUGFyYW1zPzogYW55OyBwYXRoPzogc3RyaW5nIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0ge1xuICBbSyBpbiBDXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbn0gJiBFWydzZWFyY2hQYXJhbXMnXSAmXG4gIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PjtcblxuLyoqIHNlYXJjaFBhcmFtcyB2ZXJzaW9uOiBwYWdpbmF0aW9uIGluIHNlYXJjaFBhcmFtcywgb3B0aW9uYWwgYm9keSBzdXBwb3J0ICovXG50eXBlIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICAvLyBVbmlvbiBhbGxvd3MgY2FsbGluZyB3aXRoIGp1c3Qgc2VhcmNoUGFyYW1zIG9yIHdpdGggc2VhcmNoUGFyYW1zICsgYm9keVxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8UGFnaW5hdGVkU2VhcmNoUGFyYW1zPEUsIEM+LCBSZXNvbHZlVHlwZTxFPj5cbiAgfCBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgICBQYWdpbmF0ZWRTZWFyY2hQYXJhbXM8RSwgQz4sXG4gICAgICBOb25OdWxsYWJsZTxFWydib2R5J10+LFxuICAgICAgUmVzb2x2ZVR5cGU8RT5cbiAgICA+LFxuICBFWydzY2hlbWEnXSxcbiAgRVsnc2lkZUVmZmVjdCddLFxuICBQaWNrPEUsICdwYXRoJyB8ICdzZWFyY2hQYXJhbXMnIHwgJ2JvZHknPiAmIHtcbiAgICBzZWFyY2hQYXJhbXM6IHtcbiAgICAgIFtLIGluIENdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH0gJiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgfVxuPiAmIHsgcGFnaW5hdGlvbkZpZWxkOiBDIH07XG5cbi8qKiBib2R5IHZlcnNpb246IHBhZ2luYXRpb24gZmllbGQgaXMgaW4gYm9keSAoYm9keSByZXF1aXJlZCkgKi9cbnR5cGUgUGFnaW5hdGlvbkZpZWxkSW5Cb2R5PFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgRVsnc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz4sXG4gICAgUmVzb2x2ZVR5cGU8RT5cbiAgPixcbiAgRVsnc2NoZW1hJ10sXG4gIEVbJ3NpZGVFZmZlY3QnXSxcbiAgUGljazxFLCAncGF0aCcgfCAnc2VhcmNoUGFyYW1zJz4gJiB7XG4gICAgYm9keTogUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz47XG4gIH1cbj4gJiB7IHBhZ2luYXRpb25GaWVsZDogQyB9O1xuXG4vKiogUmV0cmlldmVzIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyBieSBwYWdpbmF0aW9uIGZpZWxkICovXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID1cbiAgLy8gSWYgYm9keSBjYW4gYmUgdW5kZWZpbmVkIG9yIHBhZ2luYXRpb24gZmllbGQgbm90IGluIGJvZHksIHVzZSBzZWFyY2hQYXJhbXNcbiAgdW5kZWZpbmVkIGV4dGVuZHMgRVsnYm9keSddID8gUGFnaW5hdGlvbkZpZWxkSW5TZWFyY2hQYXJhbXM8RSwgQz5cbiAgOiAvLyBJZiBwYWdpbmF0aW9uIGZpZWxkIEMgaXMgYSBrZXkgb2YgYm9keSwgbWVyZ2UgaW50byBib2R5XG4gIEMgZXh0ZW5kcyBrZXlvZiBFWydib2R5J10gPyBQYWdpbmF0aW9uRmllbGRJbkJvZHk8RSwgQz5cbiAgOiAvLyBPdGhlcndpc2UgdXNlIHNlYXJjaFBhcmFtc1xuICAgIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPEUsIEM+O1xuXG5leHBvcnQgdHlwZSBBZGRFbmRwb2ludDxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxcbiAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgT1snYm9keSddLFxuICAgIFJlc29sdmVUeXBlPEY+XG4gID4sXG4gIFMsXG4gIHRydWUsXG4gIE9taXQ8TywgJ21ldGhvZCc+ICYgeyBtZXRob2Q6ICdQT1NUJyB9XG4+O1xuZXhwb3J0IHR5cGUgUmVtb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIE9bJ2JvZHknXSxcbiAgICBSZXNvbHZlVHlwZTxGPlxuICA+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnPiAmIHsgbWV0aG9kOiAnUEFUQ0gnIH1cbj47XG5leHBvcnQgdHlwZSBNb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sIE9bJ2JvZHknXSwgUmVzb2x2ZVR5cGU8Rj4+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnIHwgJ3NlYXJjaFBhcmFtcyc+ICYgeyBtZXRob2Q6ICdQQVRDSCcgfVxuPjtcblxudHlwZSBPcHRpb25zQm9keURlZmF1bHQ8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1xuICA6IE9bJ21ldGhvZCddIGV4dGVuZHMgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnID8gTyAmIHsgYm9keTogYW55IH1cbiAgOiBPICYgeyBib2R5OiB1bmRlZmluZWQgfTtcblxuLyoqIFdoZW4gYG1ldGhvZGAgaXMgb21pdHRlZCBmcm9tIGBPYCwgaW5mZXIgaXQgKG11c3Qgc3RheSBhbGlnbmVkIHdpdGggYE9wdGlvbnNUb0JvZHlBcmd1bWVudGApLiAqL1xudHlwZSBJbmZlclJlc3RNZXRob2RXaGVuT21pdHRlZDxPIGV4dGVuZHMgUmVzdEdlbmVyaWNzPiA9XG4gIE8gZXh0ZW5kcyB7IHNpZGVFZmZlY3Q6IHRydWUgfSA/ICdQT1NUJ1xuICA6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydib2R5J11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgJ0dFVCdcbiAgICA6ICdQT1NUJ1xuICA6ICdHRVQnO1xuXG50eXBlIE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEluZmVyUmVzdE1ldGhvZFdoZW5PbWl0dGVkPE8+O1xuXG50eXBlIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8gZXh0ZW5kcyB7IGJvZHk/OiBhbnkgfT4gPVxuICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gZXh0ZW5kcyBFbmRwb2ludEV4dHJhT3B0aW9uczxGPiB7XG4gIC8qKiBQcmVwZW5kZWQgdG8gYWxsIHVybHNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3VybFByZWZpeFxuICAgKi9cbiAgdXJsUHJlZml4Pzogc3RyaW5nO1xuICByZXF1ZXN0SW5pdD86IFJlcXVlc3RJbml0O1xuICAvKiogQ2FsbGVkIGJ5IGdldFJlcXVlc3RJbml0IHRvIGRldGVybWluZSBIVFRQIEhlYWRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldEhlYWRlcnNcbiAgICovXG4gIGdldEhlYWRlcnM/KGhlYWRlcnM6IEhlYWRlcnNJbml0KTogUHJvbWlzZTxIZWFkZXJzSW5pdD4gfCBIZWFkZXJzSW5pdDtcbiAgLyoqIFByZXBhcmVzIFJlcXVlc3RJbml0IHVzZWQgaW4gZmV0Y2guIFRoaXMgaXMgc2VudCB0byBmZXRjaFJlc3BvbnNlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldFJlcXVlc3RJbml0XG4gICAqL1xuICBnZXRSZXF1ZXN0SW5pdD8oYm9keTogYW55KTogUHJvbWlzZTxSZXF1ZXN0SW5pdD4gfCBSZXF1ZXN0SW5pdDtcbiAgLyoqIFBlcmZvcm1zIHRoZSBmZXRjaCBjYWxsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNmZXRjaFJlc3BvbnNlXG4gICAqL1xuICBmZXRjaFJlc3BvbnNlPyhpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxhbnk+O1xuICAvKiogVGFrZXMgdGhlIFJlc3BvbnNlIGFuZCBwYXJzZXMgdmlhIC50ZXh0KCkgb3IgLmpzb24oKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFyc2VSZXNwb25zZVxuICAgKi9cbiAgcGFyc2VSZXNwb25zZT8ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+O1xuXG4gIHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgZmV0Y2g/OiBGO1xuICBrZXk/KC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBzdHJpbmc7XG4gIHVybD8oLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxGLCBTPjtcbn1cblxuLy8gV2hlbiBzdWJjbGFzc2luZyBSZXN0RW5kcG9pbnQgd2l0aCBgTyBleHRlbmRzIFJlc3RHZW5lcmljcyA9IGFueWAsIE8gZGVmYXVsdHNcbi8vIHRvIGBhbnlgLiBUaGUgYHVua25vd24gZXh0ZW5kcyBPID8gYW55YCBndWFyZCBjYXRjaGVzIE89YW55IGJlZm9yZSBpdCByZWFjaGVzXG4vLyBQYXRoQXJncyAoc2VlICMzNzgyKS4gU29mdFBhdGhBcmdzIGNvbGxhcHNlcyBQYXRoQXJnczxzdHJpbmc+IHRvIGB1bmtub3duYFxuLy8gd2hlbiBhIGNvbmNyZXRlIGJvZHkgaXMgcHJlc2VudCwgcHJldmVudGluZyB1bmlvbiBvdmVybG9hZHMgdGhhdCBicmVha1xuLy8gZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIGNhbGxiYWNrcy4gTWV0aG9kIGluZmVyZW5jZSB0cmVhdHMgZXhwbGljaXQgYm9keSBhcyBQT1NULlxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50Q29uc3RydWN0b3JPcHRpb25zPE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnk+ID1cbiAgUmVzdEVuZHBvaW50T3B0aW9uczxcbiAgICBSZXN0RmV0Y2g8XG4gICAgICB1bmtub3duIGV4dGVuZHMgTyA/IGFueVxuICAgICAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFNvZnRQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxPLCBNZXRob2RBcmdGb3JCb2R5SW5mZXJlbmNlPE8+PixcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgICA6IGFueSAvKkRlbm9ybWFsaXplPE9bJ3NjaGVtYSddPiovXG4gICAgPixcbiAgICBPWydzY2hlbWEnXVxuICA+O1xuXG4vKiogU2ltcGxpZmllcyBlbmRwb2ludCBkZWZpbml0aW9ucyB0aGF0IGZvbGxvdyBSRVNUIHBhdHRlcm5zXG4gKlxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUmVzdEdlbmVyaWNzID0gYW55LFxuPiBleHRlbmRzIFJlc3RJbnN0YW5jZTxcbiAgUmVzdEZldGNoPFxuICAgIHVua25vd24gZXh0ZW5kcyBPID8gYW55XG4gICAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgICA6IFBhdGhBcmdzPE9bJ3BhdGgnXT4sXG4gICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PE8sIE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8Tz4+LFxuICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgOiBhbnkgLypEZW5vcm1hbGl6ZTxPWydzY2hlbWEnXT4qL1xuICA+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IHVuZGVmaW5lZCxcbiAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/IEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICA6IE1ldGhvZFRvU2lkZTxNZXRob2RBcmdGb3JCb2R5SW5mZXJlbmNlPE8+PixcbiAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1xuICA6IE8gJiB7XG4gICAgICBtZXRob2Q6IEluZmVyUmVzdE1ldGhvZFdoZW5PbWl0dGVkPE8+O1xuICAgIH1cbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0RW5kcG9pbnRDb25zdHJ1Y3RvciB7XG4gIC8qKiBTaW1wbGlmaWVzIGVuZHBvaW50IGRlZmluaXRpb25zIHRoYXQgZm9sbG93IFJFU1QgcGF0dGVybnNcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50XG4gICAqL1xuICBuZXcgPE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnk+KHtcbiAgICBtZXRob2QsXG4gICAgc2lkZUVmZmVjdCxcbiAgICBuYW1lLFxuICAgIC4uLm9wdGlvbnNcbiAgfTogUmVzdEVuZHBvaW50Q29uc3RydWN0b3JPcHRpb25zPE8+ICYgUmVhZG9ubHk8Tz4pOiBSZXN0RW5kcG9pbnQ8Tz47XG4gIHJlYWRvbmx5IHByb3RvdHlwZTogUmVzdEluc3RhbmNlQmFzZTtcbn1cblxuZXhwb3J0IHR5cGUgTWV0aG9kVG9TaWRlPE0+ID1cbiAgTSBleHRlbmRzIHN0cmluZyA/XG4gICAgTSBleHRlbmRzICdHRVQnID9cbiAgICAgIHVuZGVmaW5lZFxuICAgIDogdHJ1ZVxuICA6IHVuZGVmaW5lZDtcblxuLyoqIFJlc3RFbmRwb2ludCB0eXBlcyBzaW1wbGlmaWVkICovXG5leHBvcnQgdHlwZSBSZXN0VHlwZTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBCb2R5ID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9LFxuPiA9IElmVHlwZVNjcmlwdExvb3NlTnVsbDxcbiAgUmVzdEluc3RhbmNlPFJlc3RGZXRjaDxVcmxQYXJhbXMsIEJvZHksIFI+LCBTLCBNLCBPPixcbiAgQm9keSBleHRlbmRzIHt9ID8gUmVzdFR5cGVXaXRoQm9keTxVcmxQYXJhbXMsIFMsIE0sIEJvZHksIFIsIE8+XG4gIDogUmVzdFR5cGVOb0JvZHk8VXJsUGFyYW1zLCBTLCBNLCBSLCBPPlxuPjtcblxuZXhwb3J0IHR5cGUgUmVzdFR5cGVXaXRoQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIEJvZHkgPSBhbnksXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaFdpdGhCb2R5PFVybFBhcmFtcywgQm9keSwgUj4sIFMsIE0sIE8+O1xuXG5leHBvcnQgdHlwZSBSZXN0VHlwZU5vQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogdW5kZWZpbmVkO1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiB1bmRlZmluZWQgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaE5vQm9keTxVcmxQYXJhbXMsIFI+LCBTLCBNLCBPPjtcblxuLyoqIFNpbXBsZSBwYXJhbWV0ZXJzLCBhbmQgYm9keSBmZXRjaCBmdW5jdGlvbnMgKi9cbmV4cG9ydCB0eXBlIFJlc3RGZXRjaDxcbiAgVXJsUGFyYW1zLFxuICBCb2R5ID0ge30sXG4gIFJlc29sdmUgPSBhbnksXG4+ID0gSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuICB8IFBhcmFtRmV0Y2hXaXRoQm9keTxVcmxQYXJhbXMsIEJvZHksIFJlc29sdmU+LFxuICBCb2R5IGV4dGVuZHMge30gPyBQYXJhbUZldGNoV2l0aEJvZHk8VXJsUGFyYW1zLCBCb2R5LCBSZXNvbHZlPlxuICA6IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuPjtcblxuZXhwb3J0IHR5cGUgUGFyYW1GZXRjaFdpdGhCb2R5PFAsIEIgPSB7fSwgUiA9IGFueT4gPVxuICAvLyB3ZSBtdXN0IGFsd2F5cyBhbGxvdyB1bmRlZmluZWQgaW4gYSB1bmlvbiBhbmQgZ2l2ZSBpdCBhIHR5cGUgd2l0aG91dCBwYXJhbXNcbiAgUCBleHRlbmRzIHVuZGVmaW5lZCA/ICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+XG4gIDogLy8gZXZlbiB3aXRoIGxvb3NlIG51bGwsIHRoaXMgd2lsbCBvbmx5IGJlIHRydWUgd2hlbiBhbGwgbWVtYmVycyBhcmUgb3B0aW9uYWxcbiAge30gZXh0ZW5kcyBQID9cbiAgICAvLyB0aGlzIHNhZmVseSBoYW5kbGVzIFBhdGhBcmdzIHdpdGggbm8gbWVtYmVycyB0aGF0IHJlc3VsdHMgaW4gYSBzaW1wbGUgYHVua25vd25gIHR5cGVcbiAgICBrZXlvZiBQIGV4dGVuZHMgbmV2ZXIgP1xuICAgICAgKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIGJvZHk6IEIpID0+IFByb21pc2U8Uj5cbiAgICA6IHwgKCh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBwYXJhbXM6IFAsIGJvZHk6IEIpID0+IFByb21pc2U8Uj4pXG4gICAgICB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgYm9keTogQikgPT4gUHJvbWlzZTxSPilcbiAgOiAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBQYXJhbUZldGNoTm9Cb2R5PFAsIFIgPSBhbnk+ID1cbiAgLy8gd2UgbXVzdCBhbHdheXMgYWxsb3cgdW5kZWZpbmVkIGluIGEgdW5pb24gYW5kIGdpdmUgaXQgYSB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gIFAgZXh0ZW5kcyB1bmRlZmluZWQgPyAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSkgPT4gUHJvbWlzZTxSPlxuICA6IC8vIGV2ZW4gd2l0aCBsb29zZSBudWxsLCB0aGlzIHdpbGwgb25seSBiZSB0cnVlIHdoZW4gYWxsIG1lbWJlcnMgYXJlIG9wdGlvbmFsXG4gIHt9IGV4dGVuZHMgUCA/XG4gICAgLy8gdGhpcyBzYWZlbHkgaGFuZGxlcyBQYXRoQXJncyB3aXRoIG5vIG1lbWJlcnMgdGhhdCByZXN1bHRzIGluIGEgc2ltcGxlIGB1bmtub3duYCB0eXBlXG4gICAga2V5b2YgUCBleHRlbmRzIG5ldmVyID9cbiAgICAgICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlKSA9PiBQcm9taXNlPFI+XG4gICAgOiB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQKSA9PiBQcm9taXNlPFI+KVxuICAgICAgfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UpID0+IFByb21pc2U8Uj4pXG4gIDogKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCkgPT4gUHJvbWlzZTxSPjtcblxuLy8gc2FtZSBhbGdvcml0aG0sIGJ1dCBmb3IgQXJncyAoYWthIHJlYWRvbmx5IGFueVtdKVxuZXhwb3J0IHR5cGUgUGFyYW1Ub0FyZ3M8UD4gPVxuICBQIGV4dGVuZHMgdW5kZWZpbmVkID8gW11cbiAgOiB7fSBleHRlbmRzIFAgP1xuICAgIGtleW9mIFAgZXh0ZW5kcyBuZXZlciA/XG4gICAgICBbXVxuICAgIDogW10gfCBbUF1cbiAgOiBbUF07XG5cbnR5cGUgSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFksIE4+ID0gMSB8IHVuZGVmaW5lZCBleHRlbmRzIDEgPyBZIDogTjtcblxuZXhwb3J0IHR5cGUgS2V5b2ZSZXN0RW5kcG9pbnQgPSBrZXlvZiBSZXN0SW5zdGFuY2U7XG5cbmV4cG9ydCB0eXBlIEZyb21GYWxsQmFjazxLIGV4dGVuZHMga2V5b2YgRSwgTywgRT4gPVxuICBLIGV4dGVuZHMga2V5b2YgTyA/IE9bS10gOiBFW0tdO1xuXG5leHBvcnQgdHlwZSBGZXRjaE11dGF0ZTxcbiAgQSBleHRlbmRzIHJlYWRvbmx5IGFueVtdID0gW2FueSwge31dIHwgW3t9XSxcbiAgUiA9IGFueSxcbj4gPSAodGhpczogUmVzdEluc3RhbmNlLCAuLi5hcmdzOiBBKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBGZXRjaEdldDxBIGV4dGVuZHMgcmVhZG9ubHkgYW55W10gPSBbYW55XSwgUiA9IGFueT4gPSAoXG4gIHRoaXM6IFJlc3RJbnN0YW5jZSxcbiAgLi4uYXJnczogQVxuKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0czxPLCBEPiA9IHtcbiAgW0sgaW4ga2V5b2YgTyB8IGtleW9mIERdOiBLIGV4dGVuZHMga2V5b2YgTyA/IEV4Y2x1ZGU8T1tLXSwgdW5kZWZpbmVkPlxuICA6IERbRXh0cmFjdDxLLCBrZXlvZiBEPl07XG59O1xuXG5leHBvcnQgdHlwZSBHZXRFbmRwb2ludDxcbiAgTyBleHRlbmRzIHtcbiAgICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWE7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZU5vQm9keTxcbiAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gIDogUGF0aEFyZ3M8T1sncGF0aCddPixcbiAgT1snc2NoZW1hJ10sXG4gIHVuZGVmaW5lZCxcbiAgYW55LFxuICBPICYgeyBtZXRob2Q6ICdHRVQnIH1cbj47XG5cbmV4cG9ydCB0eXBlIE11dGF0ZUVuZHBvaW50PFxuICBPIGV4dGVuZHMge1xuICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgICByZWFkb25seSBzY2hlbWE6IFNjaGVtYTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaFBhcmFtcz86IGFueTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IGJvZHk/OiBhbnk7XG4gIH0gPSB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZVdpdGhCb2R5PFxuICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICBQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICBPWydzY2hlbWEnXSxcbiAgdHJ1ZSxcbiAgT1snYm9keSddLFxuICBhbnksXG4gIE8gJiB7IGJvZHk6IGFueTsgbWV0aG9kOiAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJyB9XG4+O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RFbmRwb2ludFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRGVub3JtYWxpemUsXG4gIEVuZHBvaW50RXh0cmFPcHRpb25zLFxuICBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLFxuICBTY2hlbWEsXG4gIEZldGNoRnVuY3Rpb24sXG4gIFJlc29sdmVUeXBlLFxufSBmcm9tICdAZGF0YS1jbGllbnQvZW5kcG9pbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9leHRyYWN0Q29sbGVjdGlvbi5qcyc7XG5pbXBvcnQge1xuICBPcHRpb25zVG9Cb2R5QXJndW1lbnQsXG4gIE9wdGlvbnNUb0Z1bmN0aW9uLFxufSBmcm9tICcuL09wdGlvbnNUb0Z1bmN0aW9uLmpzJztcbmltcG9ydCB7IFBhdGhBcmdzLCBTb2Z0UGF0aEFyZ3MgfSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5pbXBvcnQgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi9SZXN0RW5kcG9pbnRUeXBlSGVscC5qcyc7XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRUeXBlID0gJ2pzb24nIHwgJ2Jsb2InIHwgJ3RleHQnIHwgJ2FycmF5QnVmZmVyJyB8ICdzdHJlYW0nO1xuXG5pbnRlcmZhY2UgQ29udGVudFR5cGVNYXAge1xuICBibG9iOiBCbG9iO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PjtcbiAganNvbjogYW55O1xufVxuXG50eXBlIENvbnRlbnRSZXR1cm5UeXBlPEMgZXh0ZW5kcyBDb250ZW50VHlwZT4gPSBDb250ZW50VHlwZU1hcFtDXTtcblxudHlwZSBDb250ZW50U2NoZW1hR3VhcmQ8Tz4gPVxuICBPIGV4dGVuZHMgeyBjb250ZW50OiAnYmxvYicgfCAndGV4dCcgfCAnYXJyYXlCdWZmZXInIHwgJ3N0cmVhbScgfSA/XG4gICAgeyBzY2hlbWE/OiB1bmRlZmluZWQgfVxuICA6IHt9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RJbnN0YW5jZUJhc2U8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgICBtZXRob2Q/OiBzdHJpbmc7XG4gIH0gPSB7IHBhdGg6IHN0cmluZyB9LFxuPiBleHRlbmRzIEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2U8RiwgUywgTT4ge1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2JvZHkgKi9cbiAgcmVhZG9ubHkgYm9keT86ICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBhbnk7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjc2VhcmNoUGFyYW1zICovXG4gIHJlYWRvbmx5IHNlYXJjaFBhcmFtcz86ICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NlYXJjaFBhcmFtcyddXG4gIDogLy8gdW5rbm93biBpcyBpZGVudGl0eSB3aXRoICcmJyB0eXBlIG9wZXJhdG9yXG4gICAgdW5rbm93bjtcblxuICAvKiogUGF0dGVybiB0byBjb25zdHJ1Y3QgdXJsIGJhc2VkIG9uIFVybCBQYXJhbWV0ZXJzXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBPWydwYXRoJ107XG4gIC8qKiBQcmVwZW5kZWQgdG8gYWxsIHVybHNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3VybFByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgdXJsUHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlcXVlc3RJbml0OiBSZXF1ZXN0SW5pdDtcbiAgLyoqIEhUVFAgcmVxdWVzdCBtZXRob2RcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I21ldGhvZFxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kOiAoTyAmIHsgbWV0aG9kOiBzdHJpbmcgfSlbJ21ldGhvZCddO1xuICByZWFkb25seSBzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhZ2luYXRpb25GaWVsZCAqL1xuICByZWFkb25seSBwYWdpbmF0aW9uRmllbGQ/OiBzdHJpbmc7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjY29udGVudCAqL1xuICByZWFkb25seSBjb250ZW50PzogQ29udGVudFR5cGU7XG5cbiAgLyogZmV0Y2ggbGlmZWN5Y2xlcyAqL1xuICAvKiBiZWZvcmUtZmV0Y2ggKi9cbiAgLyoqIEJ1aWxkcyB0aGUgVVJMIHRvIGZldGNoXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCN1cmxcbiAgICovXG4gIHVybCguLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KTogc3RyaW5nO1xuICAvKiogRW5jb2RlIHRoZSBzZWFyY2hQYXJhbXMgY29tcG9uZW50IG9mIHRoZSB1cmxcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NlYXJjaFRvU3RyaW5nXG4gICAqL1xuICBzZWFyY2hUb1N0cmluZyhzZWFyY2hQYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmc7XG4gIC8qKiBQcmVwYXJlcyBSZXF1ZXN0SW5pdCB1c2VkIGluIGZldGNoLiBUaGlzIGlzIHNlbnQgdG8gZmV0Y2hSZXNwb25zZSgpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNnZXRSZXF1ZXN0SW5pdFxuICAgKi9cbiAgZ2V0UmVxdWVzdEluaXQoXG4gICAgdGhpczogYW55LFxuICAgIGJvZHk/OiBSZXF1ZXN0SW5pdFsnYm9keSddIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFByb21pc2U8UmVxdWVzdEluaXQ+IHwgUmVxdWVzdEluaXQ7XG4gIC8qKiBDYWxsZWQgYnkgZ2V0UmVxdWVzdEluaXQgdG8gZGV0ZXJtaW5lIEhUVFAgSGVhZGVyc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0SGVhZGVyc1xuICAgKi9cbiAgZ2V0SGVhZGVycyhoZWFkZXJzOiBIZWFkZXJzSW5pdCk6IFByb21pc2U8SGVhZGVyc0luaXQ+IHwgSGVhZGVyc0luaXQ7XG4gIC8qIGFmdGVyLWZldGNoICovXG4gIC8qKiBQZXJmb3JtcyB0aGUgZmV0Y2ggY2FsbFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZmV0Y2hSZXNwb25zZVxuICAgKi9cbiAgZmV0Y2hSZXNwb25zZShpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT47XG4gIC8qKiBUYWtlcyB0aGUgUmVzcG9uc2UgYW5kIHBhcnNlcyB2aWEgLnRleHQoKSBvciAuanNvbigpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYXJzZVJlc3BvbnNlXG4gICAqL1xuICBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8YW55PjtcbiAgLyoqIFBlcmZvcm0gYW55IHRyYW5zZm9ybXMgd2l0aCB0aGUgcGFyc2VkIHJlc3VsdC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Byb2Nlc3NcbiAgICovXG4gIHByb2Nlc3ModmFsdWU6IGFueSwgLi4uYXJnczogUGFyYW1ldGVyczxGPik6IFJlc29sdmVUeXBlPEY+O1xuXG4gIC8qIHV0aWxpdGllcyAqL1xuICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCAoZmV0Y2gpIGtleSBtYXRjaGVzIHRoaXMgZW5kcG9pbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCN0ZXN0S2V5XG4gICAqL1xuICB0ZXN0S2V5KGtleTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKiBleHRlbmRlcnMgKi9cbiAgLy8gVE9ETzogZmlndXJlIG91dCBiZXR0ZXIgd2F5IHRoYW4gd3JhcHBpbmcgd2hvbGUgb3B0aW9ucyBpbiBSZWFkb25seTw+ICsgbWFraW5nIE8gZXh0ZW5kIGZyb20ge31cbiAgLy8gICAgICAgdGhpcyBpcyBqdXN0IGEgaGFjayB0byBoYW5kbGUgd2hlbiBubyBtZW1iZXJzIG9mIFBhcnRpYWxSZXN0R2VuZXJpY3MgYXJlIHByZXNlbnRcbiAgLy8gICAgICAgTm90ZTogVXNpbmcgb3ZlcmxvYWRpbmcgKGxpa2UgcGFnaW5hdGVkIGRpZCkgc3RydWdnbGVzIGJlY2F1c2UgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgY2xlYXIgd2F5IG9mIGRpc3Rpbmd1aXNoaW5nIG9uZVxuICAvLyAgICAgICBzaG91bGQgYmUgdXNlZCBmcm9tIHRoZSBvdGhlciAoZHVlIHRvIHNhbWUgcHJvYmxlbSB3aXRoIGV2ZXJ5IG1lbWJlciBiZWluZyBwYXJ0aWFsKVxuICAvKiogQ3JlYXRlcyBhIGNoaWxkIGVuZHBvaW50IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGlzIHdoaWxlIG92ZXJyaWRpbmcgcHJvdmlkZWQgYG9wdGlvbnNgLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZXh0ZW5kXG4gICAqL1xuICBleHRlbmQ8XG4gICAgRSBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2UsXG4gICAgRXh0ZW5kT3B0aW9ucyBleHRlbmRzIFBhcnRpYWxSZXN0R2VuZXJpY3MgfCB7fSxcbiAgPihcbiAgICB0aGlzOiBFLFxuICAgIG9wdGlvbnM6IFJlYWRvbmx5PFxuICAgICAgUmVzdEVuZHBvaW50RXh0ZW5kT3B0aW9uczxFeHRlbmRPcHRpb25zLCBFLCBGPiAmIEV4dGVuZE9wdGlvbnNcbiAgICA+ICZcbiAgICAgIENvbnRlbnRTY2hlbWFHdWFyZDxFeHRlbmRPcHRpb25zPixcbiAgKTogUmVzdEV4dGVuZGVkRW5kcG9pbnQ8RXh0ZW5kT3B0aW9ucywgRT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEluc3RhbmNlPFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE0gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nIH0sXG4+IGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGLCBTLCBNLCBPPiB7XG4gIC8qKiBDcmVhdGVzIGFuIEVuZHBvaW50IHRvIGFwcGVuZCB0aGUgbmV4dCBwYWdlIGV4dGVuZGluZyBhIGxpc3QgZm9yIHBhZ2luYXRpb25cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhZ2luYXRlZFxuICAgKi9cbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBBIGV4dGVuZHMgYW55W10sXG4gID4oXG4gICAgdGhpczogRSxcbiAgICByZW1vdmVDdXJzb3I6ICguLi5hcmdzOiBBKSA9PiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0sXG4gICk6IFBhZ2luYXRpb25FbmRwb2ludDxFLCBBPjtcbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBDIGV4dGVuZHMgc3RyaW5nLFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgY3Vyc29yRmllbGQ6IEMsXG4gICk6IFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PEUsIEM+O1xuICAvKiogQ29uY2F0aW5hdGUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzIChHRVQpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNnZXRQYWdlXG4gICAqL1xuICBnZXRQYWdlOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddIGV4dGVuZHMgc3RyaW5nID9cbiAgICAgIFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PFxuICAgICAgICBGICYgeyBzY2hlbWE6IFM7IHNpZGVFZmZlY3Q6IE0gfSAmIE8sXG4gICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICA+XG4gICAgOiB1bmRlZmluZWRcbiAgOiB1bmRlZmluZWQ7XG4gIC8qKiBDcmVhdGUgYSBuZXcgaXRlbSAoUE9TVCkgYW5kIGBwdXNoYCB0byB0aGUgZW5kXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwdXNoXG4gICAqL1xuICBwdXNoOiBBZGRFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+WydwdXNoJ10sXG4gICAgT21pdDxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8sIEV4dHJhY3RDb2xsZWN0aW9uPFM+WydwdXNoJ10+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8TywgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3B1c2gnXT5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIENyZWF0ZSBhIG5ldyBpdGVtIChQT1NUKSBhbmQgYHVuc2hpZnRgIHRvIHRoZSBiZWdpbm5pbmdcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Vuc2hpZnRcbiAgICovXG4gIHVuc2hpZnQ6IEFkZEVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3Vuc2hpZnQnXSxcbiAgICBPbWl0PE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8TywgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3Vuc2hpZnQnXT5cbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPLCBFeHRyYWN0Q29sbGVjdGlvbjxTPlsndW5zaGlmdCddPltdXG4gICAgICAgIHwgRm9ybURhdGE7XG4gICAgfVxuICA+O1xuICAvKiogQ3JlYXRlIG5ldyBpdGVtKHMpIChQT1NUKSBhbmQgYE9iamVjdC5hc3NpZ25gIG1lcmdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNhc3NpZ25cbiAgICovXG4gIGFzc2lnbjogQWRkRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPixcbiAgICBPbWl0PE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6XG4gICAgICAgIHwgUmVjb3JkPFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8TywgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ2Fzc2lnbiddPlxuICAgICAgICAgID5cbiAgICAgICAgfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBSZW1vdmUgaXRlbShzKSAoUEFUQ0gpIGZyb20gY29sbGVjdGlvblxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcmVtb3ZlXG4gICAqL1xuICByZW1vdmU6IFJlbW92ZUVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3JlbW92ZSddLFxuICAgIE9taXQ8TywgJ2JvZHknIHwgJ21ldGhvZCc+ICYge1xuICAgICAgYm9keTpcbiAgICAgICAgfCBQYXJ0aWFsPE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8sIEV4dHJhY3RDb2xsZWN0aW9uPFM+WydyZW1vdmUnXT4+XG4gICAgICAgIHwgUGFydGlhbDxcbiAgICAgICAgICAgIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8sIEV4dHJhY3RDb2xsZWN0aW9uPFM+WydyZW1vdmUnXT5cbiAgICAgICAgICA+W11cbiAgICAgICAgfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBNb3ZlIGl0ZW0gYmV0d2VlbiBjb2xsZWN0aW9ucyAoUEFUQ0gpIC0gcmVtb3ZlcyBmcm9tIG9sZCwgYWRkcyB0byBuZXdcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I21vdmVcbiAgICovXG4gIG1vdmU6IE1vdmVFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+Wydtb3ZlJ10sXG4gICAge1xuICAgICAgcGF0aDogJ21vdmVQYXRoJyBleHRlbmRzIGtleW9mIE8gPyBPWydtb3ZlUGF0aCddICYgc3RyaW5nIDogT1sncGF0aCddO1xuICAgICAgYm9keTpcbiAgICAgICAgfCBQYXJ0aWFsPE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8sIEV4dHJhY3RDb2xsZWN0aW9uPFM+Wydtb3ZlJ10+PlxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50RXh0ZW5kT3B0aW9uczxcbiAgTyBleHRlbmRzIFBhcnRpYWxSZXN0R2VuZXJpY3MsXG4gIEUgZXh0ZW5kcyB7IGJvZHk/OiBhbnk7IHBhdGg/OiBzdHJpbmc7IHNjaGVtYT86IFNjaGVtYTsgbWV0aG9kPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9IFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIE9wdGlvbnNUb0Z1bmN0aW9uPE8sIEUsIEY+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NjaGVtYSddLCBTY2hlbWEgfCB1bmRlZmluZWQ+XG4gIDogRVsnc2NoZW1hJ11cbj4gJlxuICBQYXJ0aWFsPFxuICAgIE9taXQ8XG4gICAgICBFLFxuICAgICAgS2V5b2ZSZXN0RW5kcG9pbnQgfCBrZXlvZiBQYXJ0aWFsUmVzdEdlbmVyaWNzIHwga2V5b2YgUmVzdEVuZHBvaW50T3B0aW9uc1xuICAgID5cbiAgPjtcblxudHlwZSBPcHRpb25zVG9SZXN0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzLFxuICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZSAmIHsgYm9keT86IGFueTsgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9XG4gICdwYXRoJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgICBPcHRpb25zVG9Cb2R5QXJndW1lbnQ8XG4gICAgICAgICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPIDogRSxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT5cbiAgICAgIDogJ2NvbnRlbnQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIENvbnRlbnRSZXR1cm5UeXBlPE9bJ2NvbnRlbnQnXSAmIENvbnRlbnRUeXBlPlxuICAgICAgOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD47XG4gICAgICAgIGJvZHk6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFWydwYWdpbmF0aW9uRmllbGQnXTtcbiAgICAgIH1cbiAgICA+XG4gIDogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgUmVzdFR5cGU8XG4gICAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgICAgTyxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT5cbiAgICAgIDogJ2NvbnRlbnQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIENvbnRlbnRSZXR1cm5UeXBlPE9bJ2NvbnRlbnQnXSAmIENvbnRlbnRUeXBlPlxuICAgICAgOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRVsncGF0aCddO1xuICAgICAgICBib2R5OiBPWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICBFLFxuICAgICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddXG4gICAgICA+LFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICBPWydwcm9jZXNzJ10gZXh0ZW5kcyB7fSA/IFJldHVyblR5cGU8T1sncHJvY2VzcyddPlxuICAgICAgOiAnY29udGVudCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgQ29udGVudFJldHVyblR5cGU8T1snY29udGVudCddICYgQ29udGVudFR5cGU+XG4gICAgICA6IFJlc29sdmVUeXBlPEY+LFxuICAgICAge1xuICAgICAgICBwYXRoOiBFWydwYXRoJ107XG4gICAgICAgIGJvZHk6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiBPWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiBSZXN0SW5zdGFuY2U8XG4gICAgICBGLFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdwYXRoJyBleHRlbmRzIGtleW9mIE8gPyBFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPlxuICAgICAgICA6IEVbJ3BhdGgnXTtcbiAgICAgICAgYm9keTogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9bJ2JvZHknXSA6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gPyBPWydzZWFyY2hQYXJhbXMnXVxuICAgICAgICA6IEVbJ3NlYXJjaFBhcmFtcyddO1xuICAgICAgICBtZXRob2Q6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ107XG4gICAgICAgIHBhZ2luYXRpb25GaWVsZDogJ3BhZ2luYXRpb25GaWVsZCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgICBPWydwYWdpbmF0aW9uRmllbGQnXVxuICAgICAgICA6IEVbJ3BhZ2luYXRpb25GaWVsZCddO1xuICAgICAgfVxuICAgID47XG5cbmV4cG9ydCB0eXBlIFJlc3RFeHRlbmRlZEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyxcbiAgRSBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2UgJiB7IGdldFBhZ2U/OiB1bmtub3duIH0sXG4+ID0gT3B0aW9uc1RvUmVzdEVuZHBvaW50PFxuICBPLFxuICBFICZcbiAgICAoRSBleHRlbmRzIHsgZ2V0UGFnZTogeyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9IH0gP1xuICAgICAgeyBwYWdpbmF0aW9uRmllbGQ6IEVbJ2dldFBhZ2UnXVsncGFnaW5hdGlvbkZpZWxkJ10gfVxuICAgIDogdW5rbm93biksXG4gIFJlc3RJbnN0YW5jZTxcbiAgICAoLi4uYXJnczogUGFyYW1ldGVyczxFPikgPT4gT1sncHJvY2VzcyddIGV4dGVuZHMge30gP1xuICAgICAgUHJvbWlzZTxSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4+XG4gICAgOiAnY29udGVudCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFByb21pc2U8Q29udGVudFJldHVyblR5cGU8T1snY29udGVudCddICYgQ29udGVudFR5cGU+PlxuICAgIDogUmV0dXJuVHlwZTxFPixcbiAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICA6IEVbJ3NpZGVFZmZlY3QnXVxuICA+XG4+ICZcbiAgT21pdDxPLCBLZXlvZlJlc3RFbmRwb2ludD4gJlxuICBPbWl0PEUsIEtleW9mUmVzdEVuZHBvaW50IHwga2V5b2YgTz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbFJlc3RHZW5lcmljcyB7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGF0aCAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NjaGVtYSAqL1xuICByZWFkb25seSBzY2hlbWE/OiBTY2hlbWEgfCB1bmRlZmluZWQ7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbWV0aG9kICovXG4gIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNib2R5ICovXG4gIGJvZHk/OiBhbnk7XG4gIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjc2VhcmNoUGFyYW1zICovXG4gIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0aW9uZmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Byb2Nlc3MgKi9cbiAgcHJvY2Vzcz8odmFsdWU6IGFueSwgLi4uYXJnczogYW55KTogYW55O1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2NvbnRlbnQgKi9cbiAgcmVhZG9ubHkgY29udGVudD86IENvbnRlbnRUeXBlO1xufVxuLyoqIEdlbmVyaWMgdHlwZXMgd2hlbiBjb25zdHJ1Y3RpbmcgYSBSZXN0RW5kcG9pbnRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjaW5oZXJpdGFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0R2VuZXJpY3MgZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzIHtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uICYgUmVzdEdlbmVyaWNzICYgeyBzaWRlRWZmZWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBBIGV4dGVuZHMgYW55W10sXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUGFyYW1GZXRjaE5vQm9keTxBWzBdLCBSZXNvbHZlVHlwZTxFPj4sXG4gIEVbJ3NjaGVtYSddLFxuICBFWydzaWRlRWZmZWN0J10sXG4gIFBpY2s8RSwgJ3BhdGgnIHwgJ3NlYXJjaFBhcmFtcycgfCAnYm9keSc+ICYge1xuICAgIHNlYXJjaFBhcmFtczogT21pdDxBWzBdLCBrZXlvZiBQYXRoQXJnczxFWydwYXRoJ10+PjtcbiAgfVxuPjtcbi8qKiBNZXJnZSBwYWdpbmF0aW9uIGZpZWxkIEMgaW50byBib2R5LCBtYWtpbmcgaXQgcmVxdWlyZWQgKi9cbnR5cGUgUGFnaW5hdGlvbkludG9Cb2R5PEJvZHksIEMgZXh0ZW5kcyBzdHJpbmc+ID0gQm9keSAmIHtcbiAgW0sgaW4gQ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59O1xuXG4vKiogUGFnaW5hdGVkIHNlYXJjaFBhcmFtcyB0eXBlICovXG50eXBlIFBhZ2luYXRlZFNlYXJjaFBhcmFtczxcbiAgRSBleHRlbmRzIHsgc2VhcmNoUGFyYW1zPzogYW55OyBwYXRoPzogc3RyaW5nIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0ge1xuICBbSyBpbiBDXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbn0gJiBFWydzZWFyY2hQYXJhbXMnXSAmXG4gIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PjtcblxuLyoqIHNlYXJjaFBhcmFtcyB2ZXJzaW9uOiBwYWdpbmF0aW9uIGluIHNlYXJjaFBhcmFtcywgb3B0aW9uYWwgYm9keSBzdXBwb3J0ICovXG50eXBlIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICAvLyBVbmlvbiBhbGxvd3MgY2FsbGluZyB3aXRoIGp1c3Qgc2VhcmNoUGFyYW1zIG9yIHdpdGggc2VhcmNoUGFyYW1zICsgYm9keVxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8UGFnaW5hdGVkU2VhcmNoUGFyYW1zPEUsIEM+LCBSZXNvbHZlVHlwZTxFPj5cbiAgfCBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgICBQYWdpbmF0ZWRTZWFyY2hQYXJhbXM8RSwgQz4sXG4gICAgICBOb25OdWxsYWJsZTxFWydib2R5J10+LFxuICAgICAgUmVzb2x2ZVR5cGU8RT5cbiAgICA+LFxuICBFWydzY2hlbWEnXSxcbiAgRVsnc2lkZUVmZmVjdCddLFxuICBQaWNrPEUsICdwYXRoJyB8ICdzZWFyY2hQYXJhbXMnIHwgJ2JvZHknPiAmIHtcbiAgICBzZWFyY2hQYXJhbXM6IHtcbiAgICAgIFtLIGluIENdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH0gJiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgfVxuPiAmIHsgcGFnaW5hdGlvbkZpZWxkOiBDIH07XG5cbi8qKiBib2R5IHZlcnNpb246IHBhZ2luYXRpb24gZmllbGQgaXMgaW4gYm9keSAoYm9keSByZXF1aXJlZCkgKi9cbnR5cGUgUGFnaW5hdGlvbkZpZWxkSW5Cb2R5PFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgRVsnc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz4sXG4gICAgUmVzb2x2ZVR5cGU8RT5cbiAgPixcbiAgRVsnc2NoZW1hJ10sXG4gIEVbJ3NpZGVFZmZlY3QnXSxcbiAgUGljazxFLCAncGF0aCcgfCAnc2VhcmNoUGFyYW1zJz4gJiB7XG4gICAgYm9keTogUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz47XG4gIH1cbj4gJiB7IHBhZ2luYXRpb25GaWVsZDogQyB9O1xuXG4vKiogUmV0cmlldmVzIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyBieSBwYWdpbmF0aW9uIGZpZWxkICovXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID1cbiAgLy8gSWYgYm9keSBjYW4gYmUgdW5kZWZpbmVkIG9yIHBhZ2luYXRpb24gZmllbGQgbm90IGluIGJvZHksIHVzZSBzZWFyY2hQYXJhbXNcbiAgdW5kZWZpbmVkIGV4dGVuZHMgRVsnYm9keSddID8gUGFnaW5hdGlvbkZpZWxkSW5TZWFyY2hQYXJhbXM8RSwgQz5cbiAgOiAvLyBJZiBwYWdpbmF0aW9uIGZpZWxkIEMgaXMgYSBrZXkgb2YgYm9keSwgbWVyZ2UgaW50byBib2R5XG4gIEMgZXh0ZW5kcyBrZXlvZiBFWydib2R5J10gPyBQYWdpbmF0aW9uRmllbGRJbkJvZHk8RSwgQz5cbiAgOiAvLyBPdGhlcndpc2UgdXNlIHNlYXJjaFBhcmFtc1xuICAgIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPEUsIEM+O1xuXG5leHBvcnQgdHlwZSBBZGRFbmRwb2ludDxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxcbiAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgT1snYm9keSddLFxuICAgIFJlc29sdmVUeXBlPEY+XG4gID4sXG4gIFMsXG4gIHRydWUsXG4gIE9taXQ8TywgJ21ldGhvZCc+ICYgeyBtZXRob2Q6ICdQT1NUJyB9XG4+O1xuZXhwb3J0IHR5cGUgUmVtb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIE9bJ2JvZHknXSxcbiAgICBSZXNvbHZlVHlwZTxGPlxuICA+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnPiAmIHsgbWV0aG9kOiAnUEFUQ0gnIH1cbj47XG5leHBvcnQgdHlwZSBNb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sIE9bJ2JvZHknXSwgUmVzb2x2ZVR5cGU8Rj4+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnIHwgJ3NlYXJjaFBhcmFtcyc+ICYgeyBtZXRob2Q6ICdQQVRDSCcgfVxuPjtcblxudHlwZSBPcHRpb25zQm9keURlZmF1bHQ8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1xuICA6IE9bJ21ldGhvZCddIGV4dGVuZHMgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnID8gTyAmIHsgYm9keTogYW55IH1cbiAgOiBPICYgeyBib2R5OiB1bmRlZmluZWQgfTtcblxuLyoqIFdoZW4gYG1ldGhvZGAgaXMgb21pdHRlZCBmcm9tIGBPYCwgaW5mZXIgaXQgKG11c3Qgc3RheSBhbGlnbmVkIHdpdGggYE9wdGlvbnNUb0JvZHlBcmd1bWVudGApLiAqL1xudHlwZSBJbmZlclJlc3RNZXRob2RXaGVuT21pdHRlZDxPIGV4dGVuZHMgUmVzdEdlbmVyaWNzPiA9XG4gIE8gZXh0ZW5kcyB7IHNpZGVFZmZlY3Q6IHRydWUgfSA/ICdQT1NUJ1xuICA6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydib2R5J11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgJ0dFVCdcbiAgICA6ICdQT1NUJ1xuICA6ICdHRVQnO1xuXG50eXBlIE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEluZmVyUmVzdE1ldGhvZFdoZW5PbWl0dGVkPE8+O1xuXG50eXBlIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8gZXh0ZW5kcyB7IGJvZHk/OiBhbnkgfSwgRW50aXR5U2NoZW1hID0gYW55PiA9XG4gICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBQYXJ0aWFsPERlbm9ybWFsaXplPEVudGl0eVNjaGVtYT4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gZXh0ZW5kcyBFbmRwb2ludEV4dHJhT3B0aW9uczxGPiB7XG4gIC8qKiBQcmVwZW5kZWQgdG8gYWxsIHVybHNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3VybFByZWZpeFxuICAgKi9cbiAgdXJsUHJlZml4Pzogc3RyaW5nO1xuICByZXF1ZXN0SW5pdD86IFJlcXVlc3RJbml0O1xuICAvKiogQ2FsbGVkIGJ5IGdldFJlcXVlc3RJbml0IHRvIGRldGVybWluZSBIVFRQIEhlYWRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldEhlYWRlcnNcbiAgICovXG4gIGdldEhlYWRlcnM/KGhlYWRlcnM6IEhlYWRlcnNJbml0KTogUHJvbWlzZTxIZWFkZXJzSW5pdD4gfCBIZWFkZXJzSW5pdDtcbiAgLyoqIFByZXBhcmVzIFJlcXVlc3RJbml0IHVzZWQgaW4gZmV0Y2guIFRoaXMgaXMgc2VudCB0byBmZXRjaFJlc3BvbnNlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldFJlcXVlc3RJbml0XG4gICAqL1xuICBnZXRSZXF1ZXN0SW5pdD8oYm9keTogYW55KTogUHJvbWlzZTxSZXF1ZXN0SW5pdD4gfCBSZXF1ZXN0SW5pdDtcbiAgLyoqIFBlcmZvcm1zIHRoZSBmZXRjaCBjYWxsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNmZXRjaFJlc3BvbnNlXG4gICAqL1xuICBmZXRjaFJlc3BvbnNlPyhpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxhbnk+O1xuICAvKiogVGFrZXMgdGhlIFJlc3BvbnNlIGFuZCBwYXJzZXMgdmlhIC50ZXh0KCkgb3IgLmpzb24oKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFyc2VSZXNwb25zZVxuICAgKi9cbiAgcGFyc2VSZXNwb25zZT8ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+O1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2NvbnRlbnQgKi9cbiAgY29udGVudD86IENvbnRlbnRUeXBlO1xuXG4gIHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgZmV0Y2g/OiBGO1xuICBrZXk/KC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBzdHJpbmc7XG4gIHVybD8oLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxGLCBTPjtcbn1cblxuLy8gV2hlbiBzdWJjbGFzc2luZyBSZXN0RW5kcG9pbnQgd2l0aCBgTyBleHRlbmRzIFJlc3RHZW5lcmljcyA9IGFueWAsIE8gZGVmYXVsdHNcbi8vIHRvIGBhbnlgLiBUaGUgYHVua25vd24gZXh0ZW5kcyBPID8gYW55YCBndWFyZCBjYXRjaGVzIE89YW55IGJlZm9yZSBpdCByZWFjaGVzXG4vLyBQYXRoQXJncyAoc2VlICMzNzgyKS4gU29mdFBhdGhBcmdzIGNvbGxhcHNlcyBQYXRoQXJnczxzdHJpbmc+IHRvIGB1bmtub3duYFxuLy8gd2hlbiBhIGNvbmNyZXRlIGJvZHkgaXMgcHJlc2VudCwgcHJldmVudGluZyB1bmlvbiBvdmVybG9hZHMgdGhhdCBicmVha1xuLy8gZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIGNhbGxiYWNrcy4gTWV0aG9kIGluZmVyZW5jZSB0cmVhdHMgZXhwbGljaXQgYm9keSBhcyBQT1NULlxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50Q29uc3RydWN0b3JPcHRpb25zPE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnk+ID1cbiAgUmVzdEVuZHBvaW50T3B0aW9uczxcbiAgICBSZXN0RmV0Y2g8XG4gICAgICB1bmtub3duIGV4dGVuZHMgTyA/IGFueVxuICAgICAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFNvZnRQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxPLCBNZXRob2RBcmdGb3JCb2R5SW5mZXJlbmNlPE8+PixcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgICA6ICdjb250ZW50JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBDb250ZW50UmV0dXJuVHlwZTxPWydjb250ZW50J10gJiBDb250ZW50VHlwZT5cbiAgICAgIDogYW55IC8qRGVub3JtYWxpemU8T1snc2NoZW1hJ10+Ki9cbiAgICA+LFxuICAgIE9bJ3NjaGVtYSddXG4gID47XG5cbi8qKiBTaW1wbGlmaWVzIGVuZHBvaW50IGRlZmluaXRpb25zIHRoYXQgZm9sbG93IFJFU1QgcGF0dGVybnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnksXG4+IGV4dGVuZHMgUmVzdEluc3RhbmNlPFxuICBSZXN0RmV0Y2g8XG4gICAgdW5rbm93biBleHRlbmRzIE8gPyBhbnlcbiAgICA6ICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICBQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgIDogUGF0aEFyZ3M8T1sncGF0aCddPixcbiAgICBPcHRpb25zVG9Cb2R5QXJndW1lbnQ8TywgTWV0aG9kQXJnRm9yQm9keUluZmVyZW5jZTxPPj4sXG4gICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT5cbiAgICA6ICdjb250ZW50JyBleHRlbmRzIGtleW9mIE8gPyBDb250ZW50UmV0dXJuVHlwZTxPWydjb250ZW50J10gJiBDb250ZW50VHlwZT5cbiAgICA6IGFueSAvKkRlbm9ybWFsaXplPE9bJ3NjaGVtYSddPiovXG4gID4sXG4gICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogdW5kZWZpbmVkLFxuICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID8gRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gIDogTWV0aG9kVG9TaWRlPE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8Tz4+LFxuICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPXG4gIDogTyAmIHtcbiAgICAgIG1ldGhvZDogSW5mZXJSZXN0TWV0aG9kV2hlbk9taXR0ZWQ8Tz47XG4gICAgfVxuPiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RFbmRwb2ludENvbnN0cnVjdG9yIHtcbiAgLyoqIFNpbXBsaWZpZXMgZW5kcG9pbnQgZGVmaW5pdGlvbnMgdGhhdCBmb2xsb3cgUkVTVCBwYXR0ZXJuc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnRcbiAgICovXG4gIG5ldyA8TyBleHRlbmRzIFJlc3RHZW5lcmljcyA9IGFueT4oe1xuICAgIG1ldGhvZCxcbiAgICBzaWRlRWZmZWN0LFxuICAgIG5hbWUsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBSZXN0RW5kcG9pbnRDb25zdHJ1Y3Rvck9wdGlvbnM8Tz4gJlxuICAgIFJlYWRvbmx5PE8+ICZcbiAgICBDb250ZW50U2NoZW1hR3VhcmQ8Tz4pOiBSZXN0RW5kcG9pbnQ8Tz47XG4gIHJlYWRvbmx5IHByb3RvdHlwZTogUmVzdEluc3RhbmNlQmFzZTtcbn1cblxuZXhwb3J0IHR5cGUgTWV0aG9kVG9TaWRlPE0+ID1cbiAgTSBleHRlbmRzIHN0cmluZyA/XG4gICAgTSBleHRlbmRzICdHRVQnID9cbiAgICAgIHVuZGVmaW5lZFxuICAgIDogdHJ1ZVxuICA6IHVuZGVmaW5lZDtcblxuLyoqIFJlc3RFbmRwb2ludCB0eXBlcyBzaW1wbGlmaWVkICovXG5leHBvcnQgdHlwZSBSZXN0VHlwZTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBCb2R5ID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9LFxuPiA9IElmVHlwZVNjcmlwdExvb3NlTnVsbDxcbiAgUmVzdEluc3RhbmNlPFJlc3RGZXRjaDxVcmxQYXJhbXMsIEJvZHksIFI+LCBTLCBNLCBPPixcbiAgQm9keSBleHRlbmRzIHt9ID8gUmVzdFR5cGVXaXRoQm9keTxVcmxQYXJhbXMsIFMsIE0sIEJvZHksIFIsIE8+XG4gIDogUmVzdFR5cGVOb0JvZHk8VXJsUGFyYW1zLCBTLCBNLCBSLCBPPlxuPjtcblxuZXhwb3J0IHR5cGUgUmVzdFR5cGVXaXRoQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIEJvZHkgPSBhbnksXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaFdpdGhCb2R5PFVybFBhcmFtcywgQm9keSwgUj4sIFMsIE0sIE8+O1xuXG5leHBvcnQgdHlwZSBSZXN0VHlwZU5vQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogdW5kZWZpbmVkO1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiB1bmRlZmluZWQgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaE5vQm9keTxVcmxQYXJhbXMsIFI+LCBTLCBNLCBPPjtcblxuLyoqIFNpbXBsZSBwYXJhbWV0ZXJzLCBhbmQgYm9keSBmZXRjaCBmdW5jdGlvbnMgKi9cbmV4cG9ydCB0eXBlIFJlc3RGZXRjaDxcbiAgVXJsUGFyYW1zLFxuICBCb2R5ID0ge30sXG4gIFJlc29sdmUgPSBhbnksXG4+ID0gSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuICB8IFBhcmFtRmV0Y2hXaXRoQm9keTxVcmxQYXJhbXMsIEJvZHksIFJlc29sdmU+LFxuICBCb2R5IGV4dGVuZHMge30gPyBQYXJhbUZldGNoV2l0aEJvZHk8VXJsUGFyYW1zLCBCb2R5LCBSZXNvbHZlPlxuICA6IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuPjtcblxuZXhwb3J0IHR5cGUgUGFyYW1GZXRjaFdpdGhCb2R5PFAsIEIgPSB7fSwgUiA9IGFueT4gPVxuICAvLyB3ZSBtdXN0IGFsd2F5cyBhbGxvdyB1bmRlZmluZWQgaW4gYSB1bmlvbiBhbmQgZ2l2ZSBpdCBhIHR5cGUgd2l0aG91dCBwYXJhbXNcbiAgUCBleHRlbmRzIHVuZGVmaW5lZCA/ICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+XG4gIDogLy8gZXZlbiB3aXRoIGxvb3NlIG51bGwsIHRoaXMgd2lsbCBvbmx5IGJlIHRydWUgd2hlbiBhbGwgbWVtYmVycyBhcmUgb3B0aW9uYWxcbiAge30gZXh0ZW5kcyBQID9cbiAgICAvLyB0aGlzIHNhZmVseSBoYW5kbGVzIFBhdGhBcmdzIHdpdGggbm8gbWVtYmVycyB0aGF0IHJlc3VsdHMgaW4gYSBzaW1wbGUgYHVua25vd25gIHR5cGVcbiAgICBrZXlvZiBQIGV4dGVuZHMgbmV2ZXIgP1xuICAgICAgKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIGJvZHk6IEIpID0+IFByb21pc2U8Uj5cbiAgICA6IHwgKCh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBwYXJhbXM6IFAsIGJvZHk6IEIpID0+IFByb21pc2U8Uj4pXG4gICAgICB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgYm9keTogQikgPT4gUHJvbWlzZTxSPilcbiAgOiAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBQYXJhbUZldGNoTm9Cb2R5PFAsIFIgPSBhbnk+ID1cbiAgLy8gd2UgbXVzdCBhbHdheXMgYWxsb3cgdW5kZWZpbmVkIGluIGEgdW5pb24gYW5kIGdpdmUgaXQgYSB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gIFAgZXh0ZW5kcyB1bmRlZmluZWQgPyAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSkgPT4gUHJvbWlzZTxSPlxuICA6IC8vIGV2ZW4gd2l0aCBsb29zZSBudWxsLCB0aGlzIHdpbGwgb25seSBiZSB0cnVlIHdoZW4gYWxsIG1lbWJlcnMgYXJlIG9wdGlvbmFsXG4gIHt9IGV4dGVuZHMgUCA/XG4gICAgLy8gdGhpcyBzYWZlbHkgaGFuZGxlcyBQYXRoQXJncyB3aXRoIG5vIG1lbWJlcnMgdGhhdCByZXN1bHRzIGluIGEgc2ltcGxlIGB1bmtub3duYCB0eXBlXG4gICAga2V5b2YgUCBleHRlbmRzIG5ldmVyID9cbiAgICAgICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlKSA9PiBQcm9taXNlPFI+XG4gICAgOiB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQKSA9PiBQcm9taXNlPFI+KVxuICAgICAgfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UpID0+IFByb21pc2U8Uj4pXG4gIDogKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCkgPT4gUHJvbWlzZTxSPjtcblxuLy8gc2FtZSBhbGdvcml0aG0sIGJ1dCBmb3IgQXJncyAoYWthIHJlYWRvbmx5IGFueVtdKVxuZXhwb3J0IHR5cGUgUGFyYW1Ub0FyZ3M8UD4gPVxuICBQIGV4dGVuZHMgdW5kZWZpbmVkID8gW11cbiAgOiB7fSBleHRlbmRzIFAgP1xuICAgIGtleW9mIFAgZXh0ZW5kcyBuZXZlciA/XG4gICAgICBbXVxuICAgIDogW10gfCBbUF1cbiAgOiBbUF07XG5cbnR5cGUgSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFksIE4+ID0gMSB8IHVuZGVmaW5lZCBleHRlbmRzIDEgPyBZIDogTjtcblxuZXhwb3J0IHR5cGUgS2V5b2ZSZXN0RW5kcG9pbnQgPSBrZXlvZiBSZXN0SW5zdGFuY2U7XG5cbmV4cG9ydCB0eXBlIEZyb21GYWxsQmFjazxLIGV4dGVuZHMga2V5b2YgRSwgTywgRT4gPVxuICBLIGV4dGVuZHMga2V5b2YgTyA/IE9bS10gOiBFW0tdO1xuXG5leHBvcnQgdHlwZSBGZXRjaE11dGF0ZTxcbiAgQSBleHRlbmRzIHJlYWRvbmx5IGFueVtdID0gW2FueSwge31dIHwgW3t9XSxcbiAgUiA9IGFueSxcbj4gPSAodGhpczogUmVzdEluc3RhbmNlLCAuLi5hcmdzOiBBKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBGZXRjaEdldDxBIGV4dGVuZHMgcmVhZG9ubHkgYW55W10gPSBbYW55XSwgUiA9IGFueT4gPSAoXG4gIHRoaXM6IFJlc3RJbnN0YW5jZSxcbiAgLi4uYXJnczogQVxuKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0czxPLCBEPiA9IHtcbiAgW0sgaW4ga2V5b2YgTyB8IGtleW9mIERdOiBLIGV4dGVuZHMga2V5b2YgTyA/IEV4Y2x1ZGU8T1tLXSwgdW5kZWZpbmVkPlxuICA6IERbRXh0cmFjdDxLLCBrZXlvZiBEPl07XG59O1xuXG5leHBvcnQgdHlwZSBHZXRFbmRwb2ludDxcbiAgTyBleHRlbmRzIHtcbiAgICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWE7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZU5vQm9keTxcbiAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gIDogUGF0aEFyZ3M8T1sncGF0aCddPixcbiAgT1snc2NoZW1hJ10sXG4gIHVuZGVmaW5lZCxcbiAgYW55LFxuICBPICYgeyBtZXRob2Q6ICdHRVQnIH1cbj47XG5cbmV4cG9ydCB0eXBlIE11dGF0ZUVuZHBvaW50PFxuICBPIGV4dGVuZHMge1xuICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgICByZWFkb25seSBzY2hlbWE6IFNjaGVtYTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaFBhcmFtcz86IGFueTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IGJvZHk/OiBhbnk7XG4gIH0gPSB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZVdpdGhCb2R5PFxuICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICBQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICBPWydzY2hlbWEnXSxcbiAgdHJ1ZSxcbiAgT1snYm9keSddLFxuICBhbnksXG4gIE8gJiB7IGJvZHk6IGFueTsgbWV0aG9kOiAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJyB9XG4+O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { default as RestEndpoint } from './RestEndpoint.js';
2
- export type { GetEndpoint, MutateEndpoint, Defaults, RestGenerics, FetchGet, FetchMutate, RestFetch, RestType, RestInstance, KeyofRestEndpoint, RestEndpointConstructorOptions, AddEndpoint, PaginationFieldEndpoint, PaginationEndpoint, } from './RestEndpoint.js';
2
+ export type { GetEndpoint, MutateEndpoint, Defaults, RestGenerics, FetchGet, FetchMutate, RestFetch, RestType, RestInstance, KeyofRestEndpoint, RestEndpointConstructorOptions, AddEndpoint, PaginationFieldEndpoint, PaginationEndpoint, ContentType, } from './RestEndpoint.js';
3
3
  export type { RestEndpoint as IRestEndpoint } from './RestEndpointTypes.js';
4
4
  export { getUrlBase, getUrlTokens } from './RestHelpers.js';
5
5
  export { default as resource } from './resource.js';
@@ -11,6 +11,7 @@ export type { HookResource, HookableEndpointInterface, } from './hookifyResource
11
11
  export { default as NetworkError } from './NetworkError.js';
12
12
  export type { OptionsToFunction } from './OptionsToFunction.js';
13
13
  export type { ShortenPath, PathArgs, PathKeys, KeysToArgs, PathArgsAndSearch, } from './pathTypes.js';
14
+ export type { CollectionOptions } from '@data-client/endpoint';
14
15
  export * from '@data-client/endpoint';
15
16
  export * from './RestEndpoint.js';
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,8BAA8B,EAC9B,WAAW,EACX,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EACV,YAAY,EACZ,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,8BAA8B,EAC9B,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EACV,YAAY,EACZ,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
package/lib/index.js CHANGED
@@ -6,4 +6,4 @@ export { default as hookifyResource } from './hookifyResource.js';
6
6
  export { default as NetworkError } from './NetworkError.js';
7
7
  export * from '@data-client/endpoint';
8
8
  export * from './RestEndpoint.js';
9
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0IiwiUmVzdEVuZHBvaW50IiwiZ2V0VXJsQmFzZSIsImdldFVybFRva2VucyIsInJlc291cmNlIiwiY3JlYXRlUmVzb3VyY2UiLCJob29raWZ5UmVzb3VyY2UiLCJOZXR3b3JrRXJyb3IiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXN0RW5kcG9pbnQgfSBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEdldEVuZHBvaW50LFxuICBNdXRhdGVFbmRwb2ludCxcbiAgRGVmYXVsdHMsXG4gIFJlc3RHZW5lcmljcyxcbiAgRmV0Y2hHZXQsXG4gIEZldGNoTXV0YXRlLFxuICBSZXN0RmV0Y2gsXG4gIFJlc3RUeXBlLFxuICBSZXN0SW5zdGFuY2UsXG4gIEtleW9mUmVzdEVuZHBvaW50LFxuICBSZXN0RW5kcG9pbnRDb25zdHJ1Y3Rvck9wdGlvbnMsXG4gIEFkZEVuZHBvaW50LFxuICBQYWdpbmF0aW9uRmllbGRFbmRwb2ludCxcbiAgUGFnaW5hdGlvbkVuZHBvaW50LFxufSBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG5leHBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludCBhcyBJUmVzdEVuZHBvaW50IH0gZnJvbSAnLi9SZXN0RW5kcG9pbnRUeXBlcy5qcyc7XG5leHBvcnQgeyBnZXRVcmxCYXNlLCBnZXRVcmxUb2tlbnMgfSBmcm9tICcuL1Jlc3RIZWxwZXJzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzb3VyY2UgfSBmcm9tICcuL3Jlc291cmNlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlUmVzb3VyY2UgfSBmcm9tICcuL3Jlc291cmNlLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUmVzb3VyY2UsXG4gIFJlc291cmNlT3B0aW9ucyxcbiAgUmVzb3VyY2VHZW5lcmljcyxcbiAgUmVzb3VyY2VJbnRlcmZhY2UsXG59IGZyb20gJy4vcmVzb3VyY2VUeXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJlc291cmNlRXh0ZW5zaW9uLFxuICBSZXNvdXJjZUVuZHBvaW50RXh0ZW5zaW9ucyxcbiAgQ3VzdG9tUmVzb3VyY2UsXG4gIEV4dGVuZGVkUmVzb3VyY2UsXG59IGZyb20gJy4vcmVzb3VyY2VFeHRlbnNpb25UeXBlcy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhvb2tpZnlSZXNvdXJjZSB9IGZyb20gJy4vaG9va2lmeVJlc291cmNlLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgSG9va1Jlc291cmNlLFxuICBIb29rYWJsZUVuZHBvaW50SW50ZXJmYWNlLFxufSBmcm9tICcuL2hvb2tpZnlSZXNvdXJjZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5ldHdvcmtFcnJvciB9IGZyb20gJy4vTmV0d29ya0Vycm9yLmpzJztcbmV4cG9ydCB0eXBlIHsgT3B0aW9uc1RvRnVuY3Rpb24gfSBmcm9tICcuL09wdGlvbnNUb0Z1bmN0aW9uLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgU2hvcnRlblBhdGgsXG4gIFBhdGhBcmdzLFxuICBQYXRoS2V5cyxcbiAgS2V5c1RvQXJncyxcbiAgUGF0aEFyZ3NBbmRTZWFyY2gsXG59IGZyb20gJy4vcGF0aFR5cGVzLmpzJztcblxuZXhwb3J0ICogZnJvbSAnQGRhdGEtY2xpZW50L2VuZHBvaW50JztcbmV4cG9ydCAqIGZyb20gJy4vUmVzdEVuZHBvaW50LmpzJztcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxJQUFJQyxZQUFZLFFBQVEsbUJBQW1CO0FBa0IzRCxTQUFTQyxVQUFVLEVBQUVDLFlBQVksUUFBUSxrQkFBa0I7QUFDM0QsU0FBU0gsT0FBTyxJQUFJSSxRQUFRLFFBQVEsZUFBZTtBQUNuRCxTQUFTSixPQUFPLElBQUlLLGNBQWMsUUFBUSxlQUFlO0FBYXpELFNBQVNMLE9BQU8sSUFBSU0sZUFBZSxRQUFRLHNCQUFzQjtBQUtqRSxTQUFTTixPQUFPLElBQUlPLFlBQVksUUFBUSxtQkFBbUI7QUFVM0QsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyxtQkFBbUIiLCJpZ25vcmVMaXN0IjpbXX0=
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0IiwiUmVzdEVuZHBvaW50IiwiZ2V0VXJsQmFzZSIsImdldFVybFRva2VucyIsInJlc291cmNlIiwiY3JlYXRlUmVzb3VyY2UiLCJob29raWZ5UmVzb3VyY2UiLCJOZXR3b3JrRXJyb3IiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXN0RW5kcG9pbnQgfSBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEdldEVuZHBvaW50LFxuICBNdXRhdGVFbmRwb2ludCxcbiAgRGVmYXVsdHMsXG4gIFJlc3RHZW5lcmljcyxcbiAgRmV0Y2hHZXQsXG4gIEZldGNoTXV0YXRlLFxuICBSZXN0RmV0Y2gsXG4gIFJlc3RUeXBlLFxuICBSZXN0SW5zdGFuY2UsXG4gIEtleW9mUmVzdEVuZHBvaW50LFxuICBSZXN0RW5kcG9pbnRDb25zdHJ1Y3Rvck9wdGlvbnMsXG4gIEFkZEVuZHBvaW50LFxuICBQYWdpbmF0aW9uRmllbGRFbmRwb2ludCxcbiAgUGFnaW5hdGlvbkVuZHBvaW50LFxuICBDb250ZW50VHlwZSxcbn0gZnJvbSAnLi9SZXN0RW5kcG9pbnQuanMnO1xuZXhwb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnQgYXMgSVJlc3RFbmRwb2ludCB9IGZyb20gJy4vUmVzdEVuZHBvaW50VHlwZXMuanMnO1xuZXhwb3J0IHsgZ2V0VXJsQmFzZSwgZ2V0VXJsVG9rZW5zIH0gZnJvbSAnLi9SZXN0SGVscGVycy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc291cmNlIH0gZnJvbSAnLi9yZXNvdXJjZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVJlc291cmNlIH0gZnJvbSAnLi9yZXNvdXJjZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJlc291cmNlLFxuICBSZXNvdXJjZU9wdGlvbnMsXG4gIFJlc291cmNlR2VuZXJpY3MsXG4gIFJlc291cmNlSW50ZXJmYWNlLFxufSBmcm9tICcuL3Jlc291cmNlVHlwZXMuanMnO1xuZXhwb3J0IHR5cGUge1xuICBSZXNvdXJjZUV4dGVuc2lvbixcbiAgUmVzb3VyY2VFbmRwb2ludEV4dGVuc2lvbnMsXG4gIEN1c3RvbVJlc291cmNlLFxuICBFeHRlbmRlZFJlc291cmNlLFxufSBmcm9tICcuL3Jlc291cmNlRXh0ZW5zaW9uVHlwZXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBob29raWZ5UmVzb3VyY2UgfSBmcm9tICcuL2hvb2tpZnlSZXNvdXJjZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEhvb2tSZXNvdXJjZSxcbiAgSG9va2FibGVFbmRwb2ludEludGVyZmFjZSxcbn0gZnJvbSAnLi9ob29raWZ5UmVzb3VyY2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOZXR3b3JrRXJyb3IgfSBmcm9tICcuL05ldHdvcmtFcnJvci5qcyc7XG5leHBvcnQgdHlwZSB7IE9wdGlvbnNUb0Z1bmN0aW9uIH0gZnJvbSAnLi9PcHRpb25zVG9GdW5jdGlvbi5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFNob3J0ZW5QYXRoLFxuICBQYXRoQXJncyxcbiAgUGF0aEtleXMsXG4gIEtleXNUb0FyZ3MsXG4gIFBhdGhBcmdzQW5kU2VhcmNoLFxufSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIHsgQ29sbGVjdGlvbk9wdGlvbnMgfSBmcm9tICdAZGF0YS1jbGllbnQvZW5kcG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnQGRhdGEtY2xpZW50L2VuZHBvaW50JztcbmV4cG9ydCAqIGZyb20gJy4vUmVzdEVuZHBvaW50LmpzJztcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxJQUFJQyxZQUFZLFFBQVEsbUJBQW1CO0FBbUIzRCxTQUFTQyxVQUFVLEVBQUVDLFlBQVksUUFBUSxrQkFBa0I7QUFDM0QsU0FBU0gsT0FBTyxJQUFJSSxRQUFRLFFBQVEsZUFBZTtBQUNuRCxTQUFTSixPQUFPLElBQUlLLGNBQWMsUUFBUSxlQUFlO0FBYXpELFNBQVNMLE9BQU8sSUFBSU0sZUFBZSxRQUFRLHNCQUFzQjtBQUtqRSxTQUFTTixPQUFPLElBQUlPLFlBQVksUUFBUSxtQkFBbUI7QUFXM0QsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyxtQkFBbUIiLCJpZ25vcmVMaXN0IjpbXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@data-client/rest",
3
- "version": "0.16.5",
3
+ "version": "0.16.6",
4
4
  "description": "Quickly define typed REST resources and endpoints",
5
5
  "homepage": "https://dataclient.io/rest",
6
6
  "repository": {
@@ -136,7 +136,7 @@
136
136
  "license": "Apache-2.0",
137
137
  "dependencies": {
138
138
  "@babel/runtime": "^7.20.0",
139
- "@data-client/endpoint": "^0.16.3",
139
+ "@data-client/endpoint": "^0.16.6",
140
140
  "path-to-regexp": "^8.1.0"
141
141
  },
142
142
  "devDependencies": {
@@ -12,6 +12,16 @@ import {
12
12
  isPojo,
13
13
  } from './RestHelpers.js';
14
14
 
15
+ const textLikeRe =
16
+ /\btext\b|\bxml\b|\bhtml\b|\bjavascript\b|\bcss\b|\bcsv\b|\burlencoded\b/;
17
+
18
+ function jsonResponse(response) {
19
+ return response.json().catch(error => {
20
+ error.status = 400;
21
+ throw error;
22
+ });
23
+ }
24
+
15
25
  /** Simplifies endpoint definitions that follow REST patterns
16
26
  *
17
27
  * @see https://dataclient.io/rest/api/RestEndpoint
@@ -54,6 +64,21 @@ export default class RestEndpoint extends Endpoint {
54
64
  (!('body' in this) || this.body !== undefined) &&
55
65
  !['GET', 'DELETE'].includes(this.method);
56
66
 
67
+ /* istanbul ignore else */
68
+ if (process.env.NODE_ENV !== 'production') {
69
+ if (
70
+ this.content &&
71
+ this.content !== 'json' &&
72
+ this.schema != null &&
73
+ typeof this.schema !== 'string' &&
74
+ typeof this.schema !== 'undefined'
75
+ ) {
76
+ console.error(
77
+ `content '${this.content}' is incompatible with schema. Binary/text responses cannot be normalized. Use schema: undefined.`,
78
+ );
79
+ }
80
+ }
81
+
57
82
  Object.defineProperty(this, 'name', {
58
83
  get() {
59
84
  // using 'in' to ensure inheritance lookup
@@ -143,50 +168,76 @@ export default class RestEndpoint extends Endpoint {
143
168
  }
144
169
 
145
170
  parseResponse(response) {
146
- // this should not have any content to read
147
171
  if (response.status === 204) return Promise.resolve(null);
148
- if (!response.headers.get('content-type')?.includes('json')) {
149
- return response.text().then(text => {
150
- // string or 'not set' schema, are valid
151
- // when overriding process they might handle other cases, so we don't want to block on our logic
172
+
173
+ if (this.content) {
174
+ /* istanbul ignore else */
175
+ if (process.env.NODE_ENV !== 'production') {
176
+ if (
177
+ this.content !== 'json' &&
178
+ this.schema != null &&
179
+ typeof this.schema !== 'string' &&
180
+ typeof this.schema !== 'undefined'
181
+ ) {
182
+ const error = new NetworkError(response);
183
+ error.status = 400;
184
+ error.message = `content '${this.content}' is incompatible with schema. Binary/text responses cannot be normalized. Use schema: undefined.`;
185
+ throw error;
186
+ }
187
+ }
188
+ if (this.content === 'stream') return Promise.resolve(response.body);
189
+ return this.content === 'json' ?
190
+ jsonResponse(response)
191
+ : response[this.content]();
192
+ }
193
+
194
+ const contentType = response.headers.get('content-type');
195
+ if (contentType?.includes('json')) return jsonResponse(response);
196
+
197
+ const isBinary = contentType && !textLikeRe.test(contentType);
198
+
199
+ if (
200
+ typeof this.schema === 'string' ||
201
+ typeof this.schema === 'undefined' ||
202
+ this.schema === null ||
203
+ this.process !== RestEndpoint.prototype.process
204
+ )
205
+ return isBinary ? response.blob() : response.text();
206
+
207
+ if (isBinary) {
208
+ const error = new NetworkError(response);
209
+ error.status = 400;
210
+ error.message = `Unexpected binary content-type for schema ${this.schema}`;
211
+ /* istanbul ignore else */
212
+ if (process.env.NODE_ENV !== 'production') {
213
+ error.message = `Unexpected binary content-type "${contentType}" for schema ${this.schema}. Binary responses cannot be normalized. Use schema: undefined or set content: 'blob'.`;
214
+ }
215
+ throw error;
216
+ }
217
+
218
+ return response.text().then(text => {
219
+ const error = new NetworkError(response);
220
+ error.status = 404;
221
+ error.message = `Unexpected text response for schema ${this.schema}`;
222
+ /* istanbul ignore else */
223
+ if (process.env.NODE_ENV !== 'production') {
152
224
  if (
153
- ['string', 'undefined'].includes(typeof this.schema) ||
154
- this.schema === null ||
155
- this.process !== RestEndpoint.prototype.process
156
- )
157
- return text;
158
-
159
- const error = new NetworkError(response);
160
- error.status = 404;
161
- error.message = `Unexpected text response for schema ${this.schema}`;
162
- // custom dev-only messages for more detailed cause
163
- /* istanbul ignore else */
164
- if (process.env.NODE_ENV !== 'production') {
165
- if (
166
- !(
167
- response.headers.get('content-type')?.includes('html') ||
168
- text.startsWith('<!doctype html>')
169
- )
170
- ) {
171
- if (tryParse(text) !== undefined) {
172
- error.message = `"content-type" header does not include "json", but JSON response found.
225
+ !(contentType?.includes('html') || text.startsWith('<!doctype html>'))
226
+ ) {
227
+ if (tryParse(text) !== undefined) {
228
+ error.message = `"content-type" header does not include "json", but JSON response found.
173
229
  See https://www.rfc-editor.org/rfc/rfc4627 for information on JSON responses
174
230
 
175
231
  Using parsed JSON.
176
232
  If text content was expected see https://dataclient.io/rest/api/RestEndpoint#parseResponse`;
177
- }
178
- } else {
179
- error.message = `Unexpected html response for schema ${this.schema}
233
+ }
234
+ } else {
235
+ error.message = `Unexpected html response for schema ${this.schema}
180
236
  This likely means no API endpoint was configured for this request, resulting in an HTML fallback.
181
237
 
182
238
  Response (first 300 characters): ${text.substring(0, 300)}`;
183
- }
184
239
  }
185
- throw error;
186
- });
187
- }
188
- return response.json().catch(error => {
189
- error.status = 400;
240
+ }
190
241
  throw error;
191
242
  });
192
243
  }
@@ -1,4 +1,5 @@
1
1
  import type {
2
+ Denormalize,
2
3
  EndpointExtraOptions,
3
4
  EndpointInstanceInterface,
4
5
  Schema,
@@ -14,6 +15,23 @@ import {
14
15
  import { PathArgs, SoftPathArgs } from './pathTypes.js';
15
16
  import { EndpointUpdateFunction } from './RestEndpointTypeHelp.js';
16
17
 
18
+ export type ContentType = 'json' | 'blob' | 'text' | 'arrayBuffer' | 'stream';
19
+
20
+ interface ContentTypeMap {
21
+ blob: Blob;
22
+ text: string;
23
+ arrayBuffer: ArrayBuffer;
24
+ stream: ReadableStream<Uint8Array>;
25
+ json: any;
26
+ }
27
+
28
+ type ContentReturnType<C extends ContentType> = ContentTypeMap[C];
29
+
30
+ type ContentSchemaGuard<O> =
31
+ O extends { content: 'blob' | 'text' | 'arrayBuffer' | 'stream' } ?
32
+ { schema?: undefined }
33
+ : {};
34
+
17
35
  export interface RestInstanceBase<
18
36
  F extends FetchFunction = FetchFunction,
19
37
  S extends Schema | undefined = any,
@@ -48,6 +66,8 @@ export interface RestInstanceBase<
48
66
  readonly signal: AbortSignal | undefined;
49
67
  /** @see https://dataclient.io/rest/api/RestEndpoint#paginationField */
50
68
  readonly paginationField?: string;
69
+ /** @see https://dataclient.io/rest/api/RestEndpoint#content */
70
+ readonly content?: ContentType;
51
71
 
52
72
  /* fetch lifecycles */
53
73
  /* before-fetch */
@@ -105,7 +125,8 @@ export interface RestInstanceBase<
105
125
  this: E,
106
126
  options: Readonly<
107
127
  RestEndpointExtendOptions<ExtendOptions, E, F> & ExtendOptions
108
- >,
128
+ > &
129
+ ContentSchemaGuard<ExtendOptions>,
109
130
  ): RestExtendedEndpoint<ExtendOptions, E>;
110
131
  }
111
132
 
@@ -155,10 +176,10 @@ export interface RestInstance<
155
176
  push: AddEndpoint<
156
177
  F,
157
178
  ExtractCollection<S>['push'],
158
- Exclude<O, 'body' | 'method'> & {
179
+ Omit<O, 'body' | 'method'> & {
159
180
  body:
160
- | OptionsToAdderBodyArgument<O>
161
- | OptionsToAdderBodyArgument<O>[]
181
+ | OptionsToAdderBodyArgument<O, ExtractCollection<S>['push']>
182
+ | OptionsToAdderBodyArgument<O, ExtractCollection<S>['push']>[]
162
183
  | FormData;
163
184
  }
164
185
  >;
@@ -168,10 +189,10 @@ export interface RestInstance<
168
189
  unshift: AddEndpoint<
169
190
  F,
170
191
  ExtractCollection<S>['unshift'],
171
- Exclude<O, 'body' | 'method'> & {
192
+ Omit<O, 'body' | 'method'> & {
172
193
  body:
173
- | OptionsToAdderBodyArgument<O>
174
- | OptionsToAdderBodyArgument<O>[]
194
+ | OptionsToAdderBodyArgument<O, ExtractCollection<S>['unshift']>
195
+ | OptionsToAdderBodyArgument<O, ExtractCollection<S>['unshift']>[]
175
196
  | FormData;
176
197
  }
177
198
  >;
@@ -181,8 +202,13 @@ export interface RestInstance<
181
202
  assign: AddEndpoint<
182
203
  F,
183
204
  ExtractCollection<S>,
184
- Exclude<O, 'body' | 'method'> & {
185
- body: Record<string, OptionsToAdderBodyArgument<O>> | FormData;
205
+ Omit<O, 'body' | 'method'> & {
206
+ body:
207
+ | Record<
208
+ string,
209
+ OptionsToAdderBodyArgument<O, ExtractCollection<S>['assign']>
210
+ >
211
+ | FormData;
186
212
  }
187
213
  >;
188
214
  /** Remove item(s) (PATCH) from collection
@@ -191,10 +217,12 @@ export interface RestInstance<
191
217
  remove: RemoveEndpoint<
192
218
  F,
193
219
  ExtractCollection<S>['remove'],
194
- Exclude<O, 'body' | 'method'> & {
220
+ Omit<O, 'body' | 'method'> & {
195
221
  body:
196
- | OptionsToAdderBodyArgument<O>
197
- | OptionsToAdderBodyArgument<O>[]
222
+ | Partial<OptionsToAdderBodyArgument<O, ExtractCollection<S>['remove']>>
223
+ | Partial<
224
+ OptionsToAdderBodyArgument<O, ExtractCollection<S>['remove']>
225
+ >[]
198
226
  | FormData;
199
227
  }
200
228
  >;
@@ -206,7 +234,9 @@ export interface RestInstance<
206
234
  ExtractCollection<S>['move'],
207
235
  {
208
236
  path: 'movePath' extends keyof O ? O['movePath'] & string : O['path'];
209
- body: OptionsToAdderBodyArgument<O> | FormData;
237
+ body:
238
+ | Partial<OptionsToAdderBodyArgument<O, ExtractCollection<S>['move']>>
239
+ | FormData;
210
240
  }
211
241
  >;
212
242
  }
@@ -248,7 +278,10 @@ type OptionsToRestEndpoint<
248
278
  Extract<O['sideEffect'], boolean | undefined>
249
279
  : 'method' extends keyof O ? MethodToSide<O['method']>
250
280
  : E['sideEffect'],
251
- O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>,
281
+ O['process'] extends {} ? ReturnType<O['process']>
282
+ : 'content' extends keyof O ?
283
+ ContentReturnType<O['content'] & ContentType>
284
+ : ResolveType<F>,
252
285
  {
253
286
  path: Exclude<O['path'], undefined>;
254
287
  body: 'body' extends keyof O ? O['body'] : E['body'];
@@ -276,7 +309,10 @@ type OptionsToRestEndpoint<
276
309
  Extract<O['sideEffect'], boolean | undefined>
277
310
  : 'method' extends keyof O ? MethodToSide<O['method']>
278
311
  : E['sideEffect'],
279
- O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>,
312
+ O['process'] extends {} ? ReturnType<O['process']>
313
+ : 'content' extends keyof O ?
314
+ ContentReturnType<O['content'] & ContentType>
315
+ : ResolveType<F>,
280
316
  {
281
317
  path: E['path'];
282
318
  body: O['body'];
@@ -302,7 +338,10 @@ type OptionsToRestEndpoint<
302
338
  Extract<O['sideEffect'], boolean | undefined>
303
339
  : 'method' extends keyof O ? MethodToSide<O['method']>
304
340
  : E['sideEffect'],
305
- O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>,
341
+ O['process'] extends {} ? ReturnType<O['process']>
342
+ : 'content' extends keyof O ?
343
+ ContentReturnType<O['content'] & ContentType>
344
+ : ResolveType<F>,
306
345
  {
307
346
  path: E['path'];
308
347
  body: E['body'];
@@ -343,9 +382,10 @@ export type RestExtendedEndpoint<
343
382
  { paginationField: E['getPage']['paginationField'] }
344
383
  : unknown),
345
384
  RestInstance<
346
- (
347
- ...args: Parameters<E>
348
- ) => O['process'] extends {} ? Promise<ReturnType<O['process']>>
385
+ (...args: Parameters<E>) => O['process'] extends {} ?
386
+ Promise<ReturnType<O['process']>>
387
+ : 'content' extends keyof O ?
388
+ Promise<ContentReturnType<O['content'] & ContentType>>
349
389
  : ReturnType<E>,
350
390
  'schema' extends keyof O ? O['schema'] : E['schema'],
351
391
  'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined>
@@ -373,6 +413,8 @@ export interface PartialRestGenerics {
373
413
  readonly paginationField?: string;
374
414
  /** @see https://dataclient.io/rest/api/RestEndpoint#process */
375
415
  process?(value: any, ...args: any): any;
416
+ /** @see https://dataclient.io/rest/api/RestEndpoint#content */
417
+ readonly content?: ContentType;
376
418
  }
377
419
  /** Generic types when constructing a RestEndpoint
378
420
  *
@@ -532,8 +574,8 @@ type InferRestMethodWhenOmitted<O extends RestGenerics> =
532
574
  type MethodArgForBodyInference<O extends RestGenerics> =
533
575
  'method' extends keyof O ? O['method'] : InferRestMethodWhenOmitted<O>;
534
576
 
535
- type OptionsToAdderBodyArgument<O extends { body?: any }> =
536
- 'body' extends keyof O ? O['body'] : any;
577
+ type OptionsToAdderBodyArgument<O extends { body?: any }, EntitySchema = any> =
578
+ 'body' extends keyof O ? O['body'] : Partial<Denormalize<EntitySchema>>;
537
579
 
538
580
  export interface RestEndpointOptions<
539
581
  F extends FetchFunction = FetchFunction,
@@ -560,6 +602,8 @@ export interface RestEndpointOptions<
560
602
  * @see https://dataclient.io/rest/api/RestEndpoint#parseResponse
561
603
  */
562
604
  parseResponse?(response: Response): Promise<any>;
605
+ /** @see https://dataclient.io/rest/api/RestEndpoint#content */
606
+ content?: ContentType;
563
607
 
564
608
  sideEffect?: boolean | undefined;
565
609
  name?: string;
@@ -586,6 +630,8 @@ export type RestEndpointConstructorOptions<O extends RestGenerics = any> =
586
630
  : SoftPathArgs<O['path']>,
587
631
  OptionsToBodyArgument<O, MethodArgForBodyInference<O>>,
588
632
  O['process'] extends {} ? ReturnType<O['process']>
633
+ : 'content' extends keyof O ?
634
+ ContentReturnType<O['content'] & ContentType>
589
635
  : any /*Denormalize<O['schema']>*/
590
636
  >,
591
637
  O['schema']
@@ -607,6 +653,7 @@ export interface RestEndpoint<
607
653
  : PathArgs<O['path']>,
608
654
  OptionsToBodyArgument<O, MethodArgForBodyInference<O>>,
609
655
  O['process'] extends {} ? ReturnType<O['process']>
656
+ : 'content' extends keyof O ? ContentReturnType<O['content'] & ContentType>
610
657
  : any /*Denormalize<O['schema']>*/
611
658
  >,
612
659
  'schema' extends keyof O ? O['schema'] : undefined,
@@ -628,7 +675,9 @@ export interface RestEndpointConstructor {
628
675
  sideEffect,
629
676
  name,
630
677
  ...options
631
- }: RestEndpointConstructorOptions<O> & Readonly<O>): RestEndpoint<O>;
678
+ }: RestEndpointConstructorOptions<O> &
679
+ Readonly<O> &
680
+ ContentSchemaGuard<O>): RestEndpoint<O>;
632
681
  readonly prototype: RestInstanceBase;
633
682
  }
634
683