@decaf-ts/for-fabric 0.1.46 → 0.1.48

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.
@@ -638,13 +638,16 @@ export class FabricClientAdapter extends Adapter {
638
638
  pathOrCert = Buffer.from(fs.readFileSync(pathOrCert, "utf8"));
639
639
  }
640
640
  catch (e) {
641
- throw new InternalError(`Failed to read the tls certificate from ${pathOrCert}`);
641
+ throw new InternalError(`Failed to read the tls certificate from ${pathOrCert}: ${e}`);
642
642
  }
643
643
  }
644
644
  }
645
645
  const tlsCredentials = grpc.credentials.createSsl(pathOrCert);
646
646
  log.debug(`generating Gateway Client for url ${config.peerEndpoint}`);
647
- return new Client(config.peerEndpoint, tlsCredentials);
647
+ return new Client(config.peerEndpoint, tlsCredentials, {
648
+ "grpc.max_receive_message_length": (config.sizeLimit || 15) * 1024 * 1024,
649
+ "grpc.max_send_message_length": (config.sizeLimit || 15) * 1024 * 1024,
650
+ });
648
651
  }
649
652
  /**
650
653
  * @description Establishes a connection to the Fabric network
@@ -824,4 +827,4 @@ __decorate([
824
827
  ], FabricClientAdapter.prototype, "raw", null);
825
828
  FabricClientAdapter.decoration();
826
829
  Adapter.setCurrent(FabricFlavour);
827
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ2xpZW50QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvRmFicmljQ2xpZW50QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsd0NBQTZCO0FBQzdCLE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsS0FBSyxHQUdOLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUQsT0FBTyxFQUNMLE9BQU8sR0FPUixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLHVCQUFvQjtBQUNyRCxPQUFPLEVBRUwsYUFBYSxFQUNiLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixhQUFhLEVBQ2IsZUFBZSxHQUVoQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUVQLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLGNBQWMsRUFDZCxhQUFhLEVBQ2IsV0FBVyxFQUNYLGVBQWUsRUFDZixVQUFVLEVBRVYsZ0JBQWdCLEdBT2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQ0FBNEI7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdDQUFtQztBQUU5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXFCO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQ0FBZ0M7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFF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Q0FBQztZQUN2QyxPQUFPLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDMUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQU0sQ0FBQztJQUNyQyxDQUFDOztBQWxwQmM7SUFGZCxLQUFLLEVBQUU7SUFDUCxLQUFLLEVBQUU7O3FFQU1rQixPQUFPOztpREFtQmhDO0FBV0s7SUFGTCxLQUFLLEVBQUU7SUFDUCxLQUFLLEVBQUU7O3FEQUlrQixPQUFPOzsrQ0FnQmhDO0FBNEJLO0lBRkwsS0FBSyxFQUFFO0lBQ1AsS0FBSyxFQUFFOztxRUFNa0IsT0FBTzs7aURBb0JoQztBQVdjO0lBRmQsS0FBSyxFQUFFO0lBQ1AsS0FBSyxFQUFFOztxREFJa0IsT0FBTzs7aURBZWhDO0FBNEJLO0lBREwsS0FBSyxFQUFFOztpRUFHSSxDQUFDLG9CQUFELENBQUMsd0NBRWEsT0FBTzs7OENBd0NoQztBQXFjSCxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiLi4vc2hhcmVkL292ZXJyaWRlc1wiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMsIHR5cGUgTWFuZ29RdWVyeSB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7IENsaWVudCB9IGZyb20gXCJAZ3JwYy9ncnBjLWpzXCI7XG5pbXBvcnQgKiBhcyBncnBjIGZyb20gXCJAZ3JwYy9ncnBjLWpzXCI7XG5pbXBvcnQge1xuICBNb2RlbCxcbiAgdHlwZSBNb2RlbENvbnN0cnVjdG9yLFxuICB0eXBlIFNlcmlhbGl6ZXIsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGRlYnVnLCBmaW5hbCwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdHlwZSBQZWVyQ29uZmlnLCB0eXBlIFNlZ3JlZ2F0ZWRNb2RlbCB9IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGNvbm5lY3QsXG4gIHR5cGUgQ29ubmVjdE9wdGlvbnMsXG4gIEdhdGV3YXksXG4gIE5ldHdvcmssXG4gIFByb3Bvc2FsT3B0aW9ucyxcbiAgQ29udHJhY3QgYXMgQ29udHJha3QsXG4gIHR5cGUgU2lnbmVyLFxufSBmcm9tIFwiQGh5cGVybGVkZ2VyL2ZhYnJpYy1nYXRld2F5XCI7XG5pbXBvcnQgeyBnZXRJZGVudGl0eSwgZ2V0U2lnbmVyIH0gZnJvbSBcIi4vZmFicmljLWZzXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIEludGVybmFsRXJyb3IsXG4gIE9wZXJhdGlvbktleXMsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbiAgQnVsa0NydWRPcGVyYXRpb25LZXlzLFxuICBOb3RGb3VuZEVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBCYWRSZXF1ZXN0RXJyb3IsXG4gIHR5cGUgUHJpbWFyeUtleVR5cGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHtcbiAgQ29udGV4dCxcbiAgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRmxhZ3MsXG4gIEF1dGhvcml6YXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBGb3JiaWRkZW5FcnJvcixcbiAgTWlncmF0aW9uRXJyb3IsXG4gIE9ic2VydmVyRXJyb3IsXG4gIFBhZ2luZ0Vycm9yLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFF1ZXJ5RXJyb3IsXG4gIFJlcG9zaXRvcnksXG4gIFVuc3VwcG9ydGVkRXJyb3IsXG4gIFN0YXRlbWVudCxcbiAgdHlwZSBQcmVwYXJlZFN0YXRlbWVudCxcbiAgUGFnaW5hdG9yLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIENvbnRleHR1YWxBcmdzLFxuICB0eXBlIFByZXBhcmVkTW9kZWwsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgRmFicmljRmxhdm91ciB9IGZyb20gXCIuLi9zaGFyZWQvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDbGllbnRTZXJpYWxpemVyIH0gZnJvbSBcIi4uL3NoYXJlZC9DbGllbnRTZXJpYWxpemVyXCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnREaXNwYXRjaCB9IGZyb20gXCIuL0ZhYnJpY0NsaWVudERpc3BhdGNoXCI7XG5pbXBvcnQgeyBIU01TaWduZXJGYWN0b3J5Q3VzdG9tIH0gZnJvbSBcIi4vZmFicmljLWhzbVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgRmFicmljQ2xpZW50U3RhdGVtZW50IH0gZnJvbSBcIi4vRmFicmljQ2xpZW50U3RhdGVtZW50XCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnRQYWdpbmF0b3IgfSBmcm9tIFwiLi9GYWJyaWNDbGllbnRQYWdpbmF0b3JcIjtcbmltcG9ydCB7IEZhYnJpY0NsaWVudFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9GYWJyaWNDbGllbnRSZXBvc2l0b3J5XCI7XG5pbXBvcnQge1xuICBFbmRvcnNlbWVudEVycm9yLFxuICBFbmRvcnNlbWVudFBvbGljeUVycm9yLFxuICBNdmNjUmVhZENvbmZsaWN0RXJyb3IsXG4gIFBoYW50b21SZWFkQ29uZmxpY3RFcnJvcixcbn0gZnJvbSBcIi4uL3NoYXJlZC9lcnJvcnNcIjtcbmltcG9ydCB7IEZhYnJpY0NsaWVudEZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IERlZmF1bHRGYWJyaWNDbGllbnRGbGFncyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQWRhcHRlciBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIeXBlcmxlZGdlciBGYWJyaWMgbmV0d29ya3NcbiAqIEBzdW1tYXJ5IFRoZSBGYWJyaWNBZGFwdGVyIGV4dGVuZHMgQ291Y2hEQkFkYXB0ZXIgdG8gcHJvdmlkZSBhIHNlYW1sZXNzIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIeXBlcmxlZGdlciBGYWJyaWMgbmV0d29ya3MuXG4gKiBJdCBoYW5kbGVzIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgdHJhbnNhY3Rpb24gc3VibWlzc2lvbiwgYW5kIENSVUQgb3BlcmF0aW9ucyBhZ2FpbnN0IEZhYnJpYyBjaGFpbmNvZGUuXG4gKiBAdGVtcGxhdGUgUGVlckNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdHlwZSBmb3IgY29ubmVjdGluZyB0byBhIEZhYnJpYyBwZWVyXG4gKiBAdGVtcGxhdGUgRmFicmljRmxhZ3MgLSBGbGFncyBzcGVjaWZpYyB0byBGYWJyaWMgb3BlcmF0aW9uc1xuICogQHRlbXBsYXRlIENvbnRleHQ8RmFicmljRmxhZ3M+IC0gQ29udGV4dCB0eXBlIGNvbnRhaW5pbmcgRmFicmljLXNwZWNpZmljIGZsYWdzXG4gKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGluZyB0byBhIEZhYnJpYyBwZWVyXG4gKiBAcGFyYW0gYWxpYXMgLSBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIGFkYXB0ZXIgaW5zdGFuY2VcbiAqIEBjbGFzcyBGYWJyaWNDbGllbnRBZGFwdGVyXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbmV3IEZhYnJpY0FkYXB0ZXIgaW5zdGFuY2VcbiAqIGNvbnN0IGNvbmZpZzogUGVlckNvbmZpZyA9IHtcbiAqICAgbXNwSWQ6ICdPcmcxTVNQJyxcbiAqICAgcGVlckVuZHBvaW50OiAnbG9jYWxob3N0OjcwNTEnLFxuICogICBjaGFubmVsTmFtZTogJ215Y2hhbm5lbCcsXG4gKiAgIGNoYWluY29kZU5hbWU6ICdteWNjJyxcbiAqICAgY29udHJhY3ROYW1lOiAnbXljb250cmFjdCcsXG4gKiAgIHRsc0NlcnRQYXRoOiAnL3BhdGgvdG8vdGxzL2NlcnQnLFxuICogICBjZXJ0RGlyZWN0b3J5UGF0aDogJy9wYXRoL3RvL2NlcnQvZGlyJyxcbiAqICAga2V5RGlyZWN0b3J5UGF0aDogJy9wYXRoL3RvL2tleS9kaXInXG4gKiB9O1xuICpcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgRmFicmljQWRhcHRlcihjb25maWcsICdvcmcxLWFkYXB0ZXInKTtcbiAqXG4gKiAvLyBVc2UgdGhlIGFkYXB0ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgRmFicmljIG5ldHdvcmtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFkYXB0ZXIucmVhZCgndXNlcnMnLCAndXNlcjEnLCBteVNlcmlhbGl6ZXIpO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBGYWJyaWNBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IEdhdGV3YXlcbiAqICAgcGFydGljaXBhbnQgTmV0d29ya1xuICogICBwYXJ0aWNpcGFudCBDb250cmFjdFxuICogICBwYXJ0aWNpcGFudCBDaGFpbmNvZGVcbiAqXG4gKiAgIENsaWVudC0+PkZhYnJpY0FkYXB0ZXI6IGNyZWF0ZSh0YWJsZU5hbWUsIGlkLCBtb2RlbCwgdHJhbnNpZW50LCBzZXJpYWxpemVyKVxuICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogc3VibWl0VHJhbnNhY3Rpb24oT3BlcmF0aW9uS2V5cy5DUkVBVEUsIFtzZXJpYWxpemVkTW9kZWxdLCB0cmFuc2llbnQpXG4gKiAgIEZhYnJpY0FkYXB0ZXItPj5HYXRld2F5OiBjb25uZWN0KClcbiAqICAgR2F0ZXdheS0+Pk5ldHdvcms6IGdldE5ldHdvcmsoY2hhbm5lbE5hbWUpXG4gKiAgIE5ldHdvcmstPj5Db250cmFjdDogZ2V0Q29udHJhY3QoY2hhaW5jb2RlTmFtZSwgY29udHJhY3ROYW1lKVxuICogICBGYWJyaWNBZGFwdGVyLT4+Q29udHJhY3Q6IHN1Ym1pdChhcGksIHByb3Bvc2FsT3B0aW9ucylcbiAqICAgQ29udHJhY3QtPj5DaGFpbmNvZGU6IGludm9rZVxuICogICBDaGFpbmNvZGUtLT4+Q29udHJhY3Q6IHJlc3BvbnNlXG4gKiAgIENvbnRyYWN0LS0+PkZhYnJpY0FkYXB0ZXI6IHJlc3VsdFxuICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogZGVjb2RlKHJlc3VsdClcbiAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZGVjb2RlZFJlc3VsdClcbiAqICAgRmFicmljQWRhcHRlci0tPj5DbGllbnQ6IGRlc2VyaWFsaXplZFJlc3VsdFxuICovXG5leHBvcnQgY2xhc3MgRmFicmljQ2xpZW50QWRhcHRlciBleHRlbmRzIEFkYXB0ZXI8XG4gIFBlZXJDb25maWcsXG4gIENsaWVudCxcbiAgTWFuZ29RdWVyeSxcbiAgQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz5cbj4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyB0ZXh0IGRlY29kZXIgZm9yIGNvbnZlcnRpbmcgVWludDhBcnJheSB0byBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpO1xuXG4gIHByaXZhdGUgc3RhdGljIHNlcmlhbGl6ZXIgPSBuZXcgQ2xpZW50U2VyaWFsaXplcigpO1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgbG9nID0gTG9nZ2luZy5mb3IoRmFicmljQ2xpZW50QWRhcHRlcik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcmlhbGl6ZXI6IFNlcmlhbGl6ZXI8YW55PiA9XG4gICAgRmFicmljQ2xpZW50QWRhcHRlci5zZXJpYWxpemVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBGYWJyaWNBZGFwdGVyIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGFkYXB0ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggYSBIeXBlcmxlZGdlciBGYWJyaWMgbmV0d29ya1xuICAgKiBAcGFyYW0ge1BlZXJDb25maWd9IGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZm9yIGNvbm5lY3RpbmcgdG8gYSBGYWJyaWMgcGVlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIE9wdGlvbmFsIGFsaWFzIGZvciB0aGUgYWRhcHRlciBpbnN0YW5jZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQZWVyQ29uZmlnLCBhbGlhcz86IHN0cmluZykge1xuICAgIHN1cGVyKGNvbmZpZywgRmFicmljRmxhdm91ciwgYWxpYXMpO1xuICB9XG5cbiAgb3ZlcnJpZGUgU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxBZGFwdGVyRmxhZ3M+XG4gICk6IFN0YXRlbWVudDxNLCBGYWJyaWNDbGllbnRBZGFwdGVyLCBhbnksIE1hbmdvUXVlcnk+IHtcbiAgICByZXR1cm4gbmV3IEZhYnJpY0NsaWVudFN0YXRlbWVudCh0aGlzLCBvdmVycmlkZXMpO1xuICB9XG5cbiAgUGFnaW5hdG9yPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgcXVlcnk6IFByZXBhcmVkU3RhdGVtZW50PGFueT4gfCBNYW5nb1F1ZXJ5LFxuICAgIHNpemU6IG51bWJlcixcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT5cbiAgKTogUGFnaW5hdG9yPE0sIGFueSwgTWFuZ29RdWVyeT4ge1xuICAgIHJldHVybiBuZXcgRmFicmljQ2xpZW50UGFnaW5hdG9yKHRoaXMsIHF1ZXJ5LCBzaXplLCBjbGF6eik7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBjb250ZXh0PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb3BlcmF0aW9uOlxuICAgICAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLlJFQURcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5VUERBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEVcbiAgICAgIHwgc3RyaW5nLFxuICAgIG92ZXJyaWRlczogUGFydGlhbDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgQ29uc3RydWN0b3I8TT5bXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PiB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuY29udGV4dCk7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYENyZWF0aW5nIG5ldyBjb250ZXh0IGZvciAke29wZXJhdGlvbn0gb3BlcmF0aW9uIG9uICR7QXJyYXkuaXNBcnJheShtb2RlbCkgPyBtb2RlbC5tYXAoKG0pID0+IG0ubmFtZSkgOiBtb2RlbC5uYW1lfSBtb2RlbCB3aXRoIGZsYWcgb3ZlcnJpZGVzOiAke0pTT04uc3RyaW5naWZ5KG92ZXJyaWRlcyl9YFxuICAgICk7XG4gICAgY29uc3QgZmxhZ3MgPSBhd2FpdCB0aGlzLmZsYWdzKFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgbW9kZWwsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0RmFicmljQ2xpZW50RmxhZ3MsIG92ZXJyaWRlcyksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IENvbnRleHQoKS5hY2N1bXVsYXRlKGZsYWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVjb2RlcyBhIFVpbnQ4QXJyYXkgdG8gYSBzdHJpbmdcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYmluYXJ5IGRhdGEgcmVjZWl2ZWQgZnJvbSBGYWJyaWMgdG8gYSBzdHJpbmcgdXNpbmcgVVRGLTggZW5jb2RpbmdcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhIC0gVGhlIGJpbmFyeSBkYXRhIHRvIGRlY29kZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZWNvZGVkIHN0cmluZ1xuICAgKi9cbiAgZGVjb2RlKGRhdGE6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiBGYWJyaWNDbGllbnRBZGFwdGVyLmRlY29kZXIuZGVjb2RlKGRhdGEpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVwb3NpdG9yeTxcbiAgICBSIGV4dGVuZHMgUmVwb3NpdG9yeTxcbiAgICAgIGFueSxcbiAgICAgIEFkYXB0ZXI8UGVlckNvbmZpZywgQ2xpZW50LCBNYW5nb1F1ZXJ5LCBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgICA+LFxuICA+KCk6IENvbnN0cnVjdG9yPFI+IHtcbiAgICByZXR1cm4gRmFicmljQ2xpZW50UmVwb3NpdG9yeSBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFI+O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVByZWZpeDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBbQ29uc3RydWN0b3I8TT4sIFByaW1hcnlLZXlUeXBlLCBSZWNvcmQ8c3RyaW5nLCBhbnk+LCAuLi5hbnlbXSwgQ29udGV4dF0ge1xuICAgIGNvbnN0IHsgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5jcmVhdGVQcmVmaXgpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWwpO1xuICAgIHJldHVybiBbY2xhenosIGlkLCByZWNvcmQsIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBtdWx0aXBsZSByZWNvcmRzIGZvciBjcmVhdGlvblxuICAgKiBAc3VtbWFyeSBBZGRzIG5lY2Vzc2FyeSBDb3VjaERCIGZpZWxkcyB0byBtdWx0aXBsZSByZWNvcmRzIGJlZm9yZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGlkcyAtIFRoZSBJRHMgb2YgdGhlIHJlY29yZHNcbiAgICogQHBhcmFtIG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gcHJlcGFyZVxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgdGFibGVOYW1lLCBpZHMsIGFuZCBwcmVwYXJlZCByZWNvcmRzXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIGlkcyBhbmQgbW9kZWxzIGFycmF5cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlQWxsUHJlZml4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkczogc3RyaW5nW10gfCBudW1iZXJbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmNyZWF0ZUFsbFByZWZpeCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IGlkcy5tYXAoKGlkLCBjb3VudCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsc1tjb3VudF0pO1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NsYXp6LCBpZHMsIHJlY29yZHMsIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUFsbFByZWZpeDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApIHtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIGNvbnN0IHsgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGVBbGxQcmVmaXgpO1xuICAgIGNvbnN0IHJlY29yZHMgPSBpZHMubWFwKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjbGF6eiwgaWRzLCByZWNvcmRzLCAuLi5jdHhBcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBtdWx0aXBsZSByZWNvcmRzIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byBjcmVhdGUgbXVsdGlwbGUgcmVjb3JkcyBpbiB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IG51bWJlcltdfSBpZHMgLSBBcnJheSBvZiByZWNvcmQgaWRlbnRpZmllcnNcbiAgICogQHBhcmFtIHtBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gbW9kZWxzIC0gQXJyYXkgb2YgcmVjb3JkIGRhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB0cmFuc2llbnQgLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCByZWNvcmRzXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBjcmVhdGVBbGw8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIGNvbnN0IGN0eEFyZ3MgPSBbLi4uKGFyZ3MgYXMgdW5rbm93biBhcyBhbnlbXSldO1xuICAgIGNvbnN0IHRyYW5zaWVudCA9IGN0eEFyZ3Muc2hpZnQoKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KFxuICAgICAgY3R4QXJncyBhcyBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4sXG4gICAgICB0aGlzLmNyZWF0ZUFsbFxuICAgICk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcblxuICAgIGxvZy5pbmZvKGBhZGRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTCxcbiAgICAgIFtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtLCBjbGF6ei5uYW1lKSlcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICB0cmFuc2llbnQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5kZWNvZGUocmVzdWx0KSkubWFwKChyOiBhbnkpID0+IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWFkcyBtdWx0aXBsZSByZWNvcmRzIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byByZWFkIG11bHRpcGxlIHJlY29yZHMgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IG51bWJlcltdfSBpZHMgLSBBcnJheSBvZiByZWNvcmQgaWRlbnRpZmllcnMgdG8gcmVhZFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJldHJpZXZlZCByZWNvcmRzXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyByZWFkQWxsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkczogUHJpbWFyeUtleVR5cGVbXSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnJlYWRBbGwpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLmluZm8oYHJlYWRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5SRUFEX0FMTCxcbiAgICAgIFtKU09OLnN0cmluZ2lmeShpZHMpXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRlY29kZShyZXN1bHQpKS5tYXAoKHI6IGFueSkgPT4gSlNPTi5wYXJzZShyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gdXBkYXRlIG11bHRpcGxlIHJlY29yZHMgaW4gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBudW1iZXJbXX0gaWRzIC0gQXJyYXkgb2YgcmVjb3JkIGlkZW50aWZpZXJzXG4gICAqIEBwYXJhbSB7QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj59IG1vZGVscyAtIEFycmF5IG9mIHVwZGF0ZWQgcmVjb3JkIGRhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB0cmFuc2llbnQgLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdXBkYXRlZCByZWNvcmRzXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyB1cGRhdGVBbGw8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIGNvbnN0IGN0eEFyZ3MgPSBbLi4uKGFyZ3MgYXMgdW5rbm93biBhcyBhbnlbXSldO1xuICAgIGNvbnN0IHRyYW5zaWVudCA9IGN0eEFyZ3Muc2hpZnQoKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KFxuICAgICAgY3R4QXJncyBhcyBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4sXG4gICAgICB0aGlzLnVwZGF0ZUFsbFxuICAgICk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cuaW5mbyhgdXBkYXRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMLFxuICAgICAgW1xuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBtb2RlbHMubWFwKChtKSA9PiB0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG0sIGNsYXp6Lm5hbWUpKVxuICAgICAgICApLFxuICAgICAgXSxcbiAgICAgIHRyYW5zaWVudCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRlY29kZShyZXN1bHQpKS5tYXAoKHI6IGFueSkgPT4gSlNPTi5wYXJzZShyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gZGVsZXRlIG11bHRpcGxlIHJlY29yZHMgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+fSBpZHMgLSBBcnJheSBvZiByZWNvcmQgaWRlbnRpZmllcnMgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7U2VyaWFsaXplcjxhbnk+fSBzZXJpYWxpemVyIC0gU2VyaWFsaXplciBmb3IgdGhlIG1vZGVsIGRhdGFcbiAgICogQHJldHVybiB7UHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIHJlY29yZHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gQWRhcHRlci5sb2dDdHgoYXJncywgdGhpcy5kZWxldGVBbGwpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLmluZm8oYGRlbGV0aW5nICR7aWRzLmxlbmd0aH0gZW50cmllcyB0byAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cudmVyYm9zZShgcGtzOiAke2lkc31gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLkRFTEVURV9BTEwsXG4gICAgICBbSlNPTi5zdHJpbmdpZnkoaWRzKV0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5kZWNvZGUocmVzdWx0KSkubWFwKChyOiBhbnkpID0+IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhIG1vZGVsIGZvciBwZXJzaXN0ZW5jZVxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBhIG1vZGVsIGluc3RhbmNlIGludG8gYSBmb3JtYXQgc3VpdGFibGUgZm9yIGRhdGFiYXNlIHN0b3JhZ2UsXG4gICAqIGhhbmRsaW5nIGNvbHVtbiBtYXBwaW5nIGFuZCBzZXBhcmF0aW5nIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB0byBwcmVwYXJlXG4gICAqIEBwYXJhbSBwayAtIFRoZSBwcmltYXJ5IGtleSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm4gVGhlIHByZXBhcmVkIGRhdGFcbiAgICovXG4gIG92ZXJyaWRlIHByZXBhcmU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogU2VncmVnYXRlZE1vZGVsPE0+ICYgUHJlcGFyZWRNb2RlbCB7XG4gICAgY29uc3QgeyBsb2cgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucHJlcGFyZSk7XG4gICAgY29uc3Qgc3BsaXQgPSBNb2RlbC5zZWdyZWdhdGUobW9kZWwpO1xuICAgIGlmICgobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdKSB7XG4gICAgICBsb2cuc2lsbHkoXG4gICAgICAgIGBQYXNzaW5nIGFsb25nIHBlcnNpc3RlbmNlIG1ldGFkYXRhIGZvciAkeyhtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV19YFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzcGxpdC5tb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IChtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3JkOiBzcGxpdC5tb2RlbCxcbiAgICAgIG1vZGVsOiBzcGxpdC5tb2RlbCxcbiAgICAgIGlkOiBtb2RlbFtNb2RlbC5wayhtb2RlbC5jb25zdHJ1Y3RvciBhcyBDb25zdHJ1Y3RvcjxNPildIGFzIHN0cmluZyxcbiAgICAgIHRyYW5zaWVudDogc3BsaXQudHJhbnNpZW50LFxuICAgICAgcHJpdmF0ZTogc3BsaXQucHJpdmF0ZSxcbiAgICAgIHNoYXJlZDogc3BsaXQuc2hhcmVkLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSByZXZlcnQ8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICB0cmFuc2llbnQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBNIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZXZlcnQpO1xuICAgIGlmICh0cmFuc2llbnQpIHtcbiAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICBgcmUtYWRkaW5nIHRyYW5zaWVudCBwcm9wZXJ0aWVzOiAke09iamVjdC5rZXlzKHRyYW5zaWVudCkuam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG4gICAgICBPYmplY3QuZW50cmllcyh0cmFuc2llbnQgYXMgUmVjb3JkPHN0cmluZywgYW55PikuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICBpZiAoa2V5IGluIG9iailcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGBUcmFuc2llbnQgcHJvcGVydHkgJHtrZXl9IGFscmVhZHkgZXhpc3RzIG9uIG1vZGVsICR7dHlwZW9mIGNsYXp6ID09PSBcInN0cmluZ1wiID8gY2xhenogOiBjbGF6ei5uYW1lfS4gc2hvdWxkIGJlIGltcG9zc2libGVgXG4gICAgICAgICAgKTtcbiAgICAgICAgKG9iaiBhcyBNKVtrZXkgYXMga2V5b2YgTV0gPSB2YWw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChjbGF6eiBhcyBDb25zdHJ1Y3RvcjxNPikob2JqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGNyZWF0ZSBhIHJlY29yZCBpbiB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgcmVjb3JkIGRhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB0cmFuc2llbnQgLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHJlY29yZFxuICAgKi9cbiAgQGRlYnVnKClcbiAgQGZpbmFsKClcbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICB0cmFuc2llbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgY3R4QXJncyA9IFsuLi4oYXJncyBhcyB1bmtub3duIGFzIGFueVtdKV07XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoXG4gICAgICBjdHhBcmdzIGFzIENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PixcbiAgICAgIHRoaXMuY3JlYXRlXG4gICAgKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGxvZy52ZXJib3NlKGBhZGRpbmcgZW50cnkgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICBbdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtb2RlbCwgY2xhenoubmFtZSldLFxuICAgICAgdHJhbnNpZW50LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0aGlzLmRlY29kZShyZXN1bHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBzaW5nbGUgcmVjb3JkXG4gICAqIEBzdW1tYXJ5IEV2YWx1YXRlcyBhIHRyYW5zYWN0aW9uIHRvIHJlYWQgYSByZWNvcmQgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXRyaWV2ZWQgcmVjb3JkXG4gICAqL1xuICBAZGVidWcoKVxuICBAZmluYWwoKVxuICBhc3luYyByZWFkPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZWFkQWxsKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuXG4gICAgbG9nLnZlcmJvc2UoYHJlYWRpbmcgZW50cnkgZnJvbSAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cuZGVidWcoYHBrOiAke2lkfWApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIFtpZC50b1N0cmluZygpXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodGhpcy5kZWNvZGUocmVzdWx0KSk7XG4gIH1cblxuICB1cGRhdGVQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMudXBkYXRlUHJlZml4KTtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIC8vIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcbiAgICByZXR1cm4gW2NsYXp6LCBpZCwgcmVjb3JkLCAuLi5jdHhBcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBhIHJlY29yZCBpbiB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgdXBkYXRlZCByZWNvcmQgZGF0YVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRyYW5zaWVudCAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHVwZGF0ZWQgcmVjb3JkXG4gICAqL1xuICBAZGVidWcoKVxuICBAZmluYWwoKVxuICBhc3luYyB1cGRhdGU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHRyYW5zaWVudDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCBjdHhBcmdzID0gWy4uLihhcmdzIGFzIHVua25vd24gYXMgYW55W10pXTtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChcbiAgICAgIGN0eEFyZ3MgYXMgQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+LFxuICAgICAgdGhpcy51cGRhdGVBbGxcbiAgICApO1xuICAgIGxvZy5pbmZvKGBDTElFTlQgVVBEQVRFIGNsYXNzIDogJHt0eXBlb2YgY2xhenp9YCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cudmVyYm9zZShgdXBkYXRpbmcgZW50cnkgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICBbdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtb2RlbCwgY2xhenoubmFtZSB8fCBjbGF6eildLCAvLyBUT0RPIHNob3VsZCBiZSByZWNldmluZyBjbGFzcyBidXQgaXMgcmVjZWl2aW5nIHN0cmluZ1xuICAgICAgdHJhbnNpZW50LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0aGlzLmRlY29kZShyZXN1bHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGRlbGV0ZSBhIHJlY29yZCBmcm9tIHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgcmVjb3JkIGlkZW50aWZpZXIgdG8gZGVsZXRlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIHJlY29yZFxuICAgKi9cbiAgQGRlYnVnKClcbiAgQGZpbmFsKClcbiAgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5kZWxldGUpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLnZlcmJvc2UoYGRlbGV0aW5nIGVudHJ5IGZyb20gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICBbaWQudG9TdHJpbmcoKV0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHRoaXMuZGVjb2RlKHJlc3VsdCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHJhdyBxdWVyeSBhZ2FpbnN0IHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBzdW1tYXJ5IEV2YWx1YXRlcyBhIHRyYW5zYWN0aW9uIHRvIHBlcmZvcm0gYSBxdWVyeSB1c2luZyBNYW5nbyBRdWVyeSBzeW50YXhcbiAgICogQHRlbXBsYXRlIFYgLSBUaGUgcmV0dXJuIHR5cGVcbiAgICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSByYXdJbnB1dCAtIFRoZSBNYW5nbyBRdWVyeSB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvY2VzcyAtIFdoZXRoZXIgdG8gcHJvY2VzcyB0aGUgcmVzdWx0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Vj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBxdWVyeSByZXN1bHRcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgRmFicmljQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gICAqICAgcGFydGljaXBhbnQgQ2hhaW5jb2RlXG4gICAqXG4gICAqICAgQ2xpZW50LT4+RmFicmljQWRhcHRlcjogcmF3KHJhd0lucHV0LCBwcm9jZXNzKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBKU09OLnN0cmluZ2lmeShyYXdJbnB1dClcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogZXZhbHVhdGVUcmFuc2FjdGlvbihcInF1ZXJ5XCIsIFtpbnB1dF0pXG4gICAqICAgRmFicmljQWRhcHRlci0+PkNvbnRyYWN0OiBldmFsdWF0ZShcInF1ZXJ5XCIsIHByb3Bvc2FsT3B0aW9ucylcbiAgICogICBDb250cmFjdC0+PkNoYWluY29kZTogaW52b2tlXG4gICAqICAgQ2hhaW5jb2RlLS0+PkNvbnRyYWN0OiByZXNwb25zZVxuICAgKiAgIENvbnRyYWN0LS0+PkZhYnJpY0FkYXB0ZXI6IHJlc3VsdFxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBKU09OLnBhcnNlKGRlY29kZShyZXN1bHQpKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBQcm9jZXNzIHJlc3VsdCBiYXNlZCBvbiB0eXBlXG4gICAqICAgRmFicmljQWRhcHRlci0tPj5DbGllbnQ6IHByb2Nlc3NlZCByZXN1bHRcbiAgICovXG4gIEBkZWJ1ZygpXG4gIGFzeW5jIHJhdzxWLCBEIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgcmF3SW5wdXQ6IE1hbmdvUXVlcnksXG4gICAgZG9jc09ubHk6IEQgPSB0cnVlIGFzIEQsXG4gICAgY2xheno6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxWPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yYXcpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IGNsYXp6Lm5hbWU7XG4gICAgbG9nLmluZm8oYFBlcmZvcm1pbmcgcmF3IHN0YXRlbWVudCBvbiB0YWJsZSAke01vZGVsLnRhYmxlTmFtZShjbGF6eil9YCk7XG4gICAgbGV0IHRyYW5zYWN0aW9uUmVzdWx0OiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIHRyYW5zYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5ldmFsdWF0ZVRyYW5zYWN0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIFwicmF3XCIsXG4gICAgICAgIFtKU09OLnN0cmluZ2lmeShyYXdJbnB1dCksIGRvY3NPbmx5XSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRhYmxlTmFtZVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh0aGlzLmRlY29kZSh0cmFuc2FjdGlvblJlc3VsdCkpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgcmVzdWx0OiAke2V9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VSZWNvcmQgPSAocmVjb3JkOiBSZWNvcmQ8YW55LCBhbnk+KSA9PiB7XG4gICAgICBpZiAoTW9kZWwuaXNNb2RlbChyZWNvcmQpKSByZXR1cm4gTW9kZWwuYnVpbGQocmVjb3JkKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkgcmV0dXJuIHJlc3VsdCBhcyBWO1xuICAgICAgY29uc3QgZWwgPSByZXN1bHRbMF07XG4gICAgICBpZiAoTW9kZWwuaXNNb2RlbChlbCkpXG4gICAgICAgIC8vIGlmIHRoZSBmaXJzdCBvbmUgaXMgYSBtb2RlbCwgYWxsIGFyZSBtb2RlbHNcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoKGVsKSA9PiBNb2RlbC5idWlsZChlbCkpIGFzIFY7XG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUmVjb3JkKHJlc3VsdCBhcyBhbnkpIGFzIFY7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgb3IgY3JlYXRlcyBhIGdSUEMgY2xpZW50IGZvciB0aGUgRmFicmljIHBlZXJcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIGNhY2hlZCBjbGllbnQgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgbm9uZSBleGlzdHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDbGllbnQ+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgZ1JQQyBjbGllbnRcbiAgICovXG4gIG92ZXJyaWRlIGdldENsaWVudCgpOiBDbGllbnQge1xuICAgIGlmICghdGhpcy5fY2xpZW50KVxuICAgICAgdGhpcy5fY2xpZW50ID0gRmFicmljQ2xpZW50QWRhcHRlci5nZXRDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBHYXRld2F5IGluc3RhbmNlIGZvciB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBHYXRld2F5IGluc3RhbmNlIHVzaW5nIHRoZSBjdXJyZW50IGNsaWVudFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdhdGV3YXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgR2F0ZXdheSBpbnN0YW5jZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIEdhdGV3YXkoY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPik6IFByb21pc2U8R2F0ZXdheT4ge1xuICAgIHJldHVybiBGYWJyaWNDbGllbnRBZGFwdGVyLmdldEdhdGV3YXkoY3R4LCB0aGlzLmNvbmZpZywgdGhpcy5jbGllbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250cmFjdE5hbWUoY2xhc3NOYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKCFjbGFzc05hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGAke2NsYXNzTmFtZX1Db250cmFjdGA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBDb250cmFjdCBpbnN0YW5jZSBmb3IgdGhlIEZhYnJpYyBjaGFpbmNvZGVcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBDb250cmFjdCBpbnN0YW5jZSB1c2luZyB0aGUgY3VycmVudCBHYXRld2F5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q29udHJha3Q+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgQ29udHJhY3QgaW5zdGFuY2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBDb250cmFjdChcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGNvbnRyYWN0TmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPENvbnRyYWt0PiB7XG4gICAgcmV0dXJuIEZhYnJpY0NsaWVudEFkYXB0ZXIuZ2V0Q29udHJhY3QoXG4gICAgICBhd2FpdCB0aGlzLkdhdGV3YXkoY3R4KSxcbiAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgY29udHJhY3ROYW1lXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSB0cmFuc2FjdGlvbiBvbiB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgU3VibWl0cyBvciBldmFsdWF0ZXMgYSB0cmFuc2FjdGlvbiBvbiB0aGUgRmFicmljIGNoYWluY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpIC0gVGhlIGNoYWluY29kZSBmdW5jdGlvbiB0byBjYWxsXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VibWl0IC0gV2hldGhlciB0byBzdWJtaXQgKHRydWUpIG9yIGV2YWx1YXRlIChmYWxzZSkgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjaGFpbmNvZGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbdHJhbnNpZW50RGF0YV0gLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW2VuZG9yc2luZ09yZ2FuaXphdGlvbnNdIC0gT3JnYW5pemF0aW9ucyB0aGF0IG11c3QgZW5kb3JzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxVaW50OEFycmF5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRyYW5zYWN0aW9uIHJlc3VsdFxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBGYWJyaWNBZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgR2F0ZXdheVxuICAgKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gICAqICAgcGFydGljaXBhbnQgQ2hhaW5jb2RlXG4gICAqXG4gICAqICAgRmFicmljQWRhcHRlci0+PkdhdGV3YXk6IGNvbm5lY3QoKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogZ2V0Q29udHJhY3QoKVxuICAgKiAgIGFsdCBzdWJtaXQgdHJhbnNhY3Rpb25cbiAgICogICAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogc3VibWl0KGFwaSwgcHJvcG9zYWxPcHRpb25zKVxuICAgKiAgIGVsc2UgZXZhbHVhdGUgdHJhbnNhY3Rpb25cbiAgICogICAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogZXZhbHVhdGUoYXBpLCBwcm9wb3NhbE9wdGlvbnMpXG4gICAqICAgZW5kXG4gICAqICAgQ29udHJhY3QtPj5DaGFpbmNvZGU6IGludm9rZVxuICAgKiAgIENoYWluY29kZS0tPj5Db250cmFjdDogcmVzcG9uc2VcbiAgICogICBDb250cmFjdC0tPj5GYWJyaWNBZGFwdGVyOiByZXN1bHRcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+R2F0ZXdheTogY2xvc2UoKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHRyYW5zYWN0aW9uKFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgc3VibWl0ID0gdHJ1ZSxcbiAgICBhcmdzPzogYW55W10sXG4gICAgdHJhbnNpZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgZW5kb3JzaW5nT3JnYW5pemF0aW9ucz86IEFycmF5PHN0cmluZz4sXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nXG4gICk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnRyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBnYXRld2F5ID0gYXdhaXQgdGhpcy5HYXRld2F5KGN0eCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyYWN0ID0gYXdhaXQgdGhpcy5Db250cmFjdChcbiAgICAgICAgY3R4LFxuICAgICAgICB0aGlzLmdldENvbnRyYWN0TmFtZShjbGFzc05hbWUpXG4gICAgICApO1xuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGAke3N1Ym1pdCA/IFwiU3VibWl0XCIgOiBcIkV2YWx1YXRlXCJ9dGluZyB0cmFuc2FjdGlvbiAke3RoaXMuZ2V0Q29udHJhY3ROYW1lKGNsYXNzTmFtZSkgfHwgdGhpcy5jb25maWcuY29udHJhY3ROYW1lfS4ke2FwaX1gXG4gICAgICApO1xuICAgICAgbG9nLmRlYnVnKGBhcmdzOiAke2FyZ3M/Lm1hcCgoYSkgPT4gYS50b1N0cmluZygpKS5qb2luKFwiXFxuXCIpIHx8IFwibm9uZVwifWApO1xuICAgICAgY29uc3QgbWV0aG9kID0gc3VibWl0ID8gY29udHJhY3Quc3VibWl0IDogY29udHJhY3QuZXZhbHVhdGU7XG5cbiAgICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnMgPSBlbmRvcnNpbmdPcmdhbml6YXRpb25zPy5sZW5ndGhcbiAgICAgICAgPyBlbmRvcnNpbmdPcmdhbml6YXRpb25zXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcHJvcG9zYWxPcHRpb25zOiBQcm9wb3NhbE9wdGlvbnMgPSB7XG4gICAgICAgIGFyZ3VtZW50czogYXJncyB8fCBbXSxcbiAgICAgICAgdHJhbnNpZW50RGF0YTogdHJhbnNpZW50RGF0YSxcbiAgICAgICAgLy8gLi4uKGVuZG9yc2luZ09yZ2FuaXphdGlvbnMgJiYgeyBlbmRvcnNpbmdPcmdhbml6YXRpb25zIH0pIC8vIG1zcElkIGxpc3RcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBtZXRob2QuY2FsbChjb250cmFjdCwgYXBpLCBwcm9wb3NhbE9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUuY29kZSA9PT0gMTApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2UuZGV0YWlsc1swXS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xvc2luZyAke3RoaXMuY29uZmlnLm1zcElkfSBnYXRld2F5IGNvbm5lY3Rpb25gKTtcbiAgICAgIGdhdGV3YXkuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhbiBlcnJvciBpbnRvIGEgQmFzZUVycm9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGFueSBlcnJvciBpbnRvIGEgc3RhbmRhcmRpemVkIEJhc2VFcnJvclxuICAgKiBAcGFyYW0ge0Vycm9yIHwgc3RyaW5nfSBlcnIgLSBUaGUgZXJyb3IgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgZXJyb3JcbiAgICogQHJldHVybiB7QmFzZUVycm9yfSBUaGUgcGFyc2VkIGVycm9yXG4gICAqL1xuICBvdmVycmlkZSBwYXJzZUVycm9yPEUgZXh0ZW5kcyBCYXNlRXJyb3I+KGVycjogRXJyb3IgfCBzdHJpbmcpOiBFIHtcbiAgICByZXR1cm4gRmFicmljQ2xpZW50QWRhcHRlci5wYXJzZUVycm9yPEU+KGVycik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYSB0cmFuc2FjdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBsZWRnZXIgc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaSAtIFRoZSBjaGFpbmNvZGUgZnVuY3Rpb24gdG8gY2FsbFxuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gLSBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY2hhaW5jb2RlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gW3RyYW5zaWVudERhdGFdIC0gVHJhbnNpZW50IGRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtlbmRvcnNpbmdPcmdhbml6YXRpb25zXSAtIE9yZ2FuaXphdGlvbnMgdGhhdCBtdXN0IGVuZG9yc2UgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VWludDhBcnJheT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB0cmFuc2FjdGlvbiByZXN1bHRcbiAgICovXG4gIGFzeW5jIHN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgYXJncz86IGFueVtdLFxuICAgIHRyYW5zaWVudERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnM/OiBBcnJheTxzdHJpbmc+LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIGFwaSxcbiAgICAgIHRydWUsXG4gICAgICBhcmdzLFxuICAgICAgdHJhbnNpZW50RGF0YSxcbiAgICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnMsXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmFsdWF0ZXMgYSB0cmFuc2FjdGlvbiBvbiB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYSB0cmFuc2FjdGlvbiB0aGF0IGRvZXMgbm90IG1vZGlmeSB0aGUgbGVkZ2VyIHN0YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBUaGUgY2hhaW5jb2RlIGZ1bmN0aW9uIHRvIGNhbGxcbiAgICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIC0gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNoYWluY29kZSBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFt0cmFuc2llbnREYXRhXSAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbZW5kb3JzaW5nT3JnYW5pemF0aW9uc10gLSBPcmdhbml6YXRpb25zIHRoYXQgbXVzdCBlbmRvcnNlIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVpbnQ4QXJyYXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdHJhbnNhY3Rpb24gcmVzdWx0XG4gICAqL1xuICBhc3luYyBldmFsdWF0ZVRyYW5zYWN0aW9uKFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgYXJncz86IGFueVtdLFxuICAgIHRyYW5zaWVudERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnM/OiBBcnJheTxzdHJpbmc+LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIGFwaSxcbiAgICAgIGZhbHNlLFxuICAgICAgYXJncyxcbiAgICAgIHRyYW5zaWVudERhdGEsXG4gICAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xvc2VzIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBDbG9zZXMgdGhlIGdSUEMgY2xpZW50IGlmIGl0IGV4aXN0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2xpZW50IGlzIGNsb3NlZFxuICAgKi9cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2xpZW50KSB7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKGBDbG9zaW5nICR7dGhpcy5jb25maWcubXNwSWR9IGdhdGV3YXkgY2xpZW50YCk7XG4gICAgICB0aGlzLmNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhIENvbnRyYWN0IGluc3RhbmNlIGZyb20gYSBHYXRld2F5XG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhIGNoYWluY29kZSBjb250cmFjdCBmcm9tIHRoZSBzcGVjaWZpZWQgbmV0d29ya1xuICAgKiBAcGFyYW0ge0dhdGV3YXl9IGdhdGV3YXkgLSBUaGUgR2F0ZXdheSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1BlZXJDb25maWd9IGNvbmZpZyAtIFRoZSBwZWVyIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybiB7Q29udHJha3R9IFRoZSBDb250cmFjdCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldENvbnRyYWN0KFxuICAgIGdhdGV3YXk6IEdhdGV3YXksXG4gICAgY29uZmlnOiBQZWVyQ29uZmlnLFxuICAgIGNvbnRyYWN0TmFtZT86IHN0cmluZ1xuICApOiBDb250cmFrdCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuZ2V0Q29udHJhY3QpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSB0aGlzLmdldE5ldHdvcmsoZ2F0ZXdheSwgY29uZmlnLmNoYW5uZWwpO1xuICAgIGxldCBjb250cmFjdDogQ29udHJha3Q7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYFJldHJpZXZpbmcgY2hhaW5jb2RlICR7Y29uZmlnLmNoYWluY29kZU5hbWV9IGNvbnRyYWN0ICR7Y29udHJhY3ROYW1lIHx8IGNvbmZpZy5jb250cmFjdE5hbWV9IGZyb20gbmV0d29yayAke2NvbmZpZy5jaGFubmVsfWBcbiAgICAgICk7XG4gICAgICBjb250cmFjdE5hbWUgPSBjb250cmFjdE5hbWUgPyBjb250cmFjdE5hbWUgOiBjb25maWcuY29udHJhY3ROYW1lO1xuICAgICAgY29udHJhY3QgPSBuZXR3b3JrLmdldENvbnRyYWN0KGNvbmZpZy5jaGFpbmNvZGVOYW1lLCBjb250cmFjdE5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJhY3Q7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBOZXR3b3JrIGluc3RhbmNlIGZyb20gYSBHYXRld2F5XG4gICAqIEBzdW1tYXJ5IENvbm5lY3RzIHRvIGEgc3BlY2lmaWMgY2hhbm5lbCBvbiB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHBhcmFtIHtHYXRld2F5fSBnYXRld2F5IC0gVGhlIEdhdGV3YXkgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwgdG8gY29ubmVjdCB0b1xuICAgKiBAcmV0dXJuIHtOZXR3b3JrfSBUaGUgTmV0d29yayBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldE5ldHdvcmsoZ2F0ZXdheTogR2F0ZXdheSwgY2hhbm5lbE5hbWU6IHN0cmluZyk6IE5ldHdvcmsge1xuICAgIGNvbnN0IGxvZyA9IExvZ2dpbmcuZm9yKHRoaXMuZ2V0TmV0d29yayk7XG4gICAgbGV0IG5ldHdvcms6IE5ldHdvcms7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29ubmVjdGluZyB0byBjaGFubmVsICR7Y2hhbm5lbE5hbWV9YCk7XG4gICAgICBuZXR3b3JrID0gZ2F0ZXdheS5nZXROZXR3b3JrKGNoYW5uZWxOYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV0d29yaztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhIEdhdGV3YXkgaW5zdGFuY2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBHYXRld2F5IHVzaW5nIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGFuZCBjbGllbnRcbiAgICogQHBhcmFtIHtQZWVyQ29uZmlnfSBjb25maWcgLSBUaGUgcGVlciBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7Q2xpZW50fSBbY2xpZW50XSAtIE9wdGlvbmFsIGdSUEMgY2xpZW50LCB3aWxsIGJlIGNyZWF0ZWQgaWYgbm90IHByb3ZpZGVkXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2F0ZXdheT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBHYXRld2F5IGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0R2F0ZXdheShcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGNvbmZpZzogUGVlckNvbmZpZyxcbiAgICBjbGllbnQ/OiBDbGllbnRcbiAgKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENvbm5lY3Rpb24oXG4gICAgICBjbGllbnQgfHwgKGF3YWl0IHRoaXMuZ2V0Q2xpZW50KGNvbmZpZykpLFxuICAgICAgY29uZmlnLFxuICAgICAgY3R4XG4gICAgKSkgYXMgR2F0ZXdheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGdSUEMgY2xpZW50IGZvciBjb25uZWN0aW5nIHRvIGEgRmFicmljIHBlZXJcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBjbGllbnQgd2l0aCBUTFMgY3JlZGVudGlhbHMgZm9yIHNlY3VyZSBjb21tdW5pY2F0aW9uXG4gICAqIEBwYXJhbSB7UGVlckNvbmZpZ30gY29uZmlnIC0gVGhlIHBlZXIgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJuIHtDbGllbnR9IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBnUlBDIGNsaWVudFxuICAgKi9cbiAgc3RhdGljIGdldENsaWVudChjb25maWc6IFBlZXJDb25maWcpOiBDbGllbnQge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmdldENsaWVudCk7XG4gICAgbG9nLmRlYnVnKGBnZW5lcmF0aW5nIFRMUyBjcmVkZW50aWFscyBmb3IgbXNwICR7Y29uZmlnLm1zcElkfWApO1xuICAgIGxldCBwYXRoT3JDZXJ0OiBzdHJpbmcgfCBCdWZmZXIgPSBjb25maWcudGxzQ2VydCBhcyBzdHJpbmcgfCBCdWZmZXI7XG5cbiAgICBpZiAodHlwZW9mIHBhdGhPckNlcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGF0aE9yQ2VydC5tYXRjaChcbiAgICAgICAgICAvLS0tLS1CRUdJTiAoQ0VSVElGSUNBVEV8S0VZfFBSSVZBVEUgS0VZKS0tLS0tLis/LS0tLS1FTkQgXFwxLS0tLS0kL2dtc1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcGF0aE9yQ2VydCA9IEJ1ZmZlci5mcm9tKHBhdGhPckNlcnQsIFwidXRmOFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGF0aE9yQ2VydCA9IEJ1ZmZlci5mcm9tKGZzLnJlYWRGaWxlU3luYyhwYXRoT3JDZXJ0LCBcInV0ZjhcIikpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHJlYWQgdGhlIHRscyBjZXJ0aWZpY2F0ZSBmcm9tICR7cGF0aE9yQ2VydH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRsc0NyZWRlbnRpYWxzID0gZ3JwYy5jcmVkZW50aWFscy5jcmVhdGVTc2wocGF0aE9yQ2VydCk7XG4gICAgbG9nLmRlYnVnKGBnZW5lcmF0aW5nIEdhdGV3YXkgQ2xpZW50IGZvciB1cmwgJHtjb25maWcucGVlckVuZHBvaW50fWApO1xuICAgIHJldHVybiBuZXcgQ2xpZW50KGNvbmZpZy5wZWVyRW5kcG9pbnQsIHRsc0NyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXN0YWJsaXNoZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgR2F0ZXdheSBjb25uZWN0aW9uIHdpdGggaWRlbnRpdHkgYW5kIHNpZ25lclxuICAgKiBAcGFyYW0ge0NsaWVudH0gY2xpZW50IC0gVGhlIGdSUEMgY2xpZW50XG4gICAqIEBwYXJhbSB7UGVlckNvbmZpZ30gY29uZmlnIC0gVGhlIHBlZXIgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdhdGV3YXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgY29ubmVjdGVkIEdhdGV3YXlcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgRmFicmljQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IElkZW50aXR5XG4gICAqICAgcGFydGljaXBhbnQgU2lnbmVyXG4gICAqICAgcGFydGljaXBhbnQgR2F0ZXdheVxuICAgKlxuICAgKiAgIENhbGxlci0+PkZhYnJpY0FkYXB0ZXI6IGdldENvbm5lY3Rpb24oY2xpZW50LCBjb25maWcpXG4gICAqICAgRmFicmljQWRhcHRlci0+PklkZW50aXR5OiBnZXRJZGVudGl0eShtc3BJZCwgY2VydERpcmVjdG9yeVBhdGgpXG4gICAqICAgSWRlbnRpdHktLT4+RmFicmljQWRhcHRlcjogaWRlbnRpdHlcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+U2lnbmVyOiBnZXRTaWduZXIoa2V5RGlyZWN0b3J5UGF0aClcbiAgICogICBTaWduZXItLT4+RmFicmljQWRhcHRlcjogc2lnbmVyXG4gICAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IENyZWF0ZSBDb25uZWN0T3B0aW9uc1xuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5HYXRld2F5OiBjb25uZWN0KG9wdGlvbnMpXG4gICAqICAgR2F0ZXdheS0tPj5GYWJyaWNBZGFwdGVyOiBnYXRld2F5XG4gICAqICAgRmFicmljQWRhcHRlci0tPj5DYWxsZXI6IGdhdGV3YXlcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRDb25uZWN0aW9uKFxuICAgIGNsaWVudDogQ2xpZW50LFxuICAgIGNvbmZpZzogUGVlckNvbmZpZyxcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+XG4gICkge1xuICAgIGNvbnN0IGxvZyA9IExvZ2dpbmcuZm9yKHRoaXMuZ2V0Q29ubmVjdGlvbik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYFJldHJpZXZpbmcgUGVlciBJZGVudGl0eSBmb3IgJHtjb25maWcubXNwSWR9IHVuZGVyICR7Y29uZmlnLmNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRofWBcbiAgICApO1xuICAgIGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgZ2V0SWRlbnRpdHkoXG4gICAgICBjb25maWcubXNwSWQsXG4gICAgICBjb25maWcuY2VydENlcnRPckRpcmVjdG9yeVBhdGggYXMgYW55XG4gICAgKTtcbiAgICBsb2cuZGVidWcoYFJldHJpZXZpbmcgc2lnbmVyIGtleSBmcm9tICR7Y29uZmlnLmtleUNlcnRPckRpcmVjdG9yeVBhdGh9YCk7XG5cbiAgICBsZXQgc2lnbmVyOiBTaWduZXIsXG4gICAgICBjbG9zZSA9ICgpID0+IHt9O1xuICAgIGlmICghY29uZmlnLmhzbSkge1xuICAgICAgc2lnbmVyID0gYXdhaXQgZ2V0U2lnbmVyKGNvbmZpZy5rZXlDZXJ0T3JEaXJlY3RvcnlQYXRoIGFzIGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhzbSA9IG5ldyBIU01TaWduZXJGYWN0b3J5Q3VzdG9tKGNvbmZpZy5oc20ubGlicmFyeSk7XG4gICAgICBjb25zdCBpZGVudGlmaWVyID0gaHNtLmdldFNLSUZyb21DZXJ0aWZpY2F0ZVBhdGgoXG4gICAgICAgIGNvbmZpZy5jZXJ0Q2VydE9yRGlyZWN0b3J5UGF0aCBhcyBhbnlcbiAgICAgICk7XG4gICAgICBjb25zdCBwa2NzMTFTaWduZXIgPSBoc20ubmV3U2lnbmVyKHtcbiAgICAgICAgbGFiZWw6IGNvbmZpZy5oc20udG9rZW5MYWJlbCBhcyBzdHJpbmcsXG4gICAgICAgIHBpbjogU3RyaW5nKGNvbmZpZy5oc20ucGluKSBhcyBzdHJpbmcsXG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIC8vIHVzZXJUeXBlOiAxIC8qQ0tVX1VTRVIgKi8sXG4gICAgICB9KTtcbiAgICAgIHNpZ25lciA9IHBrY3MxMVNpZ25lci5zaWduZXI7XG5cbiAgICAgIGNsb3NlID0gcGtjczExU2lnbmVyLmNsb3NlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBjbGllbnQsXG4gICAgICBpZGVudGl0eTogaWRlbnRpdHksXG4gICAgICBzaWduZXI6IHNpZ25lcixcbiAgICAgIC8vIERlZmF1bHQgdGltZW91dHMgZm9yIGRpZmZlcmVudCBnUlBDIGNhbGxzXG4gICAgICBldmFsdWF0ZU9wdGlvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZGVhZGxpbmU6IERhdGUubm93KCkgKyAxMDAwICogY3R4LmdldChcImV2YWx1YXRlVGltZW91dFwiKSB9OyAvLyBkZWZhdWx0cyB0byA1IHNlY29uZHNcbiAgICAgIH0sXG4gICAgICBlbmRvcnNlT3B0aW9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm4geyBkZWFkbGluZTogRGF0ZS5ub3coKSArIDEwMDAgKiBjdHguZ2V0KFwiZW5kb3JzZVRpbWVvdXRcIikgfTsgLy8gZGVmYXVsdHMgdG8gMTUgc2Vjb25kc1xuICAgICAgfSxcbiAgICAgIHN1Ym1pdE9wdGlvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZGVhZGxpbmU6IERhdGUubm93KCkgKyAxMDAwICogY3R4LmdldChcInN1Ym1pdFRpbWVvdXRcIikgfTsgLy8gZGVmYXVsdHMgdG8gNSBzZWNvbmRzXG4gICAgICB9LFxuICAgICAgY29tbWl0U3RhdHVzT3B0aW9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm4geyBkZWFkbGluZTogRGF0ZS5ub3coKSArIDEwMDAgKiBjdHguZ2V0KFwiY29tbWl0VGltZW91dFwiKSB9OyAvLyBkZWZhdWx0cyB0byAxIG1pbnV0ZVxuICAgICAgfSxcbiAgICB9IGFzIENvbm5lY3RPcHRpb25zO1xuXG4gICAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvICR7Y29uZmlnLm1zcElkfWApO1xuICAgIGNvbnN0IGdhdGV3YXkgPSBjb25uZWN0KG9wdGlvbnMpO1xuXG4gICAgLy8gVE9ETzogcmVwbGFjZT9cbiAgICBpZiAoY29uZmlnLmhzbSkge1xuICAgICAgZ2F0ZXdheS5jbG9zZSA9IG5ldyBQcm94eShnYXRld2F5LmNsb3NlLCB7XG4gICAgICAgIGFwcGx5KHRhcmdldDogKCkgPT4gdm9pZCwgdGhpc0FyZzogYW55LCBhcmdBcnJheTogYW55W10pOiBhbnkge1xuICAgICAgICAgIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJheSk7XG4gICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBnYXRld2F5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IERpc3BhdGNoIGluc3RhbmNlIGZvciB0aGUgRmFicmljIGNsaWVudC5cbiAgICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBuZXcgRmFicmljQ2xpZW50RGlzcGF0Y2ggaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBGYWJyaWMgbmV0d29yay5cbiAgICogQHJldHVybnMge0Rpc3BhdGNofSBBIG5ldyBEaXNwYXRjaCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciB0aGUgRmFicmljIGNsaWVudC5cbiAgICogQHJlbWFya3MgVGhlIERpc3BhdGNoIGluc3RhbmNlIGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGxvZ2ljIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBGYWJyaWMgbmV0d29yaywgc3VjaCBhcyBzdWJtaXR0aW5nIHRyYW5zYWN0aW9ucyBvciBxdWVyeWluZyBkYXRhLlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBmYWJyaWNEaXNwYXRjaCA9IGZhYnJpY0NsaWVudEFkYXB0ZXIuRGlzcGF0Y2goKTtcbiAgICogZmFicmljRGlzcGF0Y2guc3VibWl0VHJhbnNhY3Rpb24oJ2NyZWF0ZVByb2R1Y3QnLCB7IG5hbWU6ICdQcm9kdWN0IEEnLCBwcmljZTogMTAwIH0pO1xuICAgKi9cbiAgb3ZlcnJpZGUgRGlzcGF0Y2goKTogRmFicmljQ2xpZW50RGlzcGF0Y2gge1xuICAgIHJldHVybiBuZXcgRmFicmljQ2xpZW50QWRhcHRlcltcIl9iYXNlRGlzcGF0Y2hcIl0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGFuIGVycm9yIGludG8gYSBCYXNlRXJyb3JcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYW55IGVycm9yIGludG8gYSBzdGFuZGFyZGl6ZWQgQmFzZUVycm9yIHVzaW5nIHRoZSBwYXJlbnQgY2xhc3MgaW1wbGVtZW50YXRpb25cbiAgICogQHBhcmFtIHtFcnJvciB8IHN0cmluZ30gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIE9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGVycm9yXG4gICAqIEByZXR1cm4ge0Jhc2VFcnJvcn0gVGhlIHBhcnNlZCBlcnJvclxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBwYXJzZUVycm9yPEUgZXh0ZW5kcyBCYXNlRXJyb3I+KGVycjogRXJyb3IgfCBzdHJpbmcpOiBFIHtcbiAgICAvLyBpZiAoXG4gICAgLy8gICBNSVNTSU5HX1BSSVZBVEVfREFUQV9SRUdFWC50ZXN0KFxuICAgIC8vICAgICB0eXBlb2YgZXJyID09PSBcInN0cmluZ1wiID8gZXJyIDogZXJyLm1lc3NhZ2VcbiAgICAvLyAgIClcbiAgICAvLyApXG4gICAgLy8gICByZXR1cm4gbmV3IFVuYXV0aG9yaXplZFByaXZhdGVEYXRhQWNjZXNzKGVycikgYXMgRTtcbiAgICBjb25zdCBtc2cgPSB0eXBlb2YgZXJyID09PSBcInN0cmluZ1wiID8gZXJyIDogZXJyLm1lc3NhZ2U7XG5cbiAgICBpZiAobXNnLmluY2x1ZGVzKFwiTVZDQ19SRUFEX0NPTkZMSUNUXCIpKVxuICAgICAgcmV0dXJuIG5ldyBNdmNjUmVhZENvbmZsaWN0RXJyb3IoZXJyKSBhcyBFO1xuXG4gICAgaWYgKG1zZy5pbmNsdWRlcyhcIkVORE9SU0VNRU5UX1BPTElDWV9GQUlMVVJFXCIpKVxuICAgICAgcmV0dXJuIG5ldyBFbmRvcnNlbWVudFBvbGljeUVycm9yKGVycikgYXMgRTtcblxuICAgIGlmIChtc2cuaW5jbHVkZXMoXCJQSEFOVE9NX1JFQURfQ09ORkxJQ1RcIikpXG4gICAgICByZXR1cm4gbmV3IFBoYW50b21SZWFkQ29uZmxpY3RFcnJvcihlcnIpIGFzIEU7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgKGVyciBhcyBhbnkpLmNvZGUpIHtcbiAgICAgIHN3aXRjaCAoKGVyciBhcyBhbnkpLmNvZGUpIHtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBuZXcgRW5kb3JzZW1lbnRFcnJvcihlcnIpIGFzIEU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1zZy5pbmNsdWRlcyhOb3RGb3VuZEVycm9yLm5hbWUpKSByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoQ29uZmxpY3RFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKEJhZFJlcXVlc3RFcnJvci5uYW1lKSlcbiAgICAgIHJldHVybiBuZXcgQmFkUmVxdWVzdEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKFF1ZXJ5RXJyb3IubmFtZSkpIHJldHVybiBuZXcgUXVlcnlFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhQYWdpbmdFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBQYWdpbmdFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhVbnN1cHBvcnRlZEVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBVbnN1cHBvcnRlZEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKE1pZ3JhdGlvbkVycm9yLm5hbWUpKSByZXR1cm4gbmV3IE1pZ3JhdGlvbkVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKE9ic2VydmVyRXJyb3IubmFtZSkpIHJldHVybiBuZXcgT2JzZXJ2ZXJFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhBdXRob3JpemF0aW9uRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhGb3JiaWRkZW5FcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBGb3JiaWRkZW5FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhDb25uZWN0aW9uRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhTZXJpYWxpemF0aW9uRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgcmV0dXJuIG5ldyBJbnRlcm5hbEVycm9yKGVycikgYXMgRTtcbiAgfVxufVxuXG5GYWJyaWNDbGllbnRBZGFwdGVyLmRlY29yYXRpb24oKTtcbkFkYXB0ZXIuc2V0Q3VycmVudChGYWJyaWNGbGF2b3VyKTtcbiJdfQ==
830
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ2xpZW50QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvRmFicmljQ2xpZW50QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsd0NBQTZCO0FBQzdCLE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsS0FBSyxHQUdOLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUQsT0FBTyxFQUNMLE9BQU8sR0FPUixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLHVCQUFvQjtBQUNyRCxPQUFPLEVBRUwsYUFBYSxFQUNiLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixhQUFhLEVBQ2IsZUFBZSxHQUVoQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUVQLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLGNBQWMsRUFDZCxhQUFhLEVBQ2IsV0FBVyxFQUNYLGVBQWUsRUFDZixVQUFVLEVBRVYsZ0JBQWdCLEdBT2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQ0FBNEI7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdDQUFtQztBQUU5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXFCO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQ0FBZ0M7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1DQUFnQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0NBQWlDO0FBQ2xFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQix3QkFBd0IsR0FDekIsOEJBQXlCO0FBRTFCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSx1QkFBb0I7QUFDdkQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERztBQUNILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUt4QztJQUNDOztPQUVHO2FBQ1ksWUFBTyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxBQUExQixDQUEyQjthQUVsQyxlQUFVLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxBQUF6QixDQUEwQjthQUVsQyxRQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxBQUFuQyxDQUFvQztJQUt4RDs7Ozs7T0FLRztJQUNILFlBQVksTUFBa0IsRUFBRSxLQUFjO1FBQzVDLEtBQUssQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBVm5CLGVBQVUsR0FDM0IsbUJBQW1CLENBQUMsVUFBVSxDQUFDO0lBVWpDLENBQUM7SUFFUSxTQUFTLENBQ2hCLFNBQWlDO1FBRWpDLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFNBQVMsQ0FDUCxLQUEwQyxFQUMxQyxJQUFZLEVBQ1osS0FBcUI7UUFFckIsT0FBTyxJQUFJLHFCQUFxQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFUSxLQUFLLENBQUMsT0FBTyxDQUNwQixTQUtVLEVBQ1YsU0FBcUMsRUFDckMsS0FBd0MsRUFDeEMsR0FBRyxJQUFXO1FBRWQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxLQUFLLENBQ1AsNEJBQTRCLFNBQVMsaUJBQWlCLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksK0JBQStCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDN0ssQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDNUIsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxTQUFTLENBQUMsRUFDdEQsR0FBRyxJQUFJLENBQ1IsQ0FBQztRQUNGLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLElBQWdCO1FBQ3JCLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRVEsVUFBVTtRQU1qQixPQUFPLHNCQUFtRCxDQUFDO0lBQzdELENBQUM7SUFFUyxZQUFZLENBQ3BCLEtBQXFCLEVBQ3JCLEVBQWtCLEVBQ2xCLEtBQTBCLEVBQzFCLEdBQUcsSUFBb0Q7UUFFdkQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ08sZUFBZSxDQUN2QixLQUFxQixFQUNyQixHQUF3QixFQUN4QixNQUE2QixFQUM3QixHQUFHLElBQW9EO1FBRXZELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNO1lBQzlCLE1BQU0sSUFBSSxhQUFhLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN0RSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFUyxlQUFlLENBQ3ZCLEtBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLE1BQTZCLEVBQzdCLEdBQUcsSUFBb0Q7UUFFdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU07WUFDOUIsTUFBTSxJQUFJLGFBQWEsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN0QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNNLEtBQUssQ0FBQyxTQUFTLENBQ3RCLEtBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLE1BQTZCLEVBQzdCLEdBQUcsSUFBZ0Q7UUFFbkQsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNO1lBQzlCLE1BQU0sSUFBSSxhQUFhLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUksSUFBeUIsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQXlCLENBQUM7UUFDekQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUM5QixPQUFxRCxFQUNyRCxJQUFJLENBQUMsU0FBUyxDQUNmLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsTUFBTSxlQUFlLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDL0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ3pDLEdBQUcsRUFDSCxxQkFBcUIsQ0FBQyxVQUFVLEVBQ2hDO1lBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzVEO1NBQ0YsRUFDRCxTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLGtCQUFrQixDQUFDLENBQVUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ00sS0FBSyxDQUFDLE9BQU8sQ0FDcEIsS0FBcUIsRUFDckIsR0FBcUIsRUFDckIsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsTUFBTSxlQUFlLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQzNDLEdBQUcsRUFDSCxxQkFBcUIsQ0FBQyxRQUFRLEVBQzlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNyQixTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLGtCQUFrQixDQUFDLENBQVUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTSxLQUFLLENBQUMsU0FBUyxDQUN0QixLQUFxQixFQUNyQixHQUFxQixFQUNyQixNQUE2QixFQUM3QixHQUFHLElBQWdEO1FBRW5ELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtZQUM5QixNQUFNLElBQUksYUFBYSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFJLElBQXlCLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUF5QixDQUFDO1FBQ3pELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDOUIsT0FBcUQsRUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FDZixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sZUFBZSxTQUFTLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUN6QyxHQUFHLEVBQ0gscUJBQXFCLENBQUMsVUFBVSxFQUNoQztZQUNFLElBQUksQ0FBQyxTQUFTLENBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM1RDtTQUNGLEVBQ0QsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxDQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTSxLQUFLLENBQUMsU0FBUyxDQUN0QixLQUFxQixFQUNyQixHQUFxQixFQUNyQixHQUFHLElBQWdEO1FBRW5ELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxNQUFNLGVBQWUsU0FBUyxRQUFRLENBQUMsQ0FBQztRQUNqRSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FDekMsR0FBRyxFQUNILHFCQUFxQixDQUFDLFVBQVUsRUFDaEMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3JCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO1FBQ0YsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksa0JBQWtCLENBQUMsQ0FBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNNLE9BQU8sQ0FDZCxLQUFRLEVBQ1IsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSyxLQUFhLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsR0FBRyxDQUFDLEtBQUssQ0FDUCwwQ0FBMkMsS0FBYSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUNyRixDQUFDO1lBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUU7Z0JBQzNELFVBQVUsRUFBRSxLQUFLO2dCQUNqQixRQUFRLEVBQUUsS0FBSztnQkFDZixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsS0FBSyxFQUFHLEtBQWEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO2FBQ2hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ25CLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQTZCLENBQUMsQ0FBVztZQUNsRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVRLE1BQU0sQ0FDYixHQUF3QixFQUN4QixLQUFxQixFQUNyQixFQUFrQixFQUNsQixTQUErQixFQUMvQixHQUFHLElBQWdEO1FBRW5ELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLEdBQUcsQ0FBQyxPQUFPLENBQ1QsbUNBQW1DLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3ZFLENBQUM7WUFDRixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQWdDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO2dCQUN0RSxJQUFJLEdBQUcsSUFBSSxHQUFHO29CQUNaLE1BQU0sSUFBSSxhQUFhLENBQ3JCLHNCQUFzQixHQUFHLDRCQUE0QixPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksd0JBQXdCLENBQzVILENBQUM7Z0JBQ0gsR0FBUyxDQUFDLEdBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLElBQUssS0FBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFHWSxBQUFOLEtBQUssQ0FBQyxNQUFNLENBQ25CLEtBQXFCLEVBQ3JCLEVBQWtCLEVBQ2xCLEtBQTBCLEVBQzFCLFlBQWlDLEVBQUUsRUFDbkMsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUksSUFBeUIsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDOUIsT0FBcUQsRUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixTQUFTLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUN6QyxHQUFHLEVBQ0gsYUFBYSxDQUFDLE1BQU0sRUFDcEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzlDLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUdHLEFBQU4sS0FBSyxDQUFDLElBQUksQ0FDUixLQUFxQixFQUNyQixFQUFrQixFQUNsQixHQUFHLElBQWdEO1FBRW5ELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsU0FBUyxRQUFRLENBQUMsQ0FBQztRQUNyRCxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FDM0MsR0FBRyxFQUNILGFBQWEsQ0FBQyxJQUFJLEVBQ2xCLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ2YsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsWUFBWSxDQUNWLEtBQXFCLEVBQ3JCLEVBQWtCLEVBQ2xCLEtBQTBCLEVBQzFCLEdBQUcsSUFBb0Q7UUFFdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDdEMsMkRBQTJEO1FBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUdHLEFBQU4sS0FBSyxDQUFDLE1BQU0sQ0FDVixLQUFxQixFQUNyQixFQUFrQixFQUNsQixLQUEwQixFQUMxQixZQUFpQyxFQUFFLEVBQ25DLEdBQUcsSUFBZ0Q7UUFFbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFJLElBQXlCLENBQUMsQ0FBQztRQUNoRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQzlCLE9BQXFELEVBQ3JELElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztRQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDcEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ3pDLEdBQUcsRUFDSCxhQUFhLENBQUMsTUFBTSxFQUNwQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsd0RBQXdEO1FBQ2pILFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUdZLEFBQU4sS0FBSyxDQUFDLE1BQU0sQ0FDbkIsS0FBcUIsRUFDckIsRUFBa0IsRUFDbEIsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDdEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ3pDLEdBQUcsRUFDSCxhQUFhLENBQUMsTUFBTSxFQUNwQixDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUNmLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F3Qkc7SUFFRyxBQUFOLEtBQUssQ0FBQyxHQUFHLENBQ1AsUUFBb0IsRUFDcEIsV0FBYyxJQUFTLEVBQ3ZCLEtBQTRCLEVBQzVCLEdBQUcsSUFBZ0Q7UUFFbkQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLGlCQUFzQixDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUNoRCxHQUFHLEVBQ0gsS0FBSyxFQUNMLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsRUFDcEMsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxNQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxNQUFXLENBQUM7WUFDdkMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLDhDQUE4QztnQkFDOUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFNLENBQUM7WUFDbEQsT0FBTyxNQUFXLENBQUM7UUFDckIsQ0FBQztRQUVELE9BQU8sV0FBVyxDQUFDLE1BQWEsQ0FBTSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ00sU0FBUztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUErQjtRQUNyRCxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFrQjtRQUN4QyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxTQUFTLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLEtBQUssQ0FBQyxRQUFRLENBQ3RCLEdBQStCLEVBQy9CLFlBQXFCO1FBRXJCLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUNwQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQ1gsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTJCRztJQUNPLEtBQUssQ0FBQyxXQUFXLENBQ3pCLEdBQStCLEVBQy9CLEdBQVcsRUFDWCxNQUFNLEdBQUcsSUFBSSxFQUNiLElBQVksRUFDWixhQUFzQyxFQUN0QyxzQkFBc0MsRUFDdEMsU0FBa0I7UUFFbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQ2xDLEdBQUcsRUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUNoQyxDQUFDO1lBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FDVCxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLG9CQUFvQixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxDQUMxSCxDQUFDO1lBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUU1RCxzQkFBc0IsR0FBRyxzQkFBc0IsRUFBRSxNQUFNO2dCQUNyRCxDQUFDLENBQUMsc0JBQXNCO2dCQUN4QixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2QsTUFBTSxlQUFlLEdBQW9CO2dCQUN2QyxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLGFBQWEsRUFBRSxhQUFhO2dCQUM1QiwwRUFBMEU7YUFDM0UsQ0FBQztZQUVGLE9BQU8sTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUsscUJBQXFCLENBQUMsQ0FBQztZQUNsRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTSxVQUFVLENBQXNCLEdBQW1CO1FBQzFELE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FDckIsR0FBK0IsRUFDL0IsR0FBVyxFQUNYLElBQVksRUFDWixhQUFzQyxFQUN0QyxzQkFBc0MsRUFDdEMsU0FBa0I7UUFFbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUNyQixHQUFHLEVBQ0gsR0FBRyxFQUNILElBQUksRUFDSixJQUFJLEVBQ0osYUFBYSxFQUNiLHNCQUFzQixFQUN0QixTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsR0FBK0IsRUFDL0IsR0FBVyxFQUNYLElBQVksRUFDWixhQUFzQyxFQUN0QyxzQkFBc0MsRUFDdEMsU0FBa0I7UUFFbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUNyQixHQUFHLEVBQ0gsR0FBRyxFQUNILEtBQUssRUFDTCxJQUFJLEVBQ0osYUFBYSxFQUNiLHNCQUFzQixFQUN0QixTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUNoQixPQUFnQixFQUNoQixNQUFrQixFQUNsQixZQUFxQjtRQUVyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksUUFBa0IsQ0FBQztRQUN2QixJQUFJLENBQUM7WUFDSCxHQUFHLENBQUMsS0FBSyxDQUNQLHdCQUF3QixNQUFNLENBQUMsYUFBYSxhQUFhLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxpQkFBaUIsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUM5SCxDQUFDO1lBQ0YsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQ2pFLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFnQixFQUFFLFdBQW1CO1FBQ3JELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksT0FBZ0IsQ0FBQztRQUNyQixJQUFJLENBQUM7WUFDSCxHQUFHLENBQUMsS0FBSyxDQUFDLHlCQUF5QixXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUNyQixHQUErQixFQUMvQixNQUFrQixFQUNsQixNQUFlO1FBRWYsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDOUIsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ3hDLE1BQU0sRUFDTixHQUFHLENBQ0osQ0FBWSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBa0I7UUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksVUFBVSxHQUFvQixNQUFNLENBQUMsT0FBMEIsQ0FBQztRQUVwRSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQ0UsVUFBVSxDQUFDLEtBQUssQ0FDZCxzRUFBc0UsQ0FDdkUsRUFDRCxDQUFDO2dCQUNELFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDO29CQUNILFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7Z0JBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxJQUFJLGFBQWEsQ0FDckIsMkNBQTJDLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FDOUQsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxHQUFHLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFO1lBQ3JELGlDQUFpQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUN6RSw4QkFBOEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUk7U0FDdkUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXVCRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUN4QixNQUFjLEVBQ2QsTUFBa0IsRUFDbEIsR0FBK0I7UUFFL0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLEtBQUssQ0FDUCxnQ0FBZ0MsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FDdkYsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUNoQyxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyx1QkFBOEIsQ0FDdEMsQ0FBQztRQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsOEJBQThCLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFFekUsSUFBSSxNQUFjLEVBQ2hCLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUE2QixDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxJQUFJLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0QsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLHlCQUF5QixDQUM5QyxNQUFNLENBQUMsdUJBQThCLENBQ3RDLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUNqQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFvQjtnQkFDdEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBVztnQkFDckMsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLDZCQUE2QjthQUM5QixDQUFDLENBQUM7WUFDSCxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUU3QixLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUM3QixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUc7WUFDZCxNQUFNO1lBQ04sUUFBUSxFQUFFLFFBQVE7WUFDbEIsTUFBTSxFQUFFLE1BQU07WUFDZCw0Q0FBNEM7WUFDNUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCO1lBQy9GLENBQUM7WUFDRCxjQUFjLEVBQUUsR0FBRyxFQUFFO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7WUFDL0YsQ0FBQztZQUNELGFBQWEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7WUFDN0YsQ0FBQztZQUNELG1CQUFtQixFQUFFLEdBQUcsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtZQUM1RixDQUFDO1NBQ2dCLENBQUM7UUFFcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpDLGlCQUFpQjtRQUNqQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDdkMsS0FBSyxDQUFDLE1BQWtCLEVBQUUsT0FBWSxFQUFFLFFBQWU7b0JBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDekMsS0FBSyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTSxRQUFRO1FBQ2YsT0FBTyxJQUFJLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLE1BQU0sQ0FBQyxVQUFVLENBQXNCLEdBQW1CO1FBQ2xFLE9BQU87UUFDUCxxQ0FBcUM7UUFDckMsa0RBQWtEO1FBQ2xELE1BQU07UUFDTixJQUFJO1FBQ0osd0RBQXdEO1FBQ3hELE1BQU0sR0FBRyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBRXhELElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztZQUNwQyxPQUFPLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFNLENBQUM7UUFFN0MsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDO1lBQzVDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQU0sQ0FBQztRQUU5QyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUM7WUFDdkMsT0FBTyxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBRWhELElBQUksR0FBRyxZQUFZLEtBQUssSUFBSyxHQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUMsUUFBUyxHQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQztvQkFDSixPQUFPLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFNLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDekUsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQ3pFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDdkMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQ25FLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQU0sQ0FBQztRQUNyRSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQU0sQ0FBQztRQUN4QyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDM0UsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQ3pFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDdkMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQzFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQU0sQ0FBQztRQUMzRSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUNwQyxPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQ3ZDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDdkMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQzFDLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFNLENBQUM7SUFDckMsQ0FBQzs7QUFycEJjO0lBRmQsS0FBSyxFQUFFO0lBQ1AsS0FBSyxFQUFFOztxRUFNa0IsT0FBTzs7aURBbUJoQztBQVdLO0lBRkwsS0FBSyxFQUFFO0lBQ1AsS0FBSyxFQUFFOztxREFJa0IsT0FBTzs7K0NBZ0JoQztBQTRCSztJQUZMLEtBQUssRUFBRTtJQUNQLEtBQUssRUFBRTs7cUVBTWtCLE9BQU87O2lEQW9CaEM7QUFXYztJQUZkLEtBQUssRUFBRTtJQUNQLEtBQUssRUFBRTs7cURBSWtCLE9BQU87O2lEQWVoQztBQTRCSztJQURMLEtBQUssRUFBRTs7aUVBR0ksQ0FBQyxvQkFBRCxDQUFDLHdDQUVhLE9BQU87OzhDQXdDaEM7QUF3Y0gsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4uL3NoYXJlZC9vdmVycmlkZXNcIjtcbmltcG9ydCB7IENvdWNoREJLZXlzLCB0eXBlIE1hbmdvUXVlcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiQGdycGMvZ3JwYy1qc1wiO1xuaW1wb3J0ICogYXMgZ3JwYyBmcm9tIFwiQGdycGMvZ3JwYy1qc1wiO1xuaW1wb3J0IHtcbiAgTW9kZWwsXG4gIHR5cGUgTW9kZWxDb25zdHJ1Y3RvcixcbiAgdHlwZSBTZXJpYWxpemVyLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBkZWJ1ZywgZmluYWwsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHR5cGUgUGVlckNvbmZpZywgdHlwZSBTZWdyZWdhdGVkTW9kZWwgfSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5pbXBvcnQge1xuICBjb25uZWN0LFxuICB0eXBlIENvbm5lY3RPcHRpb25zLFxuICBHYXRld2F5LFxuICBOZXR3b3JrLFxuICBQcm9wb3NhbE9wdGlvbnMsXG4gIENvbnRyYWN0IGFzIENvbnRyYWt0LFxuICB0eXBlIFNpZ25lcixcbn0gZnJvbSBcIkBoeXBlcmxlZGdlci9mYWJyaWMtZ2F0ZXdheVwiO1xuaW1wb3J0IHsgZ2V0SWRlbnRpdHksIGdldFNpZ25lciB9IGZyb20gXCIuL2ZhYnJpYy1mc1wiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBJbnRlcm5hbEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxuICBTZXJpYWxpemF0aW9uRXJyb3IsXG4gIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyxcbiAgTm90Rm91bmRFcnJvcixcbiAgQ29uZmxpY3RFcnJvcixcbiAgQmFkUmVxdWVzdEVycm9yLFxuICB0eXBlIFByaW1hcnlLZXlUeXBlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIENvbnRleHQsXG4gIEFkYXB0ZXIsXG4gIHR5cGUgQWRhcHRlckZsYWdzLFxuICBBdXRob3JpemF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgRm9yYmlkZGVuRXJyb3IsXG4gIE1pZ3JhdGlvbkVycm9yLFxuICBPYnNlcnZlckVycm9yLFxuICBQYWdpbmdFcnJvcixcbiAgUGVyc2lzdGVuY2VLZXlzLFxuICBRdWVyeUVycm9yLFxuICBSZXBvc2l0b3J5LFxuICBVbnN1cHBvcnRlZEVycm9yLFxuICBTdGF0ZW1lbnQsXG4gIHR5cGUgUHJlcGFyZWRTdGF0ZW1lbnQsXG4gIFBhZ2luYXRvcixcbiAgTWF5YmVDb250ZXh0dWFsQXJnLFxuICBDb250ZXh0dWFsQXJncyxcbiAgdHlwZSBQcmVwYXJlZE1vZGVsLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IEZhYnJpY0ZsYXZvdXIgfSBmcm9tIFwiLi4vc2hhcmVkL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ2xpZW50U2VyaWFsaXplciB9IGZyb20gXCIuLi9zaGFyZWQvQ2xpZW50U2VyaWFsaXplclwiO1xuaW1wb3J0IHsgRmFicmljQ2xpZW50RGlzcGF0Y2ggfSBmcm9tIFwiLi9GYWJyaWNDbGllbnREaXNwYXRjaFwiO1xuaW1wb3J0IHsgSFNNU2lnbmVyRmFjdG9yeUN1c3RvbSB9IGZyb20gXCIuL2ZhYnJpYy1oc21cIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEZhYnJpY0NsaWVudFN0YXRlbWVudCB9IGZyb20gXCIuL0ZhYnJpY0NsaWVudFN0YXRlbWVudFwiO1xuaW1wb3J0IHsgRmFicmljQ2xpZW50UGFnaW5hdG9yIH0gZnJvbSBcIi4vRmFicmljQ2xpZW50UGFnaW5hdG9yXCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnRSZXBvc2l0b3J5IH0gZnJvbSBcIi4vRmFicmljQ2xpZW50UmVwb3NpdG9yeVwiO1xuaW1wb3J0IHtcbiAgRW5kb3JzZW1lbnRFcnJvcixcbiAgRW5kb3JzZW1lbnRQb2xpY3lFcnJvcixcbiAgTXZjY1JlYWRDb25mbGljdEVycm9yLFxuICBQaGFudG9tUmVhZENvbmZsaWN0RXJyb3IsXG59IGZyb20gXCIuLi9zaGFyZWQvZXJyb3JzXCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnRGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBEZWZhdWx0RmFicmljQ2xpZW50RmxhZ3MgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbi8qKlxuICogQGRlc2NyaXB0aW9uIEFkYXB0ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggSHlwZXJsZWRnZXIgRmFicmljIG5ldHdvcmtzXG4gKiBAc3VtbWFyeSBUaGUgRmFicmljQWRhcHRlciBleHRlbmRzIENvdWNoREJBZGFwdGVyIHRvIHByb3ZpZGUgYSBzZWFtbGVzcyBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggSHlwZXJsZWRnZXIgRmFicmljIG5ldHdvcmtzLlxuICogSXQgaGFuZGxlcyBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIHRyYW5zYWN0aW9uIHN1Ym1pc3Npb24sIGFuZCBDUlVEIG9wZXJhdGlvbnMgYWdhaW5zdCBGYWJyaWMgY2hhaW5jb2RlLlxuICogQHRlbXBsYXRlIFBlZXJDb25maWcgLSBDb25maWd1cmF0aW9uIHR5cGUgZm9yIGNvbm5lY3RpbmcgdG8gYSBGYWJyaWMgcGVlclxuICogQHRlbXBsYXRlIEZhYnJpY0ZsYWdzIC0gRmxhZ3Mgc3BlY2lmaWMgdG8gRmFicmljIG9wZXJhdGlvbnNcbiAqIEB0ZW1wbGF0ZSBDb250ZXh0PEZhYnJpY0ZsYWdzPiAtIENvbnRleHQgdHlwZSBjb250YWluaW5nIEZhYnJpYy1zcGVjaWZpYyBmbGFnc1xuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZm9yIGNvbm5lY3RpbmcgdG8gYSBGYWJyaWMgcGVlclxuICogQHBhcmFtIGFsaWFzIC0gT3B0aW9uYWwgYWxpYXMgZm9yIHRoZSBhZGFwdGVyIGluc3RhbmNlXG4gKiBAY2xhc3MgRmFicmljQ2xpZW50QWRhcHRlclxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIG5ldyBGYWJyaWNBZGFwdGVyIGluc3RhbmNlXG4gKiBjb25zdCBjb25maWc6IFBlZXJDb25maWcgPSB7XG4gKiAgIG1zcElkOiAnT3JnMU1TUCcsXG4gKiAgIHBlZXJFbmRwb2ludDogJ2xvY2FsaG9zdDo3MDUxJyxcbiAqICAgY2hhbm5lbE5hbWU6ICdteWNoYW5uZWwnLFxuICogICBjaGFpbmNvZGVOYW1lOiAnbXljYycsXG4gKiAgIGNvbnRyYWN0TmFtZTogJ215Y29udHJhY3QnLFxuICogICB0bHNDZXJ0UGF0aDogJy9wYXRoL3RvL3Rscy9jZXJ0JyxcbiAqICAgY2VydERpcmVjdG9yeVBhdGg6ICcvcGF0aC90by9jZXJ0L2RpcicsXG4gKiAgIGtleURpcmVjdG9yeVBhdGg6ICcvcGF0aC90by9rZXkvZGlyJ1xuICogfTtcbiAqXG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IEZhYnJpY0FkYXB0ZXIoY29uZmlnLCAnb3JnMS1hZGFwdGVyJyk7XG4gKlxuICogLy8gVXNlIHRoZSBhZGFwdGVyIHRvIGludGVyYWN0IHdpdGggdGhlIEZhYnJpYyBuZXR3b3JrXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBhZGFwdGVyLnJlYWQoJ3VzZXJzJywgJ3VzZXIxJywgbXlTZXJpYWxpemVyKTtcbiAqIGBgYFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgRmFicmljQWRhcHRlclxuICogICBwYXJ0aWNpcGFudCBHYXRld2F5XG4gKiAgIHBhcnRpY2lwYW50IE5ldHdvcmtcbiAqICAgcGFydGljaXBhbnQgQ29udHJhY3RcbiAqICAgcGFydGljaXBhbnQgQ2hhaW5jb2RlXG4gKlxuICogICBDbGllbnQtPj5GYWJyaWNBZGFwdGVyOiBjcmVhdGUodGFibGVOYW1lLCBpZCwgbW9kZWwsIHRyYW5zaWVudCwgc2VyaWFsaXplcilcbiAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IHN1Ym1pdFRyYW5zYWN0aW9uKE9wZXJhdGlvbktleXMuQ1JFQVRFLCBbc2VyaWFsaXplZE1vZGVsXSwgdHJhbnNpZW50KVxuICogICBGYWJyaWNBZGFwdGVyLT4+R2F0ZXdheTogY29ubmVjdCgpXG4gKiAgIEdhdGV3YXktPj5OZXR3b3JrOiBnZXROZXR3b3JrKGNoYW5uZWxOYW1lKVxuICogICBOZXR3b3JrLT4+Q29udHJhY3Q6IGdldENvbnRyYWN0KGNoYWluY29kZU5hbWUsIGNvbnRyYWN0TmFtZSlcbiAqICAgRmFicmljQWRhcHRlci0+PkNvbnRyYWN0OiBzdWJtaXQoYXBpLCBwcm9wb3NhbE9wdGlvbnMpXG4gKiAgIENvbnRyYWN0LT4+Q2hhaW5jb2RlOiBpbnZva2VcbiAqICAgQ2hhaW5jb2RlLS0+PkNvbnRyYWN0OiByZXNwb25zZVxuICogICBDb250cmFjdC0tPj5GYWJyaWNBZGFwdGVyOiByZXN1bHRcbiAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IGRlY29kZShyZXN1bHQpXG4gKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGRlY29kZWRSZXN1bHQpXG4gKiAgIEZhYnJpY0FkYXB0ZXItLT4+Q2xpZW50OiBkZXNlcmlhbGl6ZWRSZXN1bHRcbiAqL1xuZXhwb3J0IGNsYXNzIEZhYnJpY0NsaWVudEFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVyPFxuICBQZWVyQ29uZmlnLFxuICBDbGllbnQsXG4gIE1hbmdvUXVlcnksXG4gIENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+XG4+IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdGF0aWMgdGV4dCBkZWNvZGVyIGZvciBjb252ZXJ0aW5nIFVpbnQ4QXJyYXkgdG8gc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTtcblxuICBwcml2YXRlIHN0YXRpYyBzZXJpYWxpemVyID0gbmV3IENsaWVudFNlcmlhbGl6ZXIoKTtcblxuICBwcm90ZWN0ZWQgc3RhdGljIGxvZyA9IExvZ2dpbmcuZm9yKEZhYnJpY0NsaWVudEFkYXB0ZXIpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZXJpYWxpemVyOiBTZXJpYWxpemVyPGFueT4gPVxuICAgIEZhYnJpY0NsaWVudEFkYXB0ZXIuc2VyaWFsaXplcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgRmFicmljQWRhcHRlciBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBhZGFwdGVyIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgSHlwZXJsZWRnZXIgRmFicmljIG5ldHdvcmtcbiAgICogQHBhcmFtIHtQZWVyQ29uZmlnfSBjb25maWcgLSBDb25maWd1cmF0aW9uIGZvciBjb25uZWN0aW5nIHRvIGEgRmFicmljIHBlZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIGFkYXB0ZXIgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUGVlckNvbmZpZywgYWxpYXM/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihjb25maWcsIEZhYnJpY0ZsYXZvdXIsIGFsaWFzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIFN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8QWRhcHRlckZsYWdzPlxuICApOiBTdGF0ZW1lbnQ8TSwgRmFicmljQ2xpZW50QWRhcHRlciwgYW55LCBNYW5nb1F1ZXJ5PiB7XG4gICAgcmV0dXJuIG5ldyBGYWJyaWNDbGllbnRTdGF0ZW1lbnQodGhpcywgb3ZlcnJpZGVzKTtcbiAgfVxuXG4gIFBhZ2luYXRvcjxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIHF1ZXJ5OiBQcmVwYXJlZFN0YXRlbWVudDxhbnk+IHwgTWFuZ29RdWVyeSxcbiAgICBzaXplOiBudW1iZXIsXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+XG4gICk6IFBhZ2luYXRvcjxNLCBhbnksIE1hbmdvUXVlcnk+IHtcbiAgICByZXR1cm4gbmV3IEZhYnJpY0NsaWVudFBhZ2luYXRvcih0aGlzLCBxdWVyeSwgc2l6ZSwgY2xhenopO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgY29udGV4dDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9wZXJhdGlvbjpcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5SRUFEXG4gICAgICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuREVMRVRFXG4gICAgICB8IHN0cmluZyxcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPiB8IENvbnN0cnVjdG9yPE0+W10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4ge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNvbnRleHQpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBDcmVhdGluZyBuZXcgY29udGV4dCBmb3IgJHtvcGVyYXRpb259IG9wZXJhdGlvbiBvbiAke0FycmF5LmlzQXJyYXkobW9kZWwpID8gbW9kZWwubWFwKChtKSA9PiBtLm5hbWUpIDogbW9kZWwubmFtZX0gbW9kZWwgd2l0aCBmbGFnIG92ZXJyaWRlczogJHtKU09OLnN0cmluZ2lmeShvdmVycmlkZXMpfWBcbiAgICApO1xuICAgIGNvbnN0IGZsYWdzID0gYXdhaXQgdGhpcy5mbGFncyhcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIG1vZGVsLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdEZhYnJpY0NsaWVudEZsYWdzLCBvdmVycmlkZXMpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgcmV0dXJuIG5ldyBDb250ZXh0KCkuYWNjdW11bGF0ZShmbGFncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlY29kZXMgYSBVaW50OEFycmF5IHRvIGEgc3RyaW5nXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGJpbmFyeSBkYXRhIHJlY2VpdmVkIGZyb20gRmFicmljIHRvIGEgc3RyaW5nIHVzaW5nIFVURi04IGVuY29kaW5nXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gZGF0YSAtIFRoZSBiaW5hcnkgZGF0YSB0byBkZWNvZGVcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZGVjb2RlZCBzdHJpbmdcbiAgICovXG4gIGRlY29kZShkYXRhOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gRmFicmljQ2xpZW50QWRhcHRlci5kZWNvZGVyLmRlY29kZShkYXRhKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlcG9zaXRvcnk8XG4gICAgUiBleHRlbmRzIFJlcG9zaXRvcnk8XG4gICAgICBhbnksXG4gICAgICBBZGFwdGVyPFBlZXJDb25maWcsIENsaWVudCwgTWFuZ29RdWVyeSwgQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICAgPixcbiAgPigpOiBDb25zdHJ1Y3RvcjxSPiB7XG4gICAgcmV0dXJuIEZhYnJpY0NsaWVudFJlcG9zaXRvcnkgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxSPjtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogW0NvbnN0cnVjdG9yPE0+LCBQcmltYXJ5S2V5VHlwZSwgUmVjb3JkPHN0cmluZywgYW55PiwgLi4uYW55W10sIENvbnRleHRdIHtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlUHJlZml4KTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcbiAgICByZXR1cm4gW2NsYXp6LCBpZCwgcmVjb3JkLCAuLi5jdHhBcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgbXVsdGlwbGUgcmVjb3JkcyBmb3IgY3JlYXRpb25cbiAgICogQHN1bW1hcnkgQWRkcyBuZWNlc3NhcnkgQ291Y2hEQiBmaWVsZHMgdG8gbXVsdGlwbGUgcmVjb3JkcyBiZWZvcmUgY3JlYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfG51bWJlcltdfSBpZHMgLSBUaGUgSURzIG9mIHRoZSByZWNvcmRzXG4gICAqIEBwYXJhbSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIHByZXBhcmVcbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHRhYmxlTmFtZSwgaWRzLCBhbmQgcHJlcGFyZWQgcmVjb3Jkc1xuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBpZHMgYW5kIG1vZGVscyBhcnJheXMgaGF2ZSBkaWZmZXJlbnQgbGVuZ3Roc1xuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUFsbFByZWZpeDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApIHtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIGNvbnN0IHsgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5jcmVhdGVBbGxQcmVmaXgpO1xuICAgIGNvbnN0IHJlY29yZHMgPSBpZHMubWFwKChpZCwgY291bnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbHNbY291bnRdKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjbGF6eiwgaWRzLCByZWNvcmRzLCAuLi5jdHhBcmdzXTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVBbGxQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMudXBkYXRlQWxsUHJlZml4KTtcbiAgICBjb25zdCByZWNvcmRzID0gaWRzLm1hcCgoKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICAgIHJldHVybiBbY2xhenosIGlkcywgcmVjb3JkcywgLi4uY3R4QXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gY3JlYXRlIG11bHRpcGxlIHJlY29yZHMgaW4gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBudW1iZXJbXX0gaWRzIC0gQXJyYXkgb2YgcmVjb3JkIGlkZW50aWZpZXJzXG4gICAqIEBwYXJhbSB7QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj59IG1vZGVscyAtIEFycmF5IG9mIHJlY29yZCBkYXRhXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gdHJhbnNpZW50IC0gVHJhbnNpZW50IGRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQgcmVjb3Jkc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlQWxsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkczogUHJpbWFyeUtleVR5cGVbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICBjb25zdCBjdHhBcmdzID0gWy4uLihhcmdzIGFzIHVua25vd24gYXMgYW55W10pXTtcbiAgICBjb25zdCB0cmFuc2llbnQgPSBjdHhBcmdzLnNoaWZ0KCkgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChcbiAgICAgIGN0eEFyZ3MgYXMgQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+LFxuICAgICAgdGhpcy5jcmVhdGVBbGxcbiAgICApO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG5cbiAgICBsb2cuaW5mbyhgYWRkaW5nICR7aWRzLmxlbmd0aH0gZW50cmllcyB0byAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cudmVyYm9zZShgcGtzOiAke2lkc31gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLkNSRUFURV9BTEwsXG4gICAgICBbXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIG1vZGVscy5tYXAoKG0pID0+IHRoaXMuc2VyaWFsaXplci5zZXJpYWxpemUobSwgY2xhenoubmFtZSkpXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgdHJhbnNpZW50LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRoaXMuZGVjb2RlKHJlc3VsdCkpLm1hcCgocjogYW55KSA9PiBKU09OLnBhcnNlKHIpKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gcmVhZCBtdWx0aXBsZSByZWNvcmRzIGZyb20gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBudW1iZXJbXX0gaWRzIC0gQXJyYXkgb2YgcmVjb3JkIGlkZW50aWZpZXJzIHRvIHJlYWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXRyaWV2ZWQgcmVjb3Jkc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcmVhZEFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZWFkQWxsKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGxvZy5pbmZvKGByZWFkaW5nICR7aWRzLmxlbmd0aH0gZW50cmllcyB0byAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cudmVyYm9zZShgcGtzOiAke2lkc31gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRlVHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuUkVBRF9BTEwsXG4gICAgICBbSlNPTi5zdHJpbmdpZnkoaWRzKV0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5kZWNvZGUocmVzdWx0KSkubWFwKChyOiBhbnkpID0+IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIG11bHRpcGxlIHJlY29yZHMgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBtdWx0aXBsZSByZWNvcmRzIGluIHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgbnVtYmVyW119IGlkcyAtIEFycmF5IG9mIHJlY29yZCBpZGVudGlmaWVyc1xuICAgKiBAcGFyYW0ge0FycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+fSBtb2RlbHMgLSBBcnJheSBvZiB1cGRhdGVkIHJlY29yZCBkYXRhXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gdHJhbnNpZW50IC0gVHJhbnNpZW50IGRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHVwZGF0ZWQgcmVjb3Jkc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlQWxsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkczogUHJpbWFyeUtleVR5cGVbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICBjb25zdCBjdHhBcmdzID0gWy4uLihhcmdzIGFzIHVua25vd24gYXMgYW55W10pXTtcbiAgICBjb25zdCB0cmFuc2llbnQgPSBjdHhBcmdzLnNoaWZ0KCkgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChcbiAgICAgIGN0eEFyZ3MgYXMgQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+LFxuICAgICAgdGhpcy51cGRhdGVBbGxcbiAgICApO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLmluZm8oYHVwZGF0aW5nICR7aWRzLmxlbmd0aH0gZW50cmllcyB0byAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cudmVyYm9zZShgcGtzOiAke2lkc31gKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuVVBEQVRFX0FMTCxcbiAgICAgIFtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtLCBjbGF6ei5uYW1lKSlcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICB0cmFuc2llbnQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5kZWNvZGUocmVzdWx0KSkubWFwKChyOiBhbnkpID0+IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWxldGVzIG11bHRpcGxlIHJlY29yZHMgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGRlbGV0ZSBtdWx0aXBsZSByZWNvcmRzIGZyb20gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50Pn0gaWRzIC0gQXJyYXkgb2YgcmVjb3JkIGlkZW50aWZpZXJzIHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0ge1NlcmlhbGl6ZXI8YW55Pn0gc2VyaWFsaXplciAtIFNlcmlhbGl6ZXIgZm9yIHRoZSBtb2RlbCBkYXRhXG4gICAqIEByZXR1cm4ge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgZGVsZXRlZCByZWNvcmRzXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBkZWxldGVBbGw8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IEFkYXB0ZXIubG9nQ3R4KGFyZ3MsIHRoaXMuZGVsZXRlQWxsKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGxvZy5pbmZvKGBkZWxldGluZyAke2lkcy5sZW5ndGh9IGVudHJpZXMgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLnZlcmJvc2UoYHBrczogJHtpZHN9YCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5ERUxFVEVfQUxMLFxuICAgICAgW0pTT04uc3RyaW5naWZ5KGlkcyldLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRoaXMuZGVjb2RlKHJlc3VsdCkpLm1hcCgocjogYW55KSA9PiBKU09OLnBhcnNlKHIpKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgYSBtb2RlbCBmb3IgcGVyc2lzdGVuY2VcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBtb2RlbCBpbnN0YW5jZSBpbnRvIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBkYXRhYmFzZSBzdG9yYWdlLFxuICAgKiBoYW5kbGluZyBjb2x1bW4gbWFwcGluZyBhbmQgc2VwYXJhdGluZyB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gcHJlcGFyZVxuICAgKiBAcGFyYW0gcGsgLSBUaGUgcHJpbWFyeSBrZXkgcHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBkYXRhXG4gICAqL1xuICBvdmVycmlkZSBwcmVwYXJlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFNlZ3JlZ2F0ZWRNb2RlbDxNPiAmIFByZXBhcmVkTW9kZWwge1xuICAgIGNvbnN0IHsgbG9nIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnByZXBhcmUpO1xuICAgIGNvbnN0IHNwbGl0ID0gTW9kZWwuc2VncmVnYXRlKG1vZGVsKTtcbiAgICBpZiAoKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXSkge1xuICAgICAgbG9nLnNpbGx5KFxuICAgICAgICBgUGFzc2luZyBhbG9uZyBwZXJzaXN0ZW5jZSBtZXRhZGF0YSBmb3IgJHsobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdfWBcbiAgICAgICk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3BsaXQubW9kZWwsIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiAobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY29yZDogc3BsaXQubW9kZWwsXG4gICAgICBtb2RlbDogc3BsaXQubW9kZWwsXG4gICAgICBpZDogbW9kZWxbTW9kZWwucGsobW9kZWwuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3I8TT4pXSBhcyBzdHJpbmcsXG4gICAgICB0cmFuc2llbnQ6IHNwbGl0LnRyYW5zaWVudCxcbiAgICAgIHByaXZhdGU6IHNwbGl0LnByaXZhdGUsXG4gICAgICBzaGFyZWQ6IHNwbGl0LnNoYXJlZCxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgcmV2ZXJ0PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgdHJhbnNpZW50PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogTSB7XG4gICAgY29uc3QgeyBsb2cgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucmV2ZXJ0KTtcbiAgICBpZiAodHJhbnNpZW50KSB7XG4gICAgICBsb2cudmVyYm9zZShcbiAgICAgICAgYHJlLWFkZGluZyB0cmFuc2llbnQgcHJvcGVydGllczogJHtPYmplY3Qua2V5cyh0cmFuc2llbnQpLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgICAgT2JqZWN0LmVudHJpZXModHJhbnNpZW50IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKGtleSBpbiBvYmopXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgVHJhbnNpZW50IHByb3BlcnR5ICR7a2V5fSBhbHJlYWR5IGV4aXN0cyBvbiBtb2RlbCAke3R5cGVvZiBjbGF6eiA9PT0gXCJzdHJpbmdcIiA/IGNsYXp6IDogY2xhenoubmFtZX0uIHNob3VsZCBiZSBpbXBvc3NpYmxlYFxuICAgICAgICAgICk7XG4gICAgICAgIChvYmogYXMgTSlba2V5IGFzIGtleW9mIE1dID0gdmFsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyAoY2xhenogYXMgQ29uc3RydWN0b3I8TT4pKG9iaik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzaW5nbGUgcmVjb3JkXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byBjcmVhdGUgYSByZWNvcmQgaW4gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSByZWNvcmQgaWRlbnRpZmllclxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIHJlY29yZCBkYXRhXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gdHJhbnNpZW50IC0gVHJhbnNpZW50IGRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCByZWNvcmRcbiAgICovXG4gIEBkZWJ1ZygpXG4gIEBmaW5hbCgpXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgdHJhbnNpZW50OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IGN0eEFyZ3MgPSBbLi4uKGFyZ3MgYXMgdW5rbm93biBhcyBhbnlbXSldO1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KFxuICAgICAgY3R4QXJncyBhcyBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4sXG4gICAgICB0aGlzLmNyZWF0ZVxuICAgICk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cudmVyYm9zZShgYWRkaW5nIGVudHJ5IHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy5kZWJ1ZyhgcGs6ICR7aWR9YCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgICAgW3RoaXMuc2VyaWFsaXplci5zZXJpYWxpemUobW9kZWwsIGNsYXp6Lm5hbWUpXSxcbiAgICAgIHRyYW5zaWVudCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodGhpcy5kZWNvZGUocmVzdWx0KSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlYWRzIGEgc2luZ2xlIHJlY29yZFxuICAgKiBAc3VtbWFyeSBFdmFsdWF0ZXMgYSB0cmFuc2FjdGlvbiB0byByZWFkIGEgcmVjb3JkIGZyb20gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSByZWNvcmQgaWRlbnRpZmllclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0cmlldmVkIHJlY29yZFxuICAgKi9cbiAgQGRlYnVnKClcbiAgQGZpbmFsKClcbiAgYXN5bmMgcmVhZDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucmVhZEFsbCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcblxuICAgIGxvZy52ZXJib3NlKGByZWFkaW5nIGVudHJ5IGZyb20gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRlVHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgICBbaWQudG9TdHJpbmcoKV0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHRoaXMuZGVjb2RlKHJlc3VsdCkpO1xuICB9XG5cbiAgdXBkYXRlUHJlZml4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnVwZGF0ZVByZWZpeCk7XG4gICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IHRhYmxlTmFtZTtcbiAgICAvLyByZWNvcmRbQ291Y2hEQktleXMuSURdID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbCk7XG4gICAgcmV0dXJuIFtjbGF6eiwgaWQsIHJlY29yZCwgLi4uY3R4QXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgYSBzaW5nbGUgcmVjb3JkXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byB1cGRhdGUgYSByZWNvcmQgaW4gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSByZWNvcmQgaWRlbnRpZmllclxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIHVwZGF0ZWQgcmVjb3JkIGRhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB0cmFuc2llbnQgLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB1cGRhdGVkIHJlY29yZFxuICAgKi9cbiAgQGRlYnVnKClcbiAgQGZpbmFsKClcbiAgYXN5bmMgdXBkYXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICB0cmFuc2llbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgY3R4QXJncyA9IFsuLi4oYXJncyBhcyB1bmtub3duIGFzIGFueVtdKV07XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoXG4gICAgICBjdHhBcmdzIGFzIENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PixcbiAgICAgIHRoaXMudXBkYXRlQWxsXG4gICAgKTtcbiAgICBsb2cuaW5mbyhgQ0xJRU5UIFVQREFURSBjbGFzcyA6ICR7dHlwZW9mIGNsYXp6fWApO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLnZlcmJvc2UoYHVwZGF0aW5nIGVudHJ5IHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy5kZWJ1ZyhgcGs6ICR7aWR9YCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIE9wZXJhdGlvbktleXMuVVBEQVRFLFxuICAgICAgW3RoaXMuc2VyaWFsaXplci5zZXJpYWxpemUobW9kZWwsIGNsYXp6Lm5hbWUgfHwgY2xhenopXSwgLy8gVE9ETyBzaG91bGQgYmUgcmVjZXZpbmcgY2xhc3MgYnV0IGlzIHJlY2VpdmluZyBzdHJpbmdcbiAgICAgIHRyYW5zaWVudCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodGhpcy5kZWNvZGUocmVzdWx0KSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSBzaW5nbGUgcmVjb3JkXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byBkZWxldGUgYSByZWNvcmQgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyIHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgZGVsZXRlZCByZWNvcmRcbiAgICovXG4gIEBkZWJ1ZygpXG4gIEBmaW5hbCgpXG4gIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuZGVsZXRlKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGxvZy52ZXJib3NlKGBkZWxldGluZyBlbnRyeSBmcm9tICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy5kZWJ1ZyhgcGs6ICR7aWR9YCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgICAgW2lkLnRvU3RyaW5nKCldLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0aGlzLmRlY29kZShyZXN1bHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgcXVlcnkgYWdhaW5zdCB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAc3VtbWFyeSBFdmFsdWF0ZXMgYSB0cmFuc2FjdGlvbiB0byBwZXJmb3JtIGEgcXVlcnkgdXNpbmcgTWFuZ28gUXVlcnkgc3ludGF4XG4gICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHJldHVybiB0eXBlXG4gICAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcmF3SW5wdXQgLSBUaGUgTWFuZ28gUXVlcnkgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByb2Nlc3MgLSBXaGV0aGVyIHRvIHByb2Nlc3MgdGhlIHJlc3VsdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFY+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcXVlcnkgcmVzdWx0XG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICAgKiAgIHBhcnRpY2lwYW50IEZhYnJpY0FkYXB0ZXJcbiAgICogICBwYXJ0aWNpcGFudCBDb250cmFjdFxuICAgKiAgIHBhcnRpY2lwYW50IENoYWluY29kZVxuICAgKlxuICAgKiAgIENsaWVudC0+PkZhYnJpY0FkYXB0ZXI6IHJhdyhyYXdJbnB1dCwgcHJvY2VzcylcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogSlNPTi5zdHJpbmdpZnkocmF3SW5wdXQpXG4gICAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IGV2YWx1YXRlVHJhbnNhY3Rpb24oXCJxdWVyeVwiLCBbaW5wdXRdKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogZXZhbHVhdGUoXCJxdWVyeVwiLCBwcm9wb3NhbE9wdGlvbnMpXG4gICAqICAgQ29udHJhY3QtPj5DaGFpbmNvZGU6IGludm9rZVxuICAgKiAgIENoYWluY29kZS0tPj5Db250cmFjdDogcmVzcG9uc2VcbiAgICogICBDb250cmFjdC0tPj5GYWJyaWNBZGFwdGVyOiByZXN1bHRcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogSlNPTi5wYXJzZShkZWNvZGUocmVzdWx0KSlcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogUHJvY2VzcyByZXN1bHQgYmFzZWQgb24gdHlwZVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItLT4+Q2xpZW50OiBwcm9jZXNzZWQgcmVzdWx0XG4gICAqL1xuICBAZGVidWcoKVxuICBhc3luYyByYXc8ViwgRCBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHJhd0lucHV0OiBNYW5nb1F1ZXJ5LFxuICAgIGRvY3NPbmx5OiBEID0gdHJ1ZSBhcyBELFxuICAgIGNsYXp6OiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8Vj4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucmF3KTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBjbGF6ei5uYW1lO1xuICAgIGxvZy5pbmZvKGBQZXJmb3JtaW5nIHJhdyBzdGF0ZW1lbnQgb24gdGFibGUgJHtNb2RlbC50YWJsZU5hbWUoY2xhenopfWApO1xuICAgIGxldCB0cmFuc2FjdGlvblJlc3VsdDogYW55O1xuICAgIHRyeSB7XG4gICAgICB0cmFuc2FjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgY3R4LFxuICAgICAgICBcInJhd1wiLFxuICAgICAgICBbSlNPTi5zdHJpbmdpZnkocmF3SW5wdXQpLCBkb2NzT25seV0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0YWJsZU5hbWVcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UodGhpcy5kZWNvZGUodHJhbnNhY3Rpb25SZXN1bHQpKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzIHJlc3VsdDogJHtlfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlUmVjb3JkID0gKHJlY29yZDogUmVjb3JkPGFueSwgYW55PikgPT4ge1xuICAgICAgaWYgKE1vZGVsLmlzTW9kZWwocmVjb3JkKSkgcmV0dXJuIE1vZGVsLmJ1aWxkKHJlY29yZCk7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHJldHVybiByZXN1bHQgYXMgVjtcbiAgICAgIGNvbnN0IGVsID0gcmVzdWx0WzBdO1xuICAgICAgaWYgKE1vZGVsLmlzTW9kZWwoZWwpKVxuICAgICAgICAvLyBpZiB0aGUgZmlyc3Qgb25lIGlzIGEgbW9kZWwsIGFsbCBhcmUgbW9kZWxzXG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKChlbCkgPT4gTW9kZWwuYnVpbGQoZWwpKSBhcyBWO1xuICAgICAgcmV0dXJuIHJlc3VsdCBhcyBWO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVJlY29yZChyZXN1bHQgYXMgYW55KSBhcyBWO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIG9yIGNyZWF0ZXMgYSBnUlBDIGNsaWVudCBmb3IgdGhlIEZhYnJpYyBwZWVyXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgYSBjYWNoZWQgY2xpZW50IG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIG5vbmUgZXhpc3RzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q2xpZW50Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGdSUEMgY2xpZW50XG4gICAqL1xuICBvdmVycmlkZSBnZXRDbGllbnQoKTogQ2xpZW50IHtcbiAgICBpZiAoIXRoaXMuX2NsaWVudClcbiAgICAgIHRoaXMuX2NsaWVudCA9IEZhYnJpY0NsaWVudEFkYXB0ZXIuZ2V0Q2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIGEgR2F0ZXdheSBpbnN0YW5jZSBmb3IgdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBuZXcgR2F0ZXdheSBpbnN0YW5jZSB1c2luZyB0aGUgY3VycmVudCBjbGllbnRcbiAgICogQHJldHVybiB7UHJvbWlzZTxHYXRld2F5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIEdhdGV3YXkgaW5zdGFuY2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBHYXRld2F5KGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4pOiBQcm9taXNlPEdhdGV3YXk+IHtcbiAgICByZXR1cm4gRmFicmljQ2xpZW50QWRhcHRlci5nZXRHYXRld2F5KGN0eCwgdGhpcy5jb25maWcsIHRoaXMuY2xpZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udHJhY3ROYW1lKGNsYXNzTmFtZT86IHN0cmluZykge1xuICAgIGlmICghY2xhc3NOYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBgJHtjbGFzc05hbWV9Q29udHJhY3RgO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIGEgQ29udHJhY3QgaW5zdGFuY2UgZm9yIHRoZSBGYWJyaWMgY2hhaW5jb2RlXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBuZXcgQ29udHJhY3QgaW5zdGFuY2UgdXNpbmcgdGhlIGN1cnJlbnQgR2F0ZXdheVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENvbnRyYWt0Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIENvbnRyYWN0IGluc3RhbmNlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgQ29udHJhY3QoXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPixcbiAgICBjb250cmFjdE5hbWU/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDb250cmFrdD4ge1xuICAgIHJldHVybiBGYWJyaWNDbGllbnRBZGFwdGVyLmdldENvbnRyYWN0KFxuICAgICAgYXdhaXQgdGhpcy5HYXRld2F5KGN0eCksXG4gICAgICB0aGlzLmNvbmZpZyxcbiAgICAgIGNvbnRyYWN0TmFtZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgdHJhbnNhY3Rpb24gb24gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgb3IgZXZhbHVhdGVzIGEgdHJhbnNhY3Rpb24gb24gdGhlIEZhYnJpYyBjaGFpbmNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaSAtIFRoZSBjaGFpbmNvZGUgZnVuY3Rpb24gdG8gY2FsbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Ym1pdCAtIFdoZXRoZXIgdG8gc3VibWl0ICh0cnVlKSBvciBldmFsdWF0ZSAoZmFsc2UpIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gLSBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY2hhaW5jb2RlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gW3RyYW5zaWVudERhdGFdIC0gVHJhbnNpZW50IGRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtlbmRvcnNpbmdPcmdhbml6YXRpb25zXSAtIE9yZ2FuaXphdGlvbnMgdGhhdCBtdXN0IGVuZG9yc2UgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VWludDhBcnJheT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB0cmFuc2FjdGlvbiByZXN1bHRcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgRmFicmljQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IEdhdGV3YXlcbiAgICogICBwYXJ0aWNpcGFudCBDb250cmFjdFxuICAgKiAgIHBhcnRpY2lwYW50IENoYWluY29kZVxuICAgKlxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5HYXRld2F5OiBjb25uZWN0KClcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+Q29udHJhY3Q6IGdldENvbnRyYWN0KClcbiAgICogICBhbHQgc3VibWl0IHRyYW5zYWN0aW9uXG4gICAqICAgICBGYWJyaWNBZGFwdGVyLT4+Q29udHJhY3Q6IHN1Ym1pdChhcGksIHByb3Bvc2FsT3B0aW9ucylcbiAgICogICBlbHNlIGV2YWx1YXRlIHRyYW5zYWN0aW9uXG4gICAqICAgICBGYWJyaWNBZGFwdGVyLT4+Q29udHJhY3Q6IGV2YWx1YXRlKGFwaSwgcHJvcG9zYWxPcHRpb25zKVxuICAgKiAgIGVuZFxuICAgKiAgIENvbnRyYWN0LT4+Q2hhaW5jb2RlOiBpbnZva2VcbiAgICogICBDaGFpbmNvZGUtLT4+Q29udHJhY3Q6IHJlc3BvbnNlXG4gICAqICAgQ29udHJhY3QtLT4+RmFicmljQWRhcHRlcjogcmVzdWx0XG4gICAqICAgRmFicmljQWRhcHRlci0+PkdhdGV3YXk6IGNsb3NlKClcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB0cmFuc2FjdGlvbihcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGFwaTogc3RyaW5nLFxuICAgIHN1Ym1pdCA9IHRydWUsXG4gICAgYXJncz86IGFueVtdLFxuICAgIHRyYW5zaWVudERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnM/OiBBcnJheTxzdHJpbmc+LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy50cmFuc2FjdGlvbik7XG4gICAgY29uc3QgZ2F0ZXdheSA9IGF3YWl0IHRoaXMuR2F0ZXdheShjdHgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250cmFjdCA9IGF3YWl0IHRoaXMuQ29udHJhY3QoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdGhpcy5nZXRDb250cmFjdE5hbWUoY2xhc3NOYW1lKVxuICAgICAgKTtcbiAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICBgJHtzdWJtaXQgPyBcIlN1Ym1pdFwiIDogXCJFdmFsdWF0ZVwifXRpbmcgdHJhbnNhY3Rpb24gJHt0aGlzLmdldENvbnRyYWN0TmFtZShjbGFzc05hbWUpIHx8IHRoaXMuY29uZmlnLmNvbnRyYWN0TmFtZX0uJHthcGl9YFxuICAgICAgKTtcbiAgICAgIGxvZy5kZWJ1ZyhgYXJnczogJHthcmdzPy5tYXAoKGEpID0+IGEudG9TdHJpbmcoKSkuam9pbihcIlxcblwiKSB8fCBcIm5vbmVcIn1gKTtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHN1Ym1pdCA/IGNvbnRyYWN0LnN1Ym1pdCA6IGNvbnRyYWN0LmV2YWx1YXRlO1xuXG4gICAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zID0gZW5kb3JzaW5nT3JnYW5pemF0aW9ucz8ubGVuZ3RoXG4gICAgICAgID8gZW5kb3JzaW5nT3JnYW5pemF0aW9uc1xuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHByb3Bvc2FsT3B0aW9uczogUHJvcG9zYWxPcHRpb25zID0ge1xuICAgICAgICBhcmd1bWVudHM6IGFyZ3MgfHwgW10sXG4gICAgICAgIHRyYW5zaWVudERhdGE6IHRyYW5zaWVudERhdGEsXG4gICAgICAgIC8vIC4uLihlbmRvcnNpbmdPcmdhbml6YXRpb25zICYmIHsgZW5kb3JzaW5nT3JnYW5pemF0aW9ucyB9KSAvLyBtc3BJZCBsaXN0XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgbWV0aG9kLmNhbGwoY29udHJhY3QsIGFwaSwgcHJvcG9zYWxPcHRpb25zKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09IDEwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlLmRldGFpbHNbMF0ubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsb3NpbmcgJHt0aGlzLmNvbmZpZy5tc3BJZH0gZ2F0ZXdheSBjb25uZWN0aW9uYCk7XG4gICAgICBnYXRld2F5LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYW4gZXJyb3IgaW50byBhIEJhc2VFcnJvclxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBhbnkgZXJyb3IgaW50byBhIHN0YW5kYXJkaXplZCBCYXNlRXJyb3JcbiAgICogQHBhcmFtIHtFcnJvciB8IHN0cmluZ30gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIE9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGVycm9yXG4gICAqIEByZXR1cm4ge0Jhc2VFcnJvcn0gVGhlIHBhcnNlZCBlcnJvclxuICAgKi9cbiAgb3ZlcnJpZGUgcGFyc2VFcnJvcjxFIGV4dGVuZHMgQmFzZUVycm9yPihlcnI6IEVycm9yIHwgc3RyaW5nKTogRSB7XG4gICAgcmV0dXJuIEZhYnJpY0NsaWVudEFkYXB0ZXIucGFyc2VFcnJvcjxFPihlcnIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIGEgdHJhbnNhY3Rpb24gdGhhdCBtb2RpZmllcyB0aGUgbGVkZ2VyIHN0YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBUaGUgY2hhaW5jb2RlIGZ1bmN0aW9uIHRvIGNhbGxcbiAgICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIC0gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNoYWluY29kZSBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFt0cmFuc2llbnREYXRhXSAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbZW5kb3JzaW5nT3JnYW5pemF0aW9uc10gLSBPcmdhbml6YXRpb25zIHRoYXQgbXVzdCBlbmRvcnNlIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVpbnQ4QXJyYXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdHJhbnNhY3Rpb24gcmVzdWx0XG4gICAqL1xuICBhc3luYyBzdWJtaXRUcmFuc2FjdGlvbihcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGFwaTogc3RyaW5nLFxuICAgIGFyZ3M/OiBhbnlbXSxcbiAgICB0cmFuc2llbnREYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zPzogQXJyYXk8c3RyaW5nPixcbiAgICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBhcGksXG4gICAgICB0cnVlLFxuICAgICAgYXJncyxcbiAgICAgIHRyYW5zaWVudERhdGEsXG4gICAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZhbHVhdGVzIGEgdHJhbnNhY3Rpb24gb24gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIGEgdHJhbnNhY3Rpb24gdGhhdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGxlZGdlciBzdGF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpIC0gVGhlIGNoYWluY29kZSBmdW5jdGlvbiB0byBjYWxsXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjaGFpbmNvZGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbdHJhbnNpZW50RGF0YV0gLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW2VuZG9yc2luZ09yZ2FuaXphdGlvbnNdIC0gT3JnYW5pemF0aW9ucyB0aGF0IG11c3QgZW5kb3JzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxVaW50OEFycmF5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRyYW5zYWN0aW9uIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGFwaTogc3RyaW5nLFxuICAgIGFyZ3M/OiBhbnlbXSxcbiAgICB0cmFuc2llbnREYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zPzogQXJyYXk8c3RyaW5nPixcbiAgICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBhcGksXG4gICAgICBmYWxzZSxcbiAgICAgIGFyZ3MsXG4gICAgICB0cmFuc2llbnREYXRhLFxuICAgICAgZW5kb3JzaW5nT3JnYW5pemF0aW9ucyxcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENsb3NlcyB0aGUgY29ubmVjdGlvbiB0byB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgQ2xvc2VzIHRoZSBnUlBDIGNsaWVudCBpZiBpdCBleGlzdHNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNsaWVudCBpcyBjbG9zZWRcbiAgICovXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsaWVudCkge1xuICAgICAgdGhpcy5sb2cudmVyYm9zZShgQ2xvc2luZyAke3RoaXMuY29uZmlnLm1zcElkfSBnYXRld2F5IGNsaWVudGApO1xuICAgICAgdGhpcy5jbGllbnQuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBDb250cmFjdCBpbnN0YW5jZSBmcm9tIGEgR2F0ZXdheVxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYSBjaGFpbmNvZGUgY29udHJhY3QgZnJvbSB0aGUgc3BlY2lmaWVkIG5ldHdvcmtcbiAgICogQHBhcmFtIHtHYXRld2F5fSBnYXRld2F5IC0gVGhlIEdhdGV3YXkgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtQZWVyQ29uZmlnfSBjb25maWcgLSBUaGUgcGVlciBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm4ge0NvbnRyYWt0fSBUaGUgQ29udHJhY3QgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBnZXRDb250cmFjdChcbiAgICBnYXRld2F5OiBHYXRld2F5LFxuICAgIGNvbmZpZzogUGVlckNvbmZpZyxcbiAgICBjb250cmFjdE5hbWU/OiBzdHJpbmdcbiAgKTogQ29udHJha3Qge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmdldENvbnRyYWN0KTtcbiAgICBjb25zdCBuZXR3b3JrID0gdGhpcy5nZXROZXR3b3JrKGdhdGV3YXksIGNvbmZpZy5jaGFubmVsKTtcbiAgICBsZXQgY29udHJhY3Q6IENvbnRyYWt0O1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBSZXRyaWV2aW5nIGNoYWluY29kZSAke2NvbmZpZy5jaGFpbmNvZGVOYW1lfSBjb250cmFjdCAke2NvbnRyYWN0TmFtZSB8fCBjb25maWcuY29udHJhY3ROYW1lfSBmcm9tIG5ldHdvcmsgJHtjb25maWcuY2hhbm5lbH1gXG4gICAgICApO1xuICAgICAgY29udHJhY3ROYW1lID0gY29udHJhY3ROYW1lID8gY29udHJhY3ROYW1lIDogY29uZmlnLmNvbnRyYWN0TmFtZTtcbiAgICAgIGNvbnRyYWN0ID0gbmV0d29yay5nZXRDb250cmFjdChjb25maWcuY2hhaW5jb2RlTmFtZSwgY29udHJhY3ROYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIGEgTmV0d29yayBpbnN0YW5jZSBmcm9tIGEgR2F0ZXdheVxuICAgKiBAc3VtbWFyeSBDb25uZWN0cyB0byBhIHNwZWNpZmljIGNoYW5uZWwgb24gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBwYXJhbSB7R2F0ZXdheX0gZ2F0ZXdheSAtIFRoZSBHYXRld2F5IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjaGFubmVsIHRvIGNvbm5lY3QgdG9cbiAgICogQHJldHVybiB7TmV0d29ya30gVGhlIE5ldHdvcmsgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBnZXROZXR3b3JrKGdhdGV3YXk6IEdhdGV3YXksIGNoYW5uZWxOYW1lOiBzdHJpbmcpOiBOZXR3b3JrIHtcbiAgICBjb25zdCBsb2cgPSBMb2dnaW5nLmZvcih0aGlzLmdldE5ldHdvcmspO1xuICAgIGxldCBuZXR3b3JrOiBOZXR3b3JrO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gY2hhbm5lbCAke2NoYW5uZWxOYW1lfWApO1xuICAgICAgbmV0d29yayA9IGdhdGV3YXkuZ2V0TmV0d29yayhjaGFubmVsTmFtZSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldHdvcms7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBHYXRld2F5IGluc3RhbmNlIGZvciBjb25uZWN0aW5nIHRvIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgR2F0ZXdheSB1c2luZyB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbiBhbmQgY2xpZW50XG4gICAqIEBwYXJhbSB7UGVlckNvbmZpZ30gY29uZmlnIC0gVGhlIHBlZXIgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge0NsaWVudH0gW2NsaWVudF0gLSBPcHRpb25hbCBnUlBDIGNsaWVudCwgd2lsbCBiZSBjcmVhdGVkIGlmIG5vdCBwcm92aWRlZFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdhdGV3YXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgR2F0ZXdheSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldEdhdGV3YXkoXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPixcbiAgICBjb25maWc6IFBlZXJDb25maWcsXG4gICAgY2xpZW50PzogQ2xpZW50XG4gICkge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRDb25uZWN0aW9uKFxuICAgICAgY2xpZW50IHx8IChhd2FpdCB0aGlzLmdldENsaWVudChjb25maWcpKSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGN0eFxuICAgICkpIGFzIEdhdGV3YXk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBnUlBDIGNsaWVudCBmb3IgY29ubmVjdGluZyB0byBhIEZhYnJpYyBwZWVyXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgY2xpZW50IHdpdGggVExTIGNyZWRlbnRpYWxzIGZvciBzZWN1cmUgY29tbXVuaWNhdGlvblxuICAgKiBAcGFyYW0ge1BlZXJDb25maWd9IGNvbmZpZyAtIFRoZSBwZWVyIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybiB7Q2xpZW50fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgZ1JQQyBjbGllbnRcbiAgICovXG4gIHN0YXRpYyBnZXRDbGllbnQoY29uZmlnOiBQZWVyQ29uZmlnKTogQ2xpZW50IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5nZXRDbGllbnQpO1xuICAgIGxvZy5kZWJ1ZyhgZ2VuZXJhdGluZyBUTFMgY3JlZGVudGlhbHMgZm9yIG1zcCAke2NvbmZpZy5tc3BJZH1gKTtcbiAgICBsZXQgcGF0aE9yQ2VydDogc3RyaW5nIHwgQnVmZmVyID0gY29uZmlnLnRsc0NlcnQgYXMgc3RyaW5nIHwgQnVmZmVyO1xuXG4gICAgaWYgKHR5cGVvZiBwYXRoT3JDZXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBhdGhPckNlcnQubWF0Y2goXG4gICAgICAgICAgLy0tLS0tQkVHSU4gKENFUlRJRklDQVRFfEtFWXxQUklWQVRFIEtFWSktLS0tLS4rPy0tLS0tRU5EIFxcMS0tLS0tJC9nbXNcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHBhdGhPckNlcnQgPSBCdWZmZXIuZnJvbShwYXRoT3JDZXJ0LCBcInV0ZjhcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhdGhPckNlcnQgPSBCdWZmZXIuZnJvbShmcy5yZWFkRmlsZVN5bmMocGF0aE9yQ2VydCwgXCJ1dGY4XCIpKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byByZWFkIHRoZSB0bHMgY2VydGlmaWNhdGUgZnJvbSAke3BhdGhPckNlcnR9OiAke2V9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0bHNDcmVkZW50aWFscyA9IGdycGMuY3JlZGVudGlhbHMuY3JlYXRlU3NsKHBhdGhPckNlcnQpO1xuICAgIGxvZy5kZWJ1ZyhgZ2VuZXJhdGluZyBHYXRld2F5IENsaWVudCBmb3IgdXJsICR7Y29uZmlnLnBlZXJFbmRwb2ludH1gKTtcbiAgICByZXR1cm4gbmV3IENsaWVudChjb25maWcucGVlckVuZHBvaW50LCB0bHNDcmVkZW50aWFscywge1xuICAgICAgXCJncnBjLm1heF9yZWNlaXZlX21lc3NhZ2VfbGVuZ3RoXCI6IChjb25maWcuc2l6ZUxpbWl0IHx8IDE1KSAqIDEwMjQgKiAxMDI0LFxuICAgICAgXCJncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoXCI6IChjb25maWcuc2l6ZUxpbWl0IHx8IDE1KSAqIDEwMjQgKiAxMDI0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBHYXRld2F5IGNvbm5lY3Rpb24gd2l0aCBpZGVudGl0eSBhbmQgc2lnbmVyXG4gICAqIEBwYXJhbSB7Q2xpZW50fSBjbGllbnQgLSBUaGUgZ1JQQyBjbGllbnRcbiAgICogQHBhcmFtIHtQZWVyQ29uZmlnfSBjb25maWcgLSBUaGUgcGVlciBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2F0ZXdheT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjb25uZWN0ZWQgR2F0ZXdheVxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBGYWJyaWNBZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgSWRlbnRpdHlcbiAgICogICBwYXJ0aWNpcGFudCBTaWduZXJcbiAgICogICBwYXJ0aWNpcGFudCBHYXRld2F5XG4gICAqXG4gICAqICAgQ2FsbGVyLT4+RmFicmljQWRhcHRlcjogZ2V0Q29ubmVjdGlvbihjbGllbnQsIGNvbmZpZylcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+SWRlbnRpdHk6IGdldElkZW50aXR5KG1zcElkLCBjZXJ0RGlyZWN0b3J5UGF0aClcbiAgICogICBJZGVudGl0eS0tPj5GYWJyaWNBZGFwdGVyOiBpZGVudGl0eVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5TaWduZXI6IGdldFNpZ25lcihrZXlEaXJlY3RvcnlQYXRoKVxuICAgKiAgIFNpZ25lci0tPj5GYWJyaWNBZGFwdGVyOiBzaWduZXJcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogQ3JlYXRlIENvbm5lY3RPcHRpb25zXG4gICAqICAgRmFicmljQWRhcHRlci0+PkdhdGV3YXk6IGNvbm5lY3Qob3B0aW9ucylcbiAgICogICBHYXRld2F5LS0+PkZhYnJpY0FkYXB0ZXI6IGdhdGV3YXlcbiAgICogICBGYWJyaWNBZGFwdGVyLS0+PkNhbGxlcjogZ2F0ZXdheVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldENvbm5lY3Rpb24oXG4gICAgY2xpZW50OiBDbGllbnQsXG4gICAgY29uZmlnOiBQZWVyQ29uZmlnLFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz5cbiAgKSB7XG4gICAgY29uc3QgbG9nID0gTG9nZ2luZy5mb3IodGhpcy5nZXRDb25uZWN0aW9uKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgUmV0cmlldmluZyBQZWVyIElkZW50aXR5IGZvciAke2NvbmZpZy5tc3BJZH0gdW5kZXIgJHtjb25maWcuY2VydENlcnRPckRpcmVjdG9yeVBhdGh9YFxuICAgICk7XG4gICAgY29uc3QgaWRlbnRpdHkgPSBhd2FpdCBnZXRJZGVudGl0eShcbiAgICAgIGNvbmZpZy5tc3BJZCxcbiAgICAgIGNvbmZpZy5jZXJ0Q2VydE9yRGlyZWN0b3J5UGF0aCBhcyBhbnlcbiAgICApO1xuICAgIGxvZy5kZWJ1ZyhgUmV0cmlldmluZyBzaWduZXIga2V5IGZyb20gJHtjb25maWcua2V5Q2VydE9yRGlyZWN0b3J5UGF0aH1gKTtcblxuICAgIGxldCBzaWduZXI6IFNpZ25lcixcbiAgICAgIGNsb3NlID0gKCkgPT4ge307XG4gICAgaWYgKCFjb25maWcuaHNtKSB7XG4gICAgICBzaWduZXIgPSBhd2FpdCBnZXRTaWduZXIoY29uZmlnLmtleUNlcnRPckRpcmVjdG9yeVBhdGggYXMgYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaHNtID0gbmV3IEhTTVNpZ25lckZhY3RvcnlDdXN0b20oY29uZmlnLmhzbS5saWJyYXJ5KTtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBoc20uZ2V0U0tJRnJvbUNlcnRpZmljYXRlUGF0aChcbiAgICAgICAgY29uZmlnLmNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRoIGFzIGFueVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBrY3MxMVNpZ25lciA9IGhzbS5uZXdTaWduZXIoe1xuICAgICAgICBsYWJlbDogY29uZmlnLmhzbS50b2tlbkxhYmVsIGFzIHN0cmluZyxcbiAgICAgICAgcGluOiBTdHJpbmcoY29uZmlnLmhzbS5waW4pIGFzIHN0cmluZyxcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgLy8gdXNlclR5cGU6IDEgLypDS1VfVVNFUiAqLyxcbiAgICAgIH0pO1xuICAgICAgc2lnbmVyID0gcGtjczExU2lnbmVyLnNpZ25lcjtcblxuICAgICAgY2xvc2UgPSBwa2NzMTFTaWduZXIuY2xvc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGNsaWVudCxcbiAgICAgIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgICAgIHNpZ25lcjogc2lnbmVyLFxuICAgICAgLy8gRGVmYXVsdCB0aW1lb3V0cyBmb3IgZGlmZmVyZW50IGdSUEMgY2FsbHNcbiAgICAgIGV2YWx1YXRlT3B0aW9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm4geyBkZWFkbGluZTogRGF0ZS5ub3coKSArIDEwMDAgKiBjdHguZ2V0KFwiZXZhbHVhdGVUaW1lb3V0XCIpIH07IC8vIGRlZmF1bHRzIHRvIDUgc2Vjb25kc1xuICAgICAgfSxcbiAgICAgIGVuZG9yc2VPcHRpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGRlYWRsaW5lOiBEYXRlLm5vdygpICsgMTAwMCAqIGN0eC5nZXQoXCJlbmRvcnNlVGltZW91dFwiKSB9OyAvLyBkZWZhdWx0cyB0byAxNSBzZWNvbmRzXG4gICAgICB9LFxuICAgICAgc3VibWl0T3B0aW9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm4geyBkZWFkbGluZTogRGF0ZS5ub3coKSArIDEwMDAgKiBjdHguZ2V0KFwic3VibWl0VGltZW91dFwiKSB9OyAvLyBkZWZhdWx0cyB0byA1IHNlY29uZHNcbiAgICAgIH0sXG4gICAgICBjb21taXRTdGF0dXNPcHRpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGRlYWRsaW5lOiBEYXRlLm5vdygpICsgMTAwMCAqIGN0eC5nZXQoXCJjb21taXRUaW1lb3V0XCIpIH07IC8vIGRlZmF1bHRzIHRvIDEgbWludXRlXG4gICAgICB9LFxuICAgIH0gYXMgQ29ubmVjdE9wdGlvbnM7XG5cbiAgICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gJHtjb25maWcubXNwSWR9YCk7XG4gICAgY29uc3QgZ2F0ZXdheSA9IGNvbm5lY3Qob3B0aW9ucyk7XG5cbiAgICAvLyBUT0RPOiByZXBsYWNlP1xuICAgIGlmIChjb25maWcuaHNtKSB7XG4gICAgICBnYXRld2F5LmNsb3NlID0gbmV3IFByb3h5KGdhdGV3YXkuY2xvc2UsIHtcbiAgICAgICAgYXBwbHkodGFyZ2V0OiAoKSA9PiB2b2lkLCB0aGlzQXJnOiBhbnksIGFyZ0FycmF5OiBhbnlbXSk6IGFueSB7XG4gICAgICAgICAgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ0FycmF5KTtcbiAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGV3YXk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgRGlzcGF0Y2ggaW5zdGFuY2UgZm9yIHRoZSBGYWJyaWMgY2xpZW50LlxuICAgKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIG5ldyBGYWJyaWNDbGllbnREaXNwYXRjaCBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVyYWN0IHdpdGggdGhlIEZhYnJpYyBuZXR3b3JrLlxuICAgKiBAcmV0dXJucyB7RGlzcGF0Y2h9IEEgbmV3IERpc3BhdGNoIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIHRoZSBGYWJyaWMgY2xpZW50LlxuICAgKiBAcmVtYXJrcyBUaGUgRGlzcGF0Y2ggaW5zdGFuY2UgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIEZhYnJpYyBuZXR3b3JrLCBzdWNoIGFzIHN1Ym1pdHRpbmcgdHJhbnNhY3Rpb25zIG9yIHF1ZXJ5aW5nIGRhdGEuXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGZhYnJpY0Rpc3BhdGNoID0gZmFicmljQ2xpZW50QWRhcHRlci5EaXNwYXRjaCgpO1xuICAgKiBmYWJyaWNEaXNwYXRjaC5zdWJtaXRUcmFuc2FjdGlvbignY3JlYXRlUHJvZHVjdCcsIHsgbmFtZTogJ1Byb2R1Y3QgQScsIHByaWNlOiAxMDAgfSk7XG4gICAqL1xuICBvdmVycmlkZSBEaXNwYXRjaCgpOiBGYWJyaWNDbGllbnREaXNwYXRjaCB7XG4gICAgcmV0dXJuIG5ldyBGYWJyaWNDbGllbnRBZGFwdGVyW1wiX2Jhc2VEaXNwYXRjaFwiXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYW4gZXJyb3IgaW50byBhIEJhc2VFcnJvclxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBhbnkgZXJyb3IgaW50byBhIHN0YW5kYXJkaXplZCBCYXNlRXJyb3IgdXNpbmcgdGhlIHBhcmVudCBjbGFzcyBpbXBsZW1lbnRhdGlvblxuICAgKiBAcGFyYW0ge0Vycm9yIHwgc3RyaW5nfSBlcnIgLSBUaGUgZXJyb3IgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgZXJyb3JcbiAgICogQHJldHVybiB7QmFzZUVycm9yfSBUaGUgcGFyc2VkIGVycm9yXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIHBhcnNlRXJyb3I8RSBleHRlbmRzIEJhc2VFcnJvcj4oZXJyOiBFcnJvciB8IHN0cmluZyk6IEUge1xuICAgIC8vIGlmIChcbiAgICAvLyAgIE1JU1NJTkdfUFJJVkFURV9EQVRBX1JFR0VYLnRlc3QoXG4gICAgLy8gICAgIHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIgPyBlcnIgOiBlcnIubWVzc2FnZVxuICAgIC8vICAgKVxuICAgIC8vIClcbiAgICAvLyAgIHJldHVybiBuZXcgVW5hdXRob3JpemVkUHJpdmF0ZURhdGFBY2Nlc3MoZXJyKSBhcyBFO1xuICAgIGNvbnN0IG1zZyA9IHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIgPyBlcnIgOiBlcnIubWVzc2FnZTtcblxuICAgIGlmIChtc2cuaW5jbHVkZXMoXCJNVkNDX1JFQURfQ09ORkxJQ1RcIikpXG4gICAgICByZXR1cm4gbmV3IE12Y2NSZWFkQ29uZmxpY3RFcnJvcihlcnIpIGFzIEU7XG5cbiAgICBpZiAobXNnLmluY2x1ZGVzKFwiRU5ET1JTRU1FTlRfUE9MSUNZX0ZBSUxVUkVcIikpXG4gICAgICByZXR1cm4gbmV3IEVuZG9yc2VtZW50UG9saWN5RXJyb3IoZXJyKSBhcyBFO1xuXG4gICAgaWYgKG1zZy5pbmNsdWRlcyhcIlBIQU5UT01fUkVBRF9DT05GTElDVFwiKSlcbiAgICAgIHJldHVybiBuZXcgUGhhbnRvbVJlYWRDb25mbGljdEVycm9yKGVycikgYXMgRTtcblxuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiAoZXJyIGFzIGFueSkuY29kZSkge1xuICAgICAgc3dpdGNoICgoZXJyIGFzIGFueSkuY29kZSkge1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIG5ldyBFbmRvcnNlbWVudEVycm9yKGVycikgYXMgRTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobXNnLmluY2x1ZGVzKE5vdEZvdW5kRXJyb3IubmFtZSkpIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhDb25mbGljdEVycm9yLm5hbWUpKSByZXR1cm4gbmV3IENvbmZsaWN0RXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoQmFkUmVxdWVzdEVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBCYWRSZXF1ZXN0RXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoUXVlcnlFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBRdWVyeUVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKFBhZ2luZ0Vycm9yLm5hbWUpKSByZXR1cm4gbmV3IFBhZ2luZ0Vycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKFVuc3VwcG9ydGVkRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IFVuc3VwcG9ydGVkRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoTWlncmF0aW9uRXJyb3IubmFtZSkpIHJldHVybiBuZXcgTWlncmF0aW9uRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoT2JzZXJ2ZXJFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBPYnNlcnZlckVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKEF1dGhvcml6YXRpb25FcnJvci5uYW1lKSlcbiAgICAgIHJldHVybiBuZXcgQXV0aG9yaXphdGlvbkVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKEZvcmJpZGRlbkVycm9yLm5hbWUpKSByZXR1cm4gbmV3IEZvcmJpZGRlbkVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKENvbm5lY3Rpb25FcnJvci5uYW1lKSlcbiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKFNlcmlhbGl6YXRpb25FcnJvci5uYW1lKSlcbiAgICAgIHJldHVybiBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGVycikgYXMgRTtcbiAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKSBhcyBFO1xuICB9XG59XG5cbkZhYnJpY0NsaWVudEFkYXB0ZXIuZGVjb3JhdGlvbigpO1xuQWRhcHRlci5zZXRDdXJyZW50KEZhYnJpY0ZsYXZvdXIpO1xuIl19
@@ -44,6 +44,7 @@ export type PeerConfig = {
44
44
  caKey?: string;
45
45
  chaincodeName: string;
46
46
  contractName?: string;
47
+ sizeLimit?: number;
47
48
  ca?: string;
48
49
  mspId: string;
49
50
  channel: string;
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUTFNPcHRpb25zIH0gZnJvbSBcImZhYnJpYy1jYS1jbGllbnRcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRlckZsYWdzIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuZXhwb3J0IHR5cGUgSFNNT3B0aW9ucyA9IHtcbiAgbGlicmFyeTogc3RyaW5nO1xuICBzbG90PzogbnVtYmVyO1xuICB0b2tlbkxhYmVsPzogc3RyaW5nO1xuICBwaW46IHN0cmluZztcbiAga2V5TGFiZWw/OiBzdHJpbmc7XG4gIGtleUlkSGV4Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGluZyB0byBhIEh5cGVybGVkZ2VyIEZhYnJpYyBwZWVyXG4gKiBAc3VtbWFyeSBDb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYSBGYWJyaWMgcGVlciBhbmQgaW50ZXJhY3Qgd2l0aCBjaGFpbmNvZGVcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBlZXJDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcnlwdG9QYXRoIC0gUGF0aCB0byB0aGUgY3J5cHRvIG1hdGVyaWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleUNlcnRPckRpcmVjdG9yeVBhdGggLSBLZXkgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwcml2YXRlIGtleXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjZXJ0Q2VydE9yRGlyZWN0b3J5UGF0aCAtIENlcnQgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBjZXJ0aWZpY2F0ZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0bHNDZXJ0IC0gUGF0aCB0byB0aGUgVExTIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGVlckVuZHBvaW50IC0gRW5kcG9pbnQgVVJMIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBlZXJIb3N0QWxpYXMgLSBIb3N0IGFsaWFzIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhRW5kcG9pbnQgLSBFbmRwb2ludCBVUkwgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYVRsc0NlcnRpZmljYXRlIC0gVExTIGNlcnRpZmljYXRlIGZvciB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FDZXJ0IC0gQ2VydGlmaWNhdGUgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYUtleSAtIEtleSBmb3IgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYWluY29kZU5hbWUgLSBOYW1lIG9mIHRoZSBjaGFpbmNvZGUgdG8gaW50ZXJhY3Qgd2l0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb250cmFjdE5hbWVdIC0gT3B0aW9uYWwgbmFtZSBvZiB0aGUgc3BlY2lmaWMgY29udHJhY3Qgd2l0aGluIHRoZSBjaGFpbmNvZGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2FdIC0gT3B0aW9uYWwgY2VydGlmaWNhdGUgYXV0aG9yaXR5IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtc3BJZCAtIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBJRFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IHR5cGUgUGVlckNvbmZpZyA9IHtcbiAgY3J5cHRvUGF0aDogc3RyaW5nO1xuICBrZXlDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIGNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIHRsc0NlcnQ6IHN0cmluZyB8IEJ1ZmZlcjtcbiAgcGVlckVuZHBvaW50OiBzdHJpbmc7XG4gIHBlZXJIb3N0QWxpYXM6IHN0cmluZztcbiAgY2FFbmRwb2ludD86IHN0cmluZztcbiAgY2FUbHNDZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgY2FDZXJ0Pzogc3RyaW5nO1xuICBjYUtleT86IHN0cmluZztcbiAgY2hhaW5jb2RlTmFtZTogc3RyaW5nO1xuICBjb250cmFjdE5hbWU/OiBzdHJpbmc7XG4gIGNhPzogc3RyaW5nO1xuICBtc3BJZDogc3RyaW5nO1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIGhzbT86IEhTTU9wdGlvbnM7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBjb25uZWN0aW5nIHRvIGEgSHlwZXJsZWRnZXIgRmFicmljIHBlZXJcbiAqIEBzdW1tYXJ5IENvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhIEZhYnJpYyBwZWVyIGFuZCBpbnRlcmFjdCB3aXRoIGNoYWluY29kZVxuICogQHR5cGVkZWYge09iamVjdH0gQ0FDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgLSBQYXRoIHRvIHRoZSBjcnlwdG8gbWF0ZXJpYWxzXG4gKiBAcHJvcGVydHkge1RMU09wdGlvbnN9IHRscyAtIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHByaXZhdGUga2V5c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhTmFtZSAtIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGNlcnRpZmljYXRlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRsc0NlcnRQYXRoIC0gUGF0aCB0byB0aGUgVExTIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FDZXJ0IC0gRW5kcG9pbnQgVVJMIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjYUtleV0gLSBIb3N0IGFsaWFzIGZvciB0aGUgcGVlciBvciBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYWRtaW4gcHJpdmF0ZSBrZXlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IHR5cGUgQ0FDb25maWcgPSB7XG4gIHVybDogc3RyaW5nO1xuICB0bHM/OiBUTFNPcHRpb25zO1xuICBjYU5hbWU6IHN0cmluZztcbiAgY2FDZXJ0OiBzdHJpbmc7XG4gIGNhS2V5Pzogc3RyaW5nO1xuICBoc20/OiBIU01PcHRpb25zO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVXNlciBjcmVkZW50aWFscyBmb3IgQ0EgZW5yb2xsbWVudCBvciBhY2Nlc3NcbiAqIEBzdW1tYXJ5IE9wdGlvbmFsIHVzZXJuYW1lL3Bhc3N3b3JkIHBhaXIgdXNlZCB3aGVuIGVucm9sbGluZyB3aXRoIGEgRmFicmljIENBIG9yIGF1dGhlbnRpY2F0aW5nIGluIGNsaWVudCB1dGlsaXRpZXNcbiAqIEBpbnRlcmZhY2UgQ3JlZGVudGlhbHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlck5hbWVdIC0gT3B0aW9uYWwgdXNlcm5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFzc3dvcmRdIC0gT3B0aW9uYWwgcGFzc3dvcmRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFscyB7XG4gIHVzZXJOYW1lPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU2VncmVnYXRlZE1vZGVsPE0gZXh0ZW5kcyBNb2RlbD4gPSB7XG4gIG1vZGVsOiBNO1xuICB0cmFuc2llbnQ/OiBSZWNvcmQ8a2V5b2YgTSwgYW55PjtcbiAgcHJpdmF0ZT86IFJlY29yZDxrZXlvZiBNLCBhbnk+O1xuICBzaGFyZWQ/OiBSZWNvcmQ8a2V5b2YgTSwgYW55Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEZhYnJpY0ZsYWdzPExPRyBleHRlbmRzIExvZ2dlciA9IExvZ2dlcj4gPSBBZGFwdGVyRmxhZ3M8TE9HPiAmIHtcbiAgc2VncmVnYXRlZD86IHN0cmluZztcbn07XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUTFNPcHRpb25zIH0gZnJvbSBcImZhYnJpYy1jYS1jbGllbnRcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRlckZsYWdzIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuZXhwb3J0IHR5cGUgSFNNT3B0aW9ucyA9IHtcbiAgbGlicmFyeTogc3RyaW5nO1xuICBzbG90PzogbnVtYmVyO1xuICB0b2tlbkxhYmVsPzogc3RyaW5nO1xuICBwaW46IHN0cmluZztcbiAga2V5TGFiZWw/OiBzdHJpbmc7XG4gIGtleUlkSGV4Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGluZyB0byBhIEh5cGVybGVkZ2VyIEZhYnJpYyBwZWVyXG4gKiBAc3VtbWFyeSBDb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYSBGYWJyaWMgcGVlciBhbmQgaW50ZXJhY3Qgd2l0aCBjaGFpbmNvZGVcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBlZXJDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcnlwdG9QYXRoIC0gUGF0aCB0byB0aGUgY3J5cHRvIG1hdGVyaWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleUNlcnRPckRpcmVjdG9yeVBhdGggLSBLZXkgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwcml2YXRlIGtleXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjZXJ0Q2VydE9yRGlyZWN0b3J5UGF0aCAtIENlcnQgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBjZXJ0aWZpY2F0ZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0bHNDZXJ0IC0gUGF0aCB0byB0aGUgVExTIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGVlckVuZHBvaW50IC0gRW5kcG9pbnQgVVJMIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBlZXJIb3N0QWxpYXMgLSBIb3N0IGFsaWFzIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhRW5kcG9pbnQgLSBFbmRwb2ludCBVUkwgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYVRsc0NlcnRpZmljYXRlIC0gVExTIGNlcnRpZmljYXRlIGZvciB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FDZXJ0IC0gQ2VydGlmaWNhdGUgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYUtleSAtIEtleSBmb3IgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYWluY29kZU5hbWUgLSBOYW1lIG9mIHRoZSBjaGFpbmNvZGUgdG8gaW50ZXJhY3Qgd2l0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb250cmFjdE5hbWVdIC0gT3B0aW9uYWwgbmFtZSBvZiB0aGUgc3BlY2lmaWMgY29udHJhY3Qgd2l0aGluIHRoZSBjaGFpbmNvZGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2FdIC0gT3B0aW9uYWwgY2VydGlmaWNhdGUgYXV0aG9yaXR5IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtc3BJZCAtIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBJRFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IHR5cGUgUGVlckNvbmZpZyA9IHtcbiAgY3J5cHRvUGF0aDogc3RyaW5nO1xuICBrZXlDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIGNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIHRsc0NlcnQ6IHN0cmluZyB8IEJ1ZmZlcjtcbiAgcGVlckVuZHBvaW50OiBzdHJpbmc7XG4gIHBlZXJIb3N0QWxpYXM6IHN0cmluZztcbiAgY2FFbmRwb2ludD86IHN0cmluZztcbiAgY2FUbHNDZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgY2FDZXJ0Pzogc3RyaW5nO1xuICBjYUtleT86IHN0cmluZztcbiAgY2hhaW5jb2RlTmFtZTogc3RyaW5nO1xuICBjb250cmFjdE5hbWU/OiBzdHJpbmc7XG4gIHNpemVMaW1pdD86IG51bWJlcjtcbiAgY2E/OiBzdHJpbmc7XG4gIG1zcElkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgaHNtPzogSFNNT3B0aW9ucztcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gZm9yIGNvbm5lY3RpbmcgdG8gYSBIeXBlcmxlZGdlciBGYWJyaWMgcGVlclxuICogQHN1bW1hcnkgQ29udGFpbnMgYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGEgRmFicmljIHBlZXIgYW5kIGludGVyYWN0IHdpdGggY2hhaW5jb2RlXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDQUNvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCAtIFBhdGggdG8gdGhlIGNyeXB0byBtYXRlcmlhbHNcbiAqIEBwcm9wZXJ0eSB7VExTT3B0aW9uc30gdGxzIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcHJpdmF0ZSBrZXlzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FOYW1lIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgY2VydGlmaWNhdGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGxzQ2VydFBhdGggLSBQYXRoIHRvIHRoZSBUTFMgY2VydGlmaWNhdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYUNlcnQgLSBFbmRwb2ludCBVUkwgZm9yIHRoZSBwZWVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NhS2V5XSAtIEhvc3QgYWxpYXMgZm9yIHRoZSBwZWVyIG9yIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBhZG1pbiBwcml2YXRlIGtleVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgdHlwZSBDQUNvbmZpZyA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRscz86IFRMU09wdGlvbnM7XG4gIGNhTmFtZTogc3RyaW5nO1xuICBjYUNlcnQ6IHN0cmluZztcbiAgY2FLZXk/OiBzdHJpbmc7XG4gIGhzbT86IEhTTU9wdGlvbnM7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVc2VyIGNyZWRlbnRpYWxzIGZvciBDQSBlbnJvbGxtZW50IG9yIGFjY2Vzc1xuICogQHN1bW1hcnkgT3B0aW9uYWwgdXNlcm5hbWUvcGFzc3dvcmQgcGFpciB1c2VkIHdoZW4gZW5yb2xsaW5nIHdpdGggYSBGYWJyaWMgQ0Egb3IgYXV0aGVudGljYXRpbmcgaW4gY2xpZW50IHV0aWxpdGllc1xuICogQGludGVyZmFjZSBDcmVkZW50aWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VyTmFtZV0gLSBPcHRpb25hbCB1c2VybmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBPcHRpb25hbCBwYXNzd29yZFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxzIHtcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTZWdyZWdhdGVkTW9kZWw8TSBleHRlbmRzIE1vZGVsPiA9IHtcbiAgbW9kZWw6IE07XG4gIHRyYW5zaWVudD86IFJlY29yZDxrZXlvZiBNLCBhbnk+O1xuICBwcml2YXRlPzogUmVjb3JkPGtleW9mIE0sIGFueT47XG4gIHNoYXJlZD86IFJlY29yZDxrZXlvZiBNLCBhbnk+O1xufTtcblxuZXhwb3J0IHR5cGUgRmFicmljRmxhZ3M8TE9HIGV4dGVuZHMgTG9nZ2VyID0gTG9nZ2VyPiA9IEFkYXB0ZXJGbGFnczxMT0c+ICYge1xuICBzZWdyZWdhdGVkPzogc3RyaW5nO1xufTtcbiJdfQ==
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.45";
1
+ export declare const VERSION = "0.1.48";
2
2
  export declare const PACKAGE_NAME = "@decaf-ts/for-fabric";
@@ -1,5 +1,5 @@
1
1
  import { Metadata } from "@decaf-ts/decoration";
2
- export const VERSION = "0.1.45";
2
+ export const VERSION = "0.1.48";
3
3
  export const PACKAGE_NAME = "@decaf-ts/for-fabric";
4
4
  Metadata.registerLibrary(PACKAGE_NAME, VERSION);
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUM7QUFFMUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSBcIiMjUEFDS0FHRSMjXCI7XG5cbk1ldGFkYXRhLnJlZ2lzdGVyTGlicmFyeShQQUNLQUdFX05BTUUsIFZFUlNJT04pO1xuIl19
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUTFNPcHRpb25zIH0gZnJvbSBcImZhYnJpYy1jYS1jbGllbnRcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRlckZsYWdzIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuZXhwb3J0IHR5cGUgSFNNT3B0aW9ucyA9IHtcbiAgbGlicmFyeTogc3RyaW5nO1xuICBzbG90PzogbnVtYmVyO1xuICB0b2tlbkxhYmVsPzogc3RyaW5nO1xuICBwaW46IHN0cmluZztcbiAga2V5TGFiZWw/OiBzdHJpbmc7XG4gIGtleUlkSGV4Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGluZyB0byBhIEh5cGVybGVkZ2VyIEZhYnJpYyBwZWVyXG4gKiBAc3VtbWFyeSBDb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYSBGYWJyaWMgcGVlciBhbmQgaW50ZXJhY3Qgd2l0aCBjaGFpbmNvZGVcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBlZXJDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcnlwdG9QYXRoIC0gUGF0aCB0byB0aGUgY3J5cHRvIG1hdGVyaWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleUNlcnRPckRpcmVjdG9yeVBhdGggLSBLZXkgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwcml2YXRlIGtleXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjZXJ0Q2VydE9yRGlyZWN0b3J5UGF0aCAtIENlcnQgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBjZXJ0aWZpY2F0ZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0bHNDZXJ0IC0gUGF0aCB0byB0aGUgVExTIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGVlckVuZHBvaW50IC0gRW5kcG9pbnQgVVJMIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBlZXJIb3N0QWxpYXMgLSBIb3N0IGFsaWFzIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhRW5kcG9pbnQgLSBFbmRwb2ludCBVUkwgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYVRsc0NlcnRpZmljYXRlIC0gVExTIGNlcnRpZmljYXRlIGZvciB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FDZXJ0IC0gQ2VydGlmaWNhdGUgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYUtleSAtIEtleSBmb3IgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYWluY29kZU5hbWUgLSBOYW1lIG9mIHRoZSBjaGFpbmNvZGUgdG8gaW50ZXJhY3Qgd2l0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb250cmFjdE5hbWVdIC0gT3B0aW9uYWwgbmFtZSBvZiB0aGUgc3BlY2lmaWMgY29udHJhY3Qgd2l0aGluIHRoZSBjaGFpbmNvZGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2FdIC0gT3B0aW9uYWwgY2VydGlmaWNhdGUgYXV0aG9yaXR5IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtc3BJZCAtIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBJRFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IHR5cGUgUGVlckNvbmZpZyA9IHtcbiAgY3J5cHRvUGF0aDogc3RyaW5nO1xuICBrZXlDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIGNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIHRsc0NlcnQ6IHN0cmluZyB8IEJ1ZmZlcjtcbiAgcGVlckVuZHBvaW50OiBzdHJpbmc7XG4gIHBlZXJIb3N0QWxpYXM6IHN0cmluZztcbiAgY2FFbmRwb2ludD86IHN0cmluZztcbiAgY2FUbHNDZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgY2FDZXJ0Pzogc3RyaW5nO1xuICBjYUtleT86IHN0cmluZztcbiAgY2hhaW5jb2RlTmFtZTogc3RyaW5nO1xuICBjb250cmFjdE5hbWU/OiBzdHJpbmc7XG4gIGNhPzogc3RyaW5nO1xuICBtc3BJZDogc3RyaW5nO1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIGhzbT86IEhTTU9wdGlvbnM7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBjb25uZWN0aW5nIHRvIGEgSHlwZXJsZWRnZXIgRmFicmljIHBlZXJcbiAqIEBzdW1tYXJ5IENvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhIEZhYnJpYyBwZWVyIGFuZCBpbnRlcmFjdCB3aXRoIGNoYWluY29kZVxuICogQHR5cGVkZWYge09iamVjdH0gQ0FDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgLSBQYXRoIHRvIHRoZSBjcnlwdG8gbWF0ZXJpYWxzXG4gKiBAcHJvcGVydHkge1RMU09wdGlvbnN9IHRscyAtIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHByaXZhdGUga2V5c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhTmFtZSAtIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGNlcnRpZmljYXRlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRsc0NlcnRQYXRoIC0gUGF0aCB0byB0aGUgVExTIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FDZXJ0IC0gRW5kcG9pbnQgVVJMIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjYUtleV0gLSBIb3N0IGFsaWFzIGZvciB0aGUgcGVlciBvciBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYWRtaW4gcHJpdmF0ZSBrZXlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IHR5cGUgQ0FDb25maWcgPSB7XG4gIHVybDogc3RyaW5nO1xuICB0bHM/OiBUTFNPcHRpb25zO1xuICBjYU5hbWU6IHN0cmluZztcbiAgY2FDZXJ0OiBzdHJpbmc7XG4gIGNhS2V5Pzogc3RyaW5nO1xuICBoc20/OiBIU01PcHRpb25zO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVXNlciBjcmVkZW50aWFscyBmb3IgQ0EgZW5yb2xsbWVudCBvciBhY2Nlc3NcbiAqIEBzdW1tYXJ5IE9wdGlvbmFsIHVzZXJuYW1lL3Bhc3N3b3JkIHBhaXIgdXNlZCB3aGVuIGVucm9sbGluZyB3aXRoIGEgRmFicmljIENBIG9yIGF1dGhlbnRpY2F0aW5nIGluIGNsaWVudCB1dGlsaXRpZXNcbiAqIEBpbnRlcmZhY2UgQ3JlZGVudGlhbHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlck5hbWVdIC0gT3B0aW9uYWwgdXNlcm5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFzc3dvcmRdIC0gT3B0aW9uYWwgcGFzc3dvcmRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFscyB7XG4gIHVzZXJOYW1lPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgU2VncmVnYXRlZE1vZGVsPE0gZXh0ZW5kcyBNb2RlbD4gPSB7XG4gIG1vZGVsOiBNO1xuICB0cmFuc2llbnQ/OiBSZWNvcmQ8a2V5b2YgTSwgYW55PjtcbiAgcHJpdmF0ZT86IFJlY29yZDxrZXlvZiBNLCBhbnk+O1xuICBzaGFyZWQ/OiBSZWNvcmQ8a2V5b2YgTSwgYW55Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEZhYnJpY0ZsYWdzPExPRyBleHRlbmRzIExvZ2dlciA9IExvZ2dlcj4gPSBBZGFwdGVyRmxhZ3M8TE9HPiAmIHtcbiAgc2VncmVnYXRlZD86IHN0cmluZztcbn07XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUTFNPcHRpb25zIH0gZnJvbSBcImZhYnJpYy1jYS1jbGllbnRcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRlckZsYWdzIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuZXhwb3J0IHR5cGUgSFNNT3B0aW9ucyA9IHtcbiAgbGlicmFyeTogc3RyaW5nO1xuICBzbG90PzogbnVtYmVyO1xuICB0b2tlbkxhYmVsPzogc3RyaW5nO1xuICBwaW46IHN0cmluZztcbiAga2V5TGFiZWw/OiBzdHJpbmc7XG4gIGtleUlkSGV4Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGluZyB0byBhIEh5cGVybGVkZ2VyIEZhYnJpYyBwZWVyXG4gKiBAc3VtbWFyeSBDb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYSBGYWJyaWMgcGVlciBhbmQgaW50ZXJhY3Qgd2l0aCBjaGFpbmNvZGVcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBlZXJDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcnlwdG9QYXRoIC0gUGF0aCB0byB0aGUgY3J5cHRvIG1hdGVyaWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleUNlcnRPckRpcmVjdG9yeVBhdGggLSBLZXkgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwcml2YXRlIGtleXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjZXJ0Q2VydE9yRGlyZWN0b3J5UGF0aCAtIENlcnQgZmlsZSBjb250ZW50cyBvciBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBjZXJ0aWZpY2F0ZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0bHNDZXJ0IC0gUGF0aCB0byB0aGUgVExTIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGVlckVuZHBvaW50IC0gRW5kcG9pbnQgVVJMIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBlZXJIb3N0QWxpYXMgLSBIb3N0IGFsaWFzIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhRW5kcG9pbnQgLSBFbmRwb2ludCBVUkwgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYVRsc0NlcnRpZmljYXRlIC0gVExTIGNlcnRpZmljYXRlIGZvciB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FDZXJ0IC0gQ2VydGlmaWNhdGUgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYUtleSAtIEtleSBmb3IgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYWluY29kZU5hbWUgLSBOYW1lIG9mIHRoZSBjaGFpbmNvZGUgdG8gaW50ZXJhY3Qgd2l0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb250cmFjdE5hbWVdIC0gT3B0aW9uYWwgbmFtZSBvZiB0aGUgc3BlY2lmaWMgY29udHJhY3Qgd2l0aGluIHRoZSBjaGFpbmNvZGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2FdIC0gT3B0aW9uYWwgY2VydGlmaWNhdGUgYXV0aG9yaXR5IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtc3BJZCAtIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBJRFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBDaGFubmVsIG5hbWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IHR5cGUgUGVlckNvbmZpZyA9IHtcbiAgY3J5cHRvUGF0aDogc3RyaW5nO1xuICBrZXlDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIGNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIHRsc0NlcnQ6IHN0cmluZyB8IEJ1ZmZlcjtcbiAgcGVlckVuZHBvaW50OiBzdHJpbmc7XG4gIHBlZXJIb3N0QWxpYXM6IHN0cmluZztcbiAgY2FFbmRwb2ludD86IHN0cmluZztcbiAgY2FUbHNDZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgY2FDZXJ0Pzogc3RyaW5nO1xuICBjYUtleT86IHN0cmluZztcbiAgY2hhaW5jb2RlTmFtZTogc3RyaW5nO1xuICBjb250cmFjdE5hbWU/OiBzdHJpbmc7XG4gIHNpemVMaW1pdD86IG51bWJlcjtcbiAgY2E/OiBzdHJpbmc7XG4gIG1zcElkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgaHNtPzogSFNNT3B0aW9ucztcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gZm9yIGNvbm5lY3RpbmcgdG8gYSBIeXBlcmxlZGdlciBGYWJyaWMgcGVlclxuICogQHN1bW1hcnkgQ29udGFpbnMgYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGEgRmFicmljIHBlZXIgYW5kIGludGVyYWN0IHdpdGggY2hhaW5jb2RlXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDQUNvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCAtIFBhdGggdG8gdGhlIGNyeXB0byBtYXRlcmlhbHNcbiAqIEBwcm9wZXJ0eSB7VExTT3B0aW9uc30gdGxzIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcHJpdmF0ZSBrZXlzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FOYW1lIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgY2VydGlmaWNhdGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGxzQ2VydFBhdGggLSBQYXRoIHRvIHRoZSBUTFMgY2VydGlmaWNhdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYUNlcnQgLSBFbmRwb2ludCBVUkwgZm9yIHRoZSBwZWVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NhS2V5XSAtIEhvc3QgYWxpYXMgZm9yIHRoZSBwZWVyIG9yIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBhZG1pbiBwcml2YXRlIGtleVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgdHlwZSBDQUNvbmZpZyA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRscz86IFRMU09wdGlvbnM7XG4gIGNhTmFtZTogc3RyaW5nO1xuICBjYUNlcnQ6IHN0cmluZztcbiAgY2FLZXk/OiBzdHJpbmc7XG4gIGhzbT86IEhTTU9wdGlvbnM7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVc2VyIGNyZWRlbnRpYWxzIGZvciBDQSBlbnJvbGxtZW50IG9yIGFjY2Vzc1xuICogQHN1bW1hcnkgT3B0aW9uYWwgdXNlcm5hbWUvcGFzc3dvcmQgcGFpciB1c2VkIHdoZW4gZW5yb2xsaW5nIHdpdGggYSBGYWJyaWMgQ0Egb3IgYXV0aGVudGljYXRpbmcgaW4gY2xpZW50IHV0aWxpdGllc1xuICogQGludGVyZmFjZSBDcmVkZW50aWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VyTmFtZV0gLSBPcHRpb25hbCB1c2VybmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBPcHRpb25hbCBwYXNzd29yZFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxzIHtcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTZWdyZWdhdGVkTW9kZWw8TSBleHRlbmRzIE1vZGVsPiA9IHtcbiAgbW9kZWw6IE07XG4gIHRyYW5zaWVudD86IFJlY29yZDxrZXlvZiBNLCBhbnk+O1xuICBwcml2YXRlPzogUmVjb3JkPGtleW9mIE0sIGFueT47XG4gIHNoYXJlZD86IFJlY29yZDxrZXlvZiBNLCBhbnk+O1xufTtcblxuZXhwb3J0IHR5cGUgRmFicmljRmxhZ3M8TE9HIGV4dGVuZHMgTG9nZ2VyID0gTG9nZ2VyPiA9IEFkYXB0ZXJGbGFnczxMT0c+ICYge1xuICBzZWdyZWdhdGVkPzogc3RyaW5nO1xufTtcbiJdfQ==
@@ -44,6 +44,7 @@ export type PeerConfig = {
44
44
  caKey?: string;
45
45
  chaincodeName: string;
46
46
  contractName?: string;
47
+ sizeLimit?: number;
47
48
  ca?: string;
48
49
  mspId: string;
49
50
  channel: string;
package/lib/version.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PACKAGE_NAME = exports.VERSION = void 0;
4
4
  const decoration_1 = require("@decaf-ts/decoration");
5
- exports.VERSION = "0.1.45";
5
+ exports.VERSION = "0.1.48";
6
6
  exports.PACKAGE_NAME = "@decaf-ts/for-fabric";
7
7
  decoration_1.Metadata.registerLibrary(exports.PACKAGE_NAME, exports.VERSION);
8
8
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFnRDtBQUVuQyxRQUFBLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDeEIsUUFBQSxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBRTFDLHFCQUFRLENBQUMsZUFBZSxDQUFDLG9CQUFZLEVBQUUsZUFBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSBcIiMjUEFDS0FHRSMjXCI7XG5cbk1ldGFkYXRhLnJlZ2lzdGVyTGlicmFyeShQQUNLQUdFX05BTUUsIFZFUlNJT04pO1xuIl19
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.45";
1
+ export declare const VERSION = "0.1.48";
2
2
  export declare const PACKAGE_NAME = "@decaf-ts/for-fabric";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/for-fabric",
3
- "version": "0.1.46",
3
+ "version": "0.1.48",
4
4
  "description": "Abstracts fabric logic",
5
5
  "type": "module",
6
6
  "exports": {