cdk-monitoring-constructs
Version:
[](https://gitpod.io/#https://github.com/cdklabs/cdk-monitoring-constructs) [](https://badge
90 lines • 15.5 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SecretsManagerSecretMonitoring = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
const common_1 = require("../../common");
const dashboard_1 = require("../../dashboard");
const SecretsManagerMetricsPublisher_1 = require("./SecretsManagerMetricsPublisher");
const SecretsManagerSecretMetricFactory_1 = require("./SecretsManagerSecretMetricFactory");
class SecretsManagerSecretMonitoring extends common_1.Monitoring {
constructor(scope, props) {
super(scope);
const publisher = SecretsManagerMetricsPublisher_1.SecretsManagerMetricsPublisher.getInstance(scope);
publisher.addSecret(props.secret);
const namingStrategy = new dashboard_1.MonitoringNamingStrategy({
...props,
namedConstruct: props.secret,
fallbackConstructName: props.secret.secretName,
});
this.title = namingStrategy.resolveHumanReadableName();
this.showLastRotationWidget = !!(props.showLastRotationWidget || props.addDaysSinceLastRotationAlarm);
const metricFactory = new SecretsManagerSecretMetricFactory_1.SecretsManagerSecretMetricFactory(scope.createMetricFactory(), props);
this.daysSinceLastChangeMetric = metricFactory.metricDaysSinceLastChange();
this.daysSinceLastRotationMetric =
metricFactory.metricDaysSinceLastRotation();
this.alarmFactory = this.createAlarmFactory(namingStrategy.resolveAlarmFriendlyName());
const ageAlarmFactory = new common_1.AgeAlarmFactory(this.alarmFactory);
this.daysSinceLastChangeAnnotations = [];
this.daysSinceLastRotationAnnotations = [];
for (const disambiguator in props.addDaysSinceLastChangeAlarm) {
const alarmProps = props.addDaysSinceLastChangeAlarm[disambiguator];
const createdAlarm = ageAlarmFactory.addDaysSinceUpdateAlarm(this.daysSinceLastChangeMetric, alarmProps, disambiguator);
this.daysSinceLastChangeAnnotations.push(createdAlarm.annotation);
this.addAlarm(createdAlarm);
}
for (const disambiguator in props.addDaysSinceLastRotationAlarm) {
const alarmProps = props.addDaysSinceLastRotationAlarm[disambiguator];
const createdAlarm = ageAlarmFactory.addDaysSinceUpdateAlarm(this.daysSinceLastRotationMetric, alarmProps, disambiguator);
this.daysSinceLastRotationAnnotations.push(createdAlarm.annotation);
this.addAlarm(createdAlarm);
}
props.useCreatedAlarms?.consume(this.createdAlarms());
props.usePublisher?.consume(publisher.lambda);
}
getDaysSinceLastChangeWidget() {
return new aws_cloudwatch_1.GraphWidget({
width: common_1.HalfWidth,
height: common_1.DefaultGraphWidgetHeight,
title: "Days since last change",
left: [this.daysSinceLastChangeMetric],
leftYAxis: common_1.CountAxisFromZero,
leftAnnotations: this.daysSinceLastChangeAnnotations,
});
}
getDaysSinceLastRotationWidget() {
return new aws_cloudwatch_1.GraphWidget({
width: common_1.HalfWidth,
height: common_1.DefaultGraphWidgetHeight,
title: "Days since last rotation",
left: [this.daysSinceLastRotationMetric],
leftYAxis: common_1.CountAxisFromZero,
leftAnnotations: this.daysSinceLastRotationAnnotations,
});
}
getTitleWidget() {
return new dashboard_1.MonitoringHeaderWidget({
family: "Secret",
title: this.title,
});
}
widgets() {
const widgets = [
this.getTitleWidget(),
this.getDaysSinceLastChangeWidget(),
];
if (this.showLastRotationWidget) {
widgets.push(this.getDaysSinceLastRotationWidget());
}
return widgets;
}
summaryWidgets() {
// TODO verify dimensions, mainly height
return this.widgets();
}
}
exports.SecretsManagerSecretMonitoring = SecretsManagerSecretMonitoring;
_a = JSII_RTTI_SYMBOL_1;
SecretsManagerSecretMonitoring[_a] = { fqn: "cdk-monitoring-constructs.SecretsManagerSecretMonitoring", version: "1.21.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjcmV0c01hbmFnZXJTZWNyZXRNb25pdG9yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiU2VjcmV0c01hbmFnZXJTZWNyZXRNb25pdG9yaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0RBSW9DO0FBR3BDLHlDQVdzQjtBQUN0QiwrQ0FHeUI7QUFDekIscUZBQWtGO0FBQ2xGLDJGQUc2QztBQW9DN0MsTUFBYSw4QkFBK0IsU0FBUSxtQkFBVTtJQVM1RCxZQUNFLEtBQXNCLEVBQ3RCLEtBQTBDO1FBRTFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLE1BQU0sU0FBUyxHQUFHLCtEQUE4QixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLG9DQUF3QixDQUFDO1lBQ2xELEdBQUcsS0FBSztZQUNSLGNBQWMsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUM1QixxQkFBcUIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVU7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLENBQzlCLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQ3BFLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLHFFQUFpQyxDQUN6RCxLQUFLLENBQUMsbUJBQW1CLEVBQUUsRUFDM0IsS0FBSyxDQUNOLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLEdBQUcsYUFBYSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDM0UsSUFBSSxDQUFDLDJCQUEyQjtZQUM5QixhQUFhLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUU5QyxJQUFJ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Q0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDOztBQWxISCx3RUFtSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBHcmFwaFdpZGdldCxcbiAgSG9yaXpvbnRhbEFubm90YXRpb24sXG4gIElXaWRnZXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHsgSUZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcblxuaW1wb3J0IHtcbiAgQWdlQWxhcm1GYWN0b3J5LFxuICBBbGFybUZhY3RvcnksXG4gIEJhc2VNb25pdG9yaW5nUHJvcHMsXG4gIENvdW50QXhpc0Zyb21aZXJvLFxuICBEYXlzU2luY2VVcGRhdGVUaHJlc2hvbGQsXG4gIERlZmF1bHRHcmFwaFdpZGdldEhlaWdodCxcbiAgSGFsZldpZHRoLFxuICBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0LFxuICBNb25pdG9yaW5nLFxuICBNb25pdG9yaW5nU2NvcGUsXG59IGZyb20gXCIuLi8uLi9jb21tb25cIjtcbmltcG9ydCB7XG4gIE1vbml0b3JpbmdIZWFkZXJXaWRnZXQsXG4gIE1vbml0b3JpbmdOYW1pbmdTdHJhdGVneSxcbn0gZnJvbSBcIi4uLy4uL2Rhc2hib2FyZFwiO1xuaW1wb3J0IHsgU2VjcmV0c01hbmFnZXJNZXRyaWNzUHVibGlzaGVyIH0gZnJvbSBcIi4vU2VjcmV0c01hbmFnZXJNZXRyaWNzUHVibGlzaGVyXCI7XG5pbXBvcnQge1xuICBTZWNyZXRzTWFuYWdlclNlY3JldE1ldHJpY0ZhY3RvcnksXG4gIFNlY3JldHNNYW5hZ2VyU2VjcmV0TWV0cmljRmFjdG9yeVByb3BzLFxufSBmcm9tIFwiLi9TZWNyZXRzTWFuYWdlclNlY3JldE1ldHJpY0ZhY3RvcnlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJUHVibGlzaGVyQ29uc3VtZXIge1xuICBjb25zdW1lKGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24pOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHNNYW5hZ2VyU2VjcmV0TW9uaXRvcmluZ09wdGlvbnNcbiAgZXh0ZW5kcyBCYXNlTW9uaXRvcmluZ1Byb3BzIHtcbiAgcmVhZG9ubHkgYWRkRGF5c1NpbmNlTGFzdENoYW5nZUFsYXJtPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBEYXlzU2luY2VVcGRhdGVUaHJlc2hvbGRcbiAgPjtcbiAgcmVhZG9ubHkgYWRkRGF5c1NpbmNlTGFzdFJvdGF0aW9uQWxhcm0/OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIERheXNTaW5jZVVwZGF0ZVRocmVzaG9sZFxuICA+O1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIHRydWUsIGlmIGBhZGREYXlzU2luY2VMYXN0Um90YXRpb25BbGFybWAgaXMgc2V0LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dMYXN0Um90YXRpb25XaWRnZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgbWV0cmljcyBwdWJsaXNoZXIgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIG1heSBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gbW9uaXRvciB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlUHVibGlzaGVyPzogSVB1Ymxpc2hlckNvbnN1bWVyO1xufVxuXG4vKipcbiAqIE1vbml0b3JpbmcgcHJvcHMgZm9yIFNlY3JldHMgTWFuYWdlciBzZWNyZXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHNNYW5hZ2VyU2VjcmV0TW9uaXRvcmluZ1Byb3BzXG4gIGV4dGVuZHMgU2VjcmV0c01hbmFnZXJTZWNyZXRNZXRyaWNGYWN0b3J5UHJvcHMsXG4gICAgU2VjcmV0c01hbmFnZXJTZWNyZXRNb25pdG9yaW5nT3B0aW9ucyB7fVxuXG5leHBvcnQgY2xhc3MgU2VjcmV0c01hbmFnZXJTZWNyZXRNb25pdG9yaW5nIGV4dGVuZHMgTW9uaXRvcmluZyB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNob3dMYXN0Um90YXRpb25XaWRnZXQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxhcm1GYWN0b3J5OiBBbGFybUZhY3Rvcnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF5c1NpbmNlTGFzdENoYW5nZU1ldHJpYzogTWV0cmljV2l0aEFsYXJtU3VwcG9ydDtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXlzU2luY2VMYXN0Q2hhbmdlQW5ub3RhdGlvbnM6IEhvcml6b250YWxBbm5vdGF0aW9uW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF5c1NpbmNlTGFzdFJvdGF0aW9uTWV0cmljOiBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0O1xuICBwcml2YXRlIHJlYWRvbmx5IGRheXNTaW5jZUxhc3RSb3RhdGlvbkFubm90YXRpb25zOiBIb3Jpem9udGFsQW5ub3RhdGlvbltdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBNb25pdG9yaW5nU2NvcGUsXG4gICAgcHJvcHM6IFNlY3JldHNNYW5hZ2VyU2VjcmV0TW9uaXRvcmluZ1Byb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IHB1Ymxpc2hlciA9IFNlY3JldHNNYW5hZ2VyTWV0cmljc1B1Ymxpc2hlci5nZXRJbnN0YW5jZShzY29wZSk7XG4gICAgcHVibGlzaGVyLmFkZFNlY3JldChwcm9wcy5zZWNyZXQpO1xuXG4gICAgY29uc3QgbmFtaW5nU3RyYXRlZ3kgPSBuZXcgTW9uaXRvcmluZ05hbWluZ1N0cmF0ZWd5KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbmFtZWRDb25zdHJ1Y3Q6IHByb3BzLnNlY3JldCxcbiAgICAgIGZhbGxiYWNrQ29uc3RydWN0TmFtZTogcHJvcHMuc2VjcmV0LnNlY3JldE5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnRpdGxlID0gbmFtaW5nU3RyYXRlZ3kucmVzb2x2ZUh1bWFuUmVhZGFibGVOYW1lKCk7XG4gICAgdGhpcy5zaG93TGFzdFJvdGF0aW9uV2lkZ2V0ID0gISEoXG4gICAgICBwcm9wcy5zaG93TGFzdFJvdGF0aW9uV2lkZ2V0IHx8IHByb3BzLmFkZERheXNTaW5jZUxhc3RSb3RhdGlvbkFsYXJtXG4gICAgKTtcbiAgICBjb25zdCBtZXRyaWNGYWN0b3J5ID0gbmV3IFNlY3JldHNNYW5hZ2VyU2VjcmV0TWV0cmljRmFjdG9yeShcbiAgICAgIHNjb3BlLmNyZWF0ZU1ldHJpY0ZhY3RvcnkoKSxcbiAgICAgIHByb3BzXG4gICAgKTtcbiAgICB0aGlzLmRheXNTaW5jZUxhc3RDaGFuZ2VNZXRyaWMgPSBtZXRyaWNGYWN0b3J5Lm1ldHJpY0RheXNTaW5jZUxhc3RDaGFuZ2UoKTtcbiAgICB0aGlzLmRheXNTaW5jZUxhc3RSb3RhdGlvbk1ldHJpYyA9XG4gICAgICBtZXRyaWNGYWN0b3J5Lm1ldHJpY0RheXNTaW5jZUxhc3RSb3RhdGlvbigpO1xuXG4gICAgdGhpcy5hbGFybUZhY3RvcnkgPSB0aGlzLmNyZWF0ZUFsYXJtRmFjdG9yeShcbiAgICAgIG5hbWluZ1N0cmF0ZWd5LnJlc29sdmVBbGFybUZyaWVuZGx5TmFtZSgpXG4gICAgKTtcbiAgICBjb25zdCBhZ2VBbGFybUZhY3RvcnkgPSBuZXcgQWdlQWxhcm1GYWN0b3J5KHRoaXMuYWxhcm1GYWN0b3J5KTtcbiAgICB0aGlzLmRheXNTaW5jZUxhc3RDaGFuZ2VBbm5vdGF0aW9ucyA9IFtdO1xuICAgIHRoaXMuZGF5c1NpbmNlTGFzdFJvdGF0aW9uQW5ub3RhdGlvbnMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZGlzYW1iaWd1YXRvciBpbiBwcm9wcy5hZGREYXlzU2luY2VMYXN0Q2hhbmdlQWxhcm0pIHtcbiAgICAgIGNvbnN0IGFsYXJtUHJvcHMgPSBwcm9wcy5hZGREYXlzU2luY2VMYXN0Q2hhbmdlQWxhcm1bZGlzYW1iaWd1YXRvcl07XG4gICAgICBjb25zdCBjcmVhdGVkQWxhcm0gPSBhZ2VBbGFybUZhY3RvcnkuYWRkRGF5c1NpbmNlVXBkYXRlQWxhcm0oXG4gICAgICAgIHRoaXMuZGF5c1NpbmNlTGFzdENoYW5nZU1ldHJpYyxcbiAgICAgICAgYWxhcm1Qcm9wcyxcbiAgICAgICAgZGlzYW1iaWd1YXRvclxuICAgICAgKTtcbiAgICAgIHRoaXMuZGF5c1NpbmNlTGFzdENoYW5nZUFubm90YXRpb25zLnB1c2goY3JlYXRlZEFsYXJtLmFubm90YXRpb24pO1xuICAgICAgdGhpcy5hZGRBbGFybShjcmVhdGVkQWxhcm0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGlzYW1iaWd1YXRvciBpbiBwcm9wcy5hZGREYXlzU2luY2VMYXN0Um90YXRpb25BbGFybSkge1xuICAgICAgY29uc3QgYWxhcm1Qcm9wcyA9IHByb3BzLmFkZERheXNTaW5jZUxhc3RSb3RhdGlvbkFsYXJtW2Rpc2FtYmlndWF0b3JdO1xuICAgICAgY29uc3QgY3JlYXRlZEFsYXJtID0gYWdlQWxhcm1GYWN0b3J5LmFkZERheXNTaW5jZVVwZGF0ZUFsYXJtKFxuICAgICAgICB0aGlzLmRheXNTaW5jZUxhc3RSb3RhdGlvbk1ldHJpYyxcbiAgICAgICAgYWxhcm1Qcm9wcyxcbiAgICAgICAgZGlzYW1iaWd1YXRvclxuICAgICAgKTtcbiAgICAgIHRoaXMuZGF5c1NpbmNlTGFzdFJvdGF0aW9uQW5ub3RhdGlvbnMucHVzaChjcmVhdGVkQWxhcm0uYW5ub3RhdGlvbik7XG4gICAgICB0aGlzLmFkZEFsYXJtKGNyZWF0ZWRBbGFybSk7XG4gICAgfVxuXG4gICAgcHJvcHMudXNlQ3JlYXRlZEFsYXJtcz8uY29uc3VtZSh0aGlzLmNyZWF0ZWRBbGFybXMoKSk7XG4gICAgcHJvcHMudXNlUHVibGlzaGVyPy5jb25zdW1lKHB1Ymxpc2hlci5sYW1iZGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXlzU2luY2VMYXN0Q2hhbmdlV2lkZ2V0KCkge1xuICAgIHJldHVybiBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgd2lkdGg6IEhhbGZXaWR0aCxcbiAgICAgIGhlaWdodDogRGVmYXVsdEdyYXBoV2lkZ2V0SGVpZ2h0LFxuICAgICAgdGl0bGU6IFwiRGF5cyBzaW5jZSBsYXN0IGNoYW5nZVwiLFxuICAgICAgbGVmdDogW3RoaXMuZGF5c1NpbmNlTGFzdENoYW5nZU1ldHJpY10sXG4gICAgICBsZWZ0WUF4aXM6IENvdW50QXhpc0Zyb21aZXJvLFxuICAgICAgbGVmdEFubm90YXRpb25zOiB0aGlzLmRheXNTaW5jZUxhc3RDaGFuZ2VBbm5vdGF0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF5c1NpbmNlTGFzdFJvdGF0aW9uV2lkZ2V0KCkge1xuICAgIHJldHVybiBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgd2lkdGg6IEhhbGZXaWR0aCxcbiAgICAgIGhlaWdodDogRGVmYXVsdEdyYXBoV2lkZ2V0SGVpZ2h0LFxuICAgICAgdGl0bGU6IFwiRGF5cyBzaW5jZSBsYXN0IHJvdGF0aW9uXCIsXG4gICAgICBsZWZ0OiBbdGhpcy5kYXlzU2luY2VMYXN0Um90YXRpb25NZXRyaWNdLFxuICAgICAgbGVmdFlBeGlzOiBDb3VudEF4aXNGcm9tWmVybyxcbiAgICAgIGxlZnRBbm5vdGF0aW9uczogdGhpcy5kYXlzU2luY2VMYXN0Um90YXRpb25Bbm5vdGF0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGl0bGVXaWRnZXQoKSB7XG4gICAgcmV0dXJuIG5ldyBNb25pdG9yaW5nSGVhZGVyV2lkZ2V0KHtcbiAgICAgIGZhbWlseTogXCJTZWNyZXRcIixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgIH0pO1xuICB9XG5cbiAgd2lkZ2V0cygpOiBJV2lkZ2V0W10ge1xuICAgIGNvbnN0IHdpZGdldHMgPSBbXG4gICAgICB0aGlzLmdldFRpdGxlV2lkZ2V0KCksXG4gICAgICB0aGlzLmdldERheXNTaW5jZUxhc3RDaGFuZ2VXaWRnZXQoKSxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuc2hvd0xhc3RSb3RhdGlvbldpZGdldCkge1xuICAgICAgd2lkZ2V0cy5wdXNoKHRoaXMuZ2V0RGF5c1NpbmNlTGFzdFJvdGF0aW9uV2lkZ2V0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiB3aWRnZXRzO1xuICB9XG5cbiAgc3VtbWFyeVdpZGdldHMoKTogSVdpZGdldFtdIHtcbiAgICAvLyBUT0RPIHZlcmlmeSBkaW1lbnNpb25zLCBtYWlubHkgaGVpZ2h0XG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0cygpO1xuICB9XG59XG4iXX0=