ngx-auto-logout 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +247 -0
- package/dist/README.md +247 -0
- package/dist/bundles/ngx-auto-logout.umd.js +864 -0
- package/dist/bundles/ngx-auto-logout.umd.js.map +1 -0
- package/dist/bundles/ngx-auto-logout.umd.min.js +16 -0
- package/dist/bundles/ngx-auto-logout.umd.min.js.map +1 -0
- package/dist/esm2015/lib/auto-logout.component.js +351 -0
- package/dist/esm2015/lib/auto-logout.module.js +26 -0
- package/dist/esm2015/lib/auto-logout.service.js +384 -0
- package/dist/esm2015/lib/models/auto-logout-config.interface.js +10 -0
- package/dist/esm2015/lib/models/auto-logout-config.token.js +7 -0
- package/dist/esm2015/lib/provide-auto-logout.js +11 -0
- package/dist/esm2015/ngx-auto-logout.js +5 -0
- package/dist/esm2015/public-api.js +10 -0
- package/dist/esm5/lib/auto-logout.component.js +196 -0
- package/dist/esm5/lib/auto-logout.module.js +30 -0
- package/dist/esm5/lib/auto-logout.service.js +391 -0
- package/dist/esm5/lib/models/auto-logout-config.interface.js +10 -0
- package/dist/esm5/lib/models/auto-logout-config.token.js +7 -0
- package/dist/esm5/lib/provide-auto-logout.js +11 -0
- package/dist/esm5/ngx-auto-logout.js +5 -0
- package/dist/esm5/public-api.js +10 -0
- package/dist/fesm2015/ngx-auto-logout.js +787 -0
- package/dist/fesm2015/ngx-auto-logout.js.map +1 -0
- package/dist/fesm5/ngx-auto-logout.js +643 -0
- package/dist/fesm5/ngx-auto-logout.js.map +1 -0
- package/dist/lib/auto-logout.component.d.ts +81 -0
- package/dist/lib/auto-logout.module.d.ts +8 -0
- package/dist/lib/auto-logout.service.d.ts +108 -0
- package/dist/lib/models/auto-logout-config.interface.d.ts +46 -0
- package/dist/lib/models/auto-logout-config.token.d.ts +7 -0
- package/dist/lib/provide-auto-logout.d.ts +6 -0
- package/dist/ngx-auto-logout.d.ts +4 -0
- package/dist/ngx-auto-logout.metadata.json +1 -0
- package/dist/package.json +41 -0
- package/dist/public-api.d.ts +6 -0
- package/package.json +53 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
3
|
+
import { AutoLogoutService } from './auto-logout.service';
|
|
4
|
+
var AutoLogoutComponent = /** @class */ (function () {
|
|
5
|
+
function AutoLogoutComponent(autoLogout) {
|
|
6
|
+
this.autoLogout = autoLogout;
|
|
7
|
+
// ==================== 输入属性 ====================
|
|
8
|
+
/**
|
|
9
|
+
* 是否显示延长按钮
|
|
10
|
+
*/
|
|
11
|
+
this.showExtendButton = true;
|
|
12
|
+
/**
|
|
13
|
+
* 是否显示暂停按钮
|
|
14
|
+
*/
|
|
15
|
+
this.showPauseButton = true;
|
|
16
|
+
/**
|
|
17
|
+
* 延长的秒数(默认30分钟)
|
|
18
|
+
*/
|
|
19
|
+
this.extendSeconds = 1800;
|
|
20
|
+
// ==================== 输出事件 ====================
|
|
21
|
+
/**
|
|
22
|
+
* 警告事件
|
|
23
|
+
*/
|
|
24
|
+
this.onWarning = new EventEmitter();
|
|
25
|
+
/**
|
|
26
|
+
* 超时事件
|
|
27
|
+
*/
|
|
28
|
+
this.onTimeout = new EventEmitter();
|
|
29
|
+
/**
|
|
30
|
+
* 延长成功事件
|
|
31
|
+
*/
|
|
32
|
+
this.onExtended = new EventEmitter();
|
|
33
|
+
/**
|
|
34
|
+
* 暂停事件
|
|
35
|
+
*/
|
|
36
|
+
this.onPaused = new EventEmitter();
|
|
37
|
+
/**
|
|
38
|
+
* 恢复事件
|
|
39
|
+
*/
|
|
40
|
+
this.onResumed = new EventEmitter();
|
|
41
|
+
// ==================== 内部状态 ====================
|
|
42
|
+
this.subscription = null;
|
|
43
|
+
this.countdown = '00:00';
|
|
44
|
+
this.isWarning = false;
|
|
45
|
+
this.isUrgent = false;
|
|
46
|
+
this.isPaused = false;
|
|
47
|
+
this.canExtend = true;
|
|
48
|
+
this.remainingExtends = -1;
|
|
49
|
+
}
|
|
50
|
+
AutoLogoutComponent.prototype.ngOnInit = function () {
|
|
51
|
+
var _this = this;
|
|
52
|
+
// 如果提供了自定义配置,启动监控
|
|
53
|
+
if (this.config) {
|
|
54
|
+
this.autoLogout.startMonitoring(this.config);
|
|
55
|
+
}
|
|
56
|
+
// 订阅倒计时
|
|
57
|
+
this.subscription = this.autoLogout.getCountdown().subscribe(function (seconds) {
|
|
58
|
+
var _a;
|
|
59
|
+
_this.countdown = _this.autoLogout.formatCountdown(seconds);
|
|
60
|
+
_this.isWarning = _this.autoLogout.isWarningState(seconds);
|
|
61
|
+
_this.isUrgent = _this.autoLogout.isUrgentState(seconds);
|
|
62
|
+
// 触发警告事件
|
|
63
|
+
var warningTime = ((_a = _this.config) === null || _a === void 0 ? void 0 : _a.warningTime) || 30;
|
|
64
|
+
if (seconds === warningTime) {
|
|
65
|
+
_this.onWarning.emit(seconds);
|
|
66
|
+
}
|
|
67
|
+
// 触发超时事件
|
|
68
|
+
if (seconds <= 0) {
|
|
69
|
+
_this.onTimeout.emit();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// 定期检查状态
|
|
73
|
+
setInterval(function () {
|
|
74
|
+
_this.updateStatus();
|
|
75
|
+
}, 1000);
|
|
76
|
+
this.updateStatus();
|
|
77
|
+
};
|
|
78
|
+
AutoLogoutComponent.prototype.ngOnDestroy = function () {
|
|
79
|
+
if (this.subscription) {
|
|
80
|
+
this.subscription.unsubscribe();
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
// ==================== 公开方法 ====================
|
|
84
|
+
/**
|
|
85
|
+
* 延长会话
|
|
86
|
+
*/
|
|
87
|
+
AutoLogoutComponent.prototype.extendSession = function () {
|
|
88
|
+
this.handleExtend();
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* 暂停
|
|
92
|
+
*/
|
|
93
|
+
AutoLogoutComponent.prototype.pause = function () {
|
|
94
|
+
this.handleTogglePause();
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* 恢复
|
|
98
|
+
*/
|
|
99
|
+
AutoLogoutComponent.prototype.resume = function () {
|
|
100
|
+
this.handleTogglePause();
|
|
101
|
+
};
|
|
102
|
+
Object.defineProperty(AutoLogoutComponent.prototype, "templateContext", {
|
|
103
|
+
/**
|
|
104
|
+
* 获取模板上下文(用于自定义模板)
|
|
105
|
+
*/
|
|
106
|
+
get: function () {
|
|
107
|
+
var _this = this;
|
|
108
|
+
return {
|
|
109
|
+
countdown: this.countdown,
|
|
110
|
+
isWarning: this.isWarning,
|
|
111
|
+
isUrgent: this.isUrgent,
|
|
112
|
+
isPaused: this.isPaused,
|
|
113
|
+
canExtend: this.canExtend,
|
|
114
|
+
remainingExtends: this.remainingExtends,
|
|
115
|
+
extendSession: function () { return _this.handleExtend(); },
|
|
116
|
+
togglePause: function () { return _this.handleTogglePause(); },
|
|
117
|
+
formatCountdown: function (seconds) { return _this.autoLogout.formatCountdown(seconds); }
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
enumerable: true,
|
|
121
|
+
configurable: true
|
|
122
|
+
});
|
|
123
|
+
// ==================== 内部方法 ====================
|
|
124
|
+
AutoLogoutComponent.prototype.updateStatus = function () {
|
|
125
|
+
this.isPaused = this.autoLogout.isAutoLogoutPaused();
|
|
126
|
+
this.canExtend = this.autoLogout.canExtendSession();
|
|
127
|
+
this.remainingExtends = this.autoLogout.getRemainingExtendTimes();
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* 处理延长会话(模板调用)
|
|
131
|
+
*/
|
|
132
|
+
AutoLogoutComponent.prototype.handleExtend = function () {
|
|
133
|
+
var success = this.autoLogout.extendSession(this.extendSeconds);
|
|
134
|
+
if (success) {
|
|
135
|
+
this.onExtended.emit(this.extendSeconds);
|
|
136
|
+
}
|
|
137
|
+
this.updateStatus();
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* 处理暂停/恢复切换(模板调用)
|
|
141
|
+
*/
|
|
142
|
+
AutoLogoutComponent.prototype.handleTogglePause = function () {
|
|
143
|
+
if (this.isPaused) {
|
|
144
|
+
this.autoLogout.resume();
|
|
145
|
+
this.onResumed.emit();
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.autoLogout.pause();
|
|
149
|
+
this.onPaused.emit();
|
|
150
|
+
}
|
|
151
|
+
this.updateStatus();
|
|
152
|
+
};
|
|
153
|
+
AutoLogoutComponent.ctorParameters = function () { return [
|
|
154
|
+
{ type: AutoLogoutService }
|
|
155
|
+
]; };
|
|
156
|
+
__decorate([
|
|
157
|
+
Input()
|
|
158
|
+
], AutoLogoutComponent.prototype, "showExtendButton", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
Input()
|
|
161
|
+
], AutoLogoutComponent.prototype, "showPauseButton", void 0);
|
|
162
|
+
__decorate([
|
|
163
|
+
Input()
|
|
164
|
+
], AutoLogoutComponent.prototype, "extendSeconds", void 0);
|
|
165
|
+
__decorate([
|
|
166
|
+
Input()
|
|
167
|
+
], AutoLogoutComponent.prototype, "config", void 0);
|
|
168
|
+
__decorate([
|
|
169
|
+
Input()
|
|
170
|
+
], AutoLogoutComponent.prototype, "customTemplate", void 0);
|
|
171
|
+
__decorate([
|
|
172
|
+
Output()
|
|
173
|
+
], AutoLogoutComponent.prototype, "onWarning", void 0);
|
|
174
|
+
__decorate([
|
|
175
|
+
Output()
|
|
176
|
+
], AutoLogoutComponent.prototype, "onTimeout", void 0);
|
|
177
|
+
__decorate([
|
|
178
|
+
Output()
|
|
179
|
+
], AutoLogoutComponent.prototype, "onExtended", void 0);
|
|
180
|
+
__decorate([
|
|
181
|
+
Output()
|
|
182
|
+
], AutoLogoutComponent.prototype, "onPaused", void 0);
|
|
183
|
+
__decorate([
|
|
184
|
+
Output()
|
|
185
|
+
], AutoLogoutComponent.prototype, "onResumed", void 0);
|
|
186
|
+
AutoLogoutComponent = __decorate([
|
|
187
|
+
Component({
|
|
188
|
+
selector: 'ngx-auto-logout',
|
|
189
|
+
template: "\n <!-- \u9ED8\u8BA4UI\u6A21\u5F0F\uFF08\u50BB\u74DC\u6A21\u5F0F\uFF09 -->\n <div *ngIf=\"!customTemplate\" class=\"ngx-auto-logout-container\">\n <!-- \u5012\u8BA1\u65F6\u663E\u793A -->\n <div class=\"countdown-display\" [class.warning]=\"isWarning\" [class.urgent]=\"isUrgent\" [class.paused]=\"isPaused\">\n <span class=\"icon\">{{ isPaused ? '\u23F8\uFE0F' : '\u23F1\uFE0F' }}</span>\n <span class=\"time\">{{ countdown }}</span>\n <span *ngIf=\"isPaused\" class=\"pause-label\">(\u5DF2\u6682\u505C)</span>\n </div>\n\n <!-- \u63A7\u5236\u6309\u94AE -->\n <div class=\"controls\">\n <!-- \u5EF6\u957F\u4F1A\u8BDD\u6309\u94AE -->\n <button *ngIf=\"showExtendButton && canExtend\" class=\"btn btn-extend\" (click)=\"handleExtend()\" [disabled]=\"!canExtend\" title=\"\u5EF6\u957F30\u5206\u949F\">\n \u2795 \u5EF6\u957F\n <span *ngIf=\"remainingExtends !== -1\" class=\"extend-count\"> ({{ remainingExtends }}) </span>\n </button>\n\n <!-- \u6682\u505C/\u6062\u590D\u6309\u94AE -->\n <button\n *ngIf=\"showPauseButton\"\n class=\"btn btn-pause\"\n [class.paused]=\"isPaused\"\n (click)=\"handleTogglePause()\"\n [title]=\"isPaused ? '\u6062\u590D\u81EA\u52A8\u767B\u51FA' : '\u6682\u505C\u81EA\u52A8\u767B\u51FA'\"\n >\n {{ isPaused ? '\u25B6\uFE0F \u6062\u590D' : '\u23F8\uFE0F \u6682\u505C' }}\n </button>\n </div>\n </div>\n\n <!-- \u81EA\u5B9A\u4E49\u6A21\u677F\u6A21\u5F0F\uFF08\u4E13\u5BB6\u6A21\u5F0F\uFF09 -->\n <ng-container *ngIf=\"customTemplate\">\n <ng-container [ngTemplateOutlet]=\"customTemplate\" [ngTemplateOutletContext]=\"templateContext\"></ng-container>\n </ng-container>\n ",
|
|
190
|
+
styles: ["\n .ngx-auto-logout-container {\n display: inline-flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n background: #f8f9fa;\n border-radius: 6px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n .countdown-display {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: white;\n border-radius: 4px;\n font-weight: bold;\n font-size: 16px;\n transition: all 0.3s ease;\n }\n\n .countdown-display.warning {\n background: #fff3cd;\n color: #856404;\n animation: blink-warning 1s ease-in-out infinite;\n }\n\n .countdown-display.urgent {\n background: #f8d7da;\n color: #721c24;\n animation: blink-urgent 0.5s ease-in-out infinite;\n }\n\n .countdown-display.paused {\n opacity: 0.6;\n background: #e9ecef;\n }\n\n .icon {\n font-size: 18px;\n }\n\n .time {\n min-width: 50px;\n text-align: center;\n }\n\n .pause-label {\n font-size: 12px;\n color: #6c757d;\n font-weight: normal;\n }\n\n .controls {\n display: flex;\n gap: 8px;\n }\n\n .btn {\n padding: 6px 12px;\n font-size: 13px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n font-weight: 500;\n }\n\n .btn-extend {\n background: #28a745;\n color: white;\n }\n\n .btn-extend:hover:not(:disabled) {\n background: #218838;\n transform: translateY(-1px);\n }\n\n .btn-extend:disabled {\n background: #ccc;\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .btn-pause {\n background: #007bff;\n color: white;\n }\n\n .btn-pause:hover {\n background: #0056b3;\n transform: translateY(-1px);\n }\n\n .btn-pause.paused {\n background: #ffc107;\n color: #212529;\n }\n\n .extend-count {\n font-size: 11px;\n opacity: 0.9;\n }\n\n @keyframes blink-warning {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.7;\n }\n }\n\n @keyframes blink-urgent {\n 0%,\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.6;\n transform: scale(1.05);\n }\n }\n "]
|
|
191
|
+
})
|
|
192
|
+
], AutoLogoutComponent);
|
|
193
|
+
return AutoLogoutComponent;
|
|
194
|
+
}());
|
|
195
|
+
export { AutoLogoutComponent };
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBa0MsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE2SzFEO0lBaUVFLDZCQUFvQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQWhFakQsaURBQWlEO1FBRWpEOztXQUVHO1FBQ00scUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRWpDOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQVk5QixpREFBaUQ7UUFFakQ7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRDs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DOztXQUVHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbEQ7O1dBRUc7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5Qzs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DLGlEQUFpRDtRQUV6QyxpQkFBWSxHQUF3QixJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUNwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFD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REFBc0M7SUFyRHBDLG1CQUFtQjtRQXpLL0IsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixRQUFRLEVBQUUsbXdEQW1DVDtxQkFFQyxxa0ZBK0hDO1NBRUosQ0FBQztPQUNXLG1CQUFtQixDQWlML0I7SUFBRCwwQkFBQztDQUFBLEFBakxELElBaUxDO1NBakxZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dG9Mb2dvdXRTZXJ2aWNlIH0gZnJvbSAnLi9hdXRvLWxvZ291dC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dG9Mb2dvdXRDb25maWcgfSBmcm9tICcuL21vZGVscy9hdXRvLWxvZ291dC1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtYXV0by1sb2dvdXQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0g6buY6K6kVUnmqKHlvI/vvIjlgrvnk5zmqKHlvI/vvIkgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFjdXN0b21UZW1wbGF0ZVwiIGNsYXNzPVwibmd4LWF1dG8tbG9nb3V0LWNvbnRhaW5lclwiPlxuICAgICAgPCEtLSDlgJLorqHml7bmmL7npLogLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY291bnRkb3duLWRpc3BsYXlcIiBbY2xhc3Mud2FybmluZ109XCJpc1dhcm5pbmdcIiBbY2xhc3MudXJnZW50XT1cImlzVXJnZW50XCIgW2NsYXNzLnBhdXNlZF09XCJpc1BhdXNlZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj57eyBpc1BhdXNlZCA/ICfij7jvuI8nIDogJ+KPse+4jycgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGltZVwiPnt7IGNvdW50ZG93biB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1BhdXNlZFwiIGNsYXNzPVwicGF1c2UtbGFiZWxcIj4o5bey5pqC5YGcKTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIOaOp+WItuaMiemSriAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxuICAgICAgICA8IS0tIOW7tumVv+S8muivneaMiemSriAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dFeHRlbmRCdXR0b24gJiYgY2FuRXh0ZW5kXCIgY2xhc3M9XCJidG4gYnRuLWV4dGVuZFwiIChjbGljayk9XCJoYW5kbGVFeHRlbmQoKVwiIFtkaXNhYmxlZF09XCIhY2FuRXh0ZW5kXCIgdGl0bGU9XCLlu7bplb8zMOWIhumSn1wiPlxuICAgICAgICAgIOKelSDlu7bplb9cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlbWFpbmluZ0V4dGVuZHMgIT09IC0xXCIgY2xhc3M9XCJleHRlbmQtY291bnRcIj4gKHt7IHJlbWFpbmluZ0V4dGVuZHMgfX0pIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSDmmoLlgZwv5oGi5aSN5oyJ6ZKuIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93UGF1c2VCdXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wYXVzZVwiXG4gICAgICAgICAgW2NsYXNzLnBhdXNlZF09XCJpc1BhdXNlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVRvZ2dsZVBhdXNlKClcIlxuICAgICAgICAgIFt0aXRsZV09XCJpc1BhdXNlZCA/ICfmgaLlpI3oh6rliqjnmbvlh7onIDogJ+aaguWBnOiHquWKqOeZu+WHuidcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaXNQYXVzZWQgPyAn4pa277iPIOaBouWkjScgOiAn4o+477iPIOaaguWBnCcgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0g6Ieq5a6a5LmJ5qih5p2/5qih5byP77yI5LiT5a625qih5byP77yJIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21UZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21UZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0ZW1wbGF0ZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLm5neC1hdXRvLWxvZ291dC1jb250YWluZXIge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7XG4gICAgICB9XG5cbiAgICAgIC5jb3VudGRvd24tZGlzcGxheSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmNvdW50ZG93bi1kaXNwbGF5Lndhcm5pbmcge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmM2NkO1xuICAgICAgICBjb2xvcjogIzg1NjQwNDtcbiAgICAgICAgYW5pbWF0aW9uOiBibGluay13YXJuaW5nIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICAuY291bnRkb3duLWRpc3BsYXkudXJnZW50IHtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZDdkYTtcbiAgICAgICAgY29sb3I6ICM3MjFjMjQ7XG4gICAgICAgIGFuaW1hdGlvbjogYmxpbmstdXJnZW50IDAuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jb3VudGRvd24tZGlzcGxheS5wYXVzZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlOWVjZWY7XG4gICAgICB9XG5cbiAgICAgIC5pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgfVxuXG4gICAgICAudGltZSB7XG4gICAgICAgIG1pbi13aWR0aDogNTBweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAucGF1c2UtbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGNvbG9yOiAjNmM3NTdkO1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuXG4gICAgICAuY29udHJvbHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cblxuICAgICAgLmJ0biB7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuXG4gICAgICAuYnRuLWV4dGVuZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMyOGE3NDU7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIH1cblxuICAgICAgLmJ0bi1leHRlbmQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMjE4ODM4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgICB9XG5cbiAgICAgIC5idG4tZXh0ZW5kOmRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2NjYztcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuXG4gICAgICAuYnRuLXBhdXNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzAwN2JmZjtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgfVxuXG4gICAgICAuYnRuLXBhdXNlOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzAwNTZiMztcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICAgICAgfVxuXG4gICAgICAuYnRuLXBhdXNlLnBhdXNlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmMxMDc7XG4gICAgICAgIGNvbG9yOiAjMjEyNTI5O1xuICAgICAgfVxuXG4gICAgICAuZXh0ZW5kLWNvdW50IHtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgYmxpbmstd2FybmluZyB7XG4gICAgICAgIDAlLFxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgYmxpbmstdXJnZW50IHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9Mb2dvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09IOi+k+WFpeWxnuaApyA9PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDmmK/lkKbmmL7npLrlu7bplb/mjInpkq5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dFeHRlbmRCdXR0b24gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiDmmK/lkKbmmL7npLrmmoLlgZzmjInpkq5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQYXVzZUJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIOW7tumVv+eahOenkuaVsO+8iOm7mOiupDMw5YiG6ZKf77yJXG4gICAqL1xuICBASW5wdXQoKSBleHRlbmRTZWNvbmRzID0gMTgwMDtcblxuICAvKipcbiAgICog6Ieq5a6a5LmJ6YWN572u77yI5Lya6KaG55uW5qih5Z2X6YWN572u77yJXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBQYXJ0aWFsPEF1dG9Mb2dvdXRDb25maWc+O1xuXG4gIC8qKlxuICAgKiDoh6rlrprkuYnmqKHmnb/vvIjkuJPlrrbmqKHlvI/vvIlcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDovpPlh7rkuovku7YgPT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog6K2m5ZGK5LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25XYXJuaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIOi2heaXtuS6i+S7tlxuICAgKi9cbiAgQE91dHB1dCgpIG9uVGltZW91dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICog5bu26ZW/5oiQ5Yqf5LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25FeHRlbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiDmmoLlgZzkuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvblBhdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICog5oGi5aSN5LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25SZXN1bWVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOWGhemDqOeKtuaAgSA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgY291bnRkb3duID0gJzAwOjAwJztcbiAgaXNXYXJuaW5nID0gZmFsc2U7XG4gIGlzVXJnZW50ID0gZmFsc2U7XG4gIGlzUGF1c2VkID0gZmFsc2U7XG4gIGNhbkV4dGVuZCA9IHRydWU7XG4gIHJlbWFpbmluZ0V4dGVuZHMgPSAtMTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dG9Mb2dvdXQ6IEF1dG9Mb2dvdXRTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIOWmguaenOaPkOS+m+S6huiHquWumuS5iemFjee9ru+8jOWQr+WKqOebkeaOp1xuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5hdXRvTG9nb3V0LnN0YXJ0TW9uaXRvcmluZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8g6K6i6ZiF5YCS6K6h5pe2XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmF1dG9Mb2dvdXQuZ2V0Q291bnRkb3duKCkuc3Vic2NyaWJlKChzZWNvbmRzKSA9PiB7XG4gICAgICB0aGlzLmNvdW50ZG93biA9IHRoaXMuYXV0b0xvZ291dC5mb3JtYXRDb3VudGRvd24oc2Vjb25kcyk7XG4gICAgICB0aGlzLmlzV2FybmluZyA9IHRoaXMuYXV0b0xvZ291dC5pc1dhcm5pbmdTdGF0ZShzZWNvbmRzKTtcbiAgICAgIHRoaXMuaXNVcmdlbnQgPSB0aGlzLmF1dG9Mb2dvdXQuaXNVcmdlbnRTdGF0ZShzZWNvbmRzKTtcblxuICAgICAgLy8g6Kem5Y+R6K2m5ZGK5LqL5Lu2XG4gICAgICBjb25zdCB3YXJuaW5nVGltZSA9IHRoaXMuY29uZmlnPy53YXJuaW5nVGltZSB8fCAzMDtcbiAgICAgIGlmIChzZWNvbmRzID09PSB3YXJuaW5nVGltZSkge1xuICAgICAgICB0aGlzLm9uV2FybmluZy5lbWl0KHNlY29uZHMpO1xuICAgICAgfVxuXG4gICAgICAvLyDop6blj5HotoXml7bkuovku7ZcbiAgICAgIGlmIChzZWNvbmRzIDw9IDApIHtcbiAgICAgICAgdGhpcy5vblRpbWVvdXQuZW1pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g5a6a5pyf5qOA5p+l54q25oCBXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0dXMoKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YWs5byA5pa55rOVID09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOW7tumVv+S8muivnVxuICAgKi9cbiAgZXh0ZW5kU2Vzc2lvbigpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUV4dGVuZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaaguWBnFxuICAgKi9cbiAgcGF1c2UoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVUb2dnbGVQYXVzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaBouWkjVxuICAgKi9cbiAgcmVzdW1lKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlVG9nZ2xlUGF1c2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bmqKHmnb/kuIrkuIvmlofvvIjnlKjkuo7oh6rlrprkuYnmqKHmnb/vvIlcbiAgICovXG4gIGdldCB0ZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnRkb3duOiB0aGlzLmNvdW50ZG93bixcbiAgICAgIGlzV2FybmluZzogdGhpcy5pc1dhcm5pbmcsXG4gICAgICBpc1VyZ2VudDogdGhpcy5pc1VyZ2VudCxcbiAgICAgIGlzUGF1c2VkOiB0aGlzLmlzUGF1c2VkLFxuICAgICAgY2FuRXh0ZW5kOiB0aGlzLmNhbkV4dGVuZCxcbiAgICAgIHJlbWFpbmluZ0V4dGVuZHM6IHRoaXMucmVtYWluaW5nRXh0ZW5kcyxcbiAgICAgIGV4dGVuZFNlc3Npb246ICgpID0+IHRoaXMuaGFuZGxlRXh0ZW5kKCksXG4gICAgICB0b2dnbGVQYXVzZTogKCkgPT4gdGhpcy5oYW5kbGVUb2dnbGVQYXVzZSgpLFxuICAgICAgZm9ybWF0Q291bnRkb3duOiAoc2Vjb25kczogbnVtYmVyKSA9PiB0aGlzLmF1dG9Mb2dvdXQuZm9ybWF0Q291bnRkb3duKHNlY29uZHMpXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOWGhemDqOaWueazlSA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdHVzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNQYXVzZWQgPSB0aGlzLmF1dG9Mb2dvdXQuaXNBdXRvTG9nb3V0UGF1c2VkKCk7XG4gICAgdGhpcy5jYW5FeHRlbmQgPSB0aGlzLmF1dG9Mb2dvdXQuY2FuRXh0ZW5kU2Vzc2lvbigpO1xuICAgIHRoaXMucmVtYWluaW5nRXh0ZW5kcyA9IHRoaXMuYXV0b0xvZ291dC5nZXRSZW1haW5pbmdFeHRlbmRUaW1lcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWkhOeQhuW7tumVv+S8muivne+8iOaooeadv+iwg+eUqO+8iVxuICAgKi9cbiAgaGFuZGxlRXh0ZW5kKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmF1dG9Mb2dvdXQuZXh0ZW5kU2Vzc2lvbih0aGlzLmV4dGVuZFNlY29uZHMpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICB0aGlzLm9uRXh0ZW5kZWQuZW1pdCh0aGlzLmV4dGVuZFNlY29uZHMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWkhOeQhuaaguWBnC/mgaLlpI3liIfmjaLvvIjmqKHmnb/osIPnlKjvvIlcbiAgICovXG4gIGhhbmRsZVRvZ2dsZVBhdXNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUGF1c2VkKSB7XG4gICAgICB0aGlzLmF1dG9Mb2dvdXQucmVzdW1lKCk7XG4gICAgICB0aGlzLm9uUmVzdW1lZC5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXV0b0xvZ291dC5wYXVzZSgpO1xuICAgICAgdGhpcy5vblBhdXNlZC5lbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { AutoLogoutComponent } from './auto-logout.component';
|
|
5
|
+
/**
|
|
6
|
+
* Auto logout module
|
|
7
|
+
* Note: Service uses providedIn: 'root', module only declares/exports component
|
|
8
|
+
*/
|
|
9
|
+
var AutoLogoutModule = /** @class */ (function () {
|
|
10
|
+
function AutoLogoutModule() {
|
|
11
|
+
}
|
|
12
|
+
AutoLogoutModule_1 = AutoLogoutModule;
|
|
13
|
+
AutoLogoutModule.forRoot = function () {
|
|
14
|
+
return {
|
|
15
|
+
ngModule: AutoLogoutModule_1,
|
|
16
|
+
providers: []
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
var AutoLogoutModule_1;
|
|
20
|
+
AutoLogoutModule = AutoLogoutModule_1 = __decorate([
|
|
21
|
+
NgModule({
|
|
22
|
+
declarations: [AutoLogoutComponent],
|
|
23
|
+
imports: [CommonModule],
|
|
24
|
+
exports: [AutoLogoutComponent]
|
|
25
|
+
})
|
|
26
|
+
], AutoLogoutModule);
|
|
27
|
+
return AutoLogoutModule;
|
|
28
|
+
}());
|
|
29
|
+
export { AutoLogoutModule };
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlEOzs7R0FHRztBQU1IO0lBQUE7SUFPQSxDQUFDO3lCQVBZLGdCQUFnQjtJQUNwQix3QkFBTyxHQUFkO1FBQ0UsT0FBTztZQUNMLFFBQVEsRUFBRSxrQkFBZ0I7WUFDMUIsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO0lBQ0osQ0FBQzs7SUFOVSxnQkFBZ0I7UUFMNUIsUUFBUSxDQUFDO1lBQ1IsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO1NBQy9CLENBQUM7T0FDVyxnQkFBZ0IsQ0FPNUI7SUFBRCx1QkFBQztDQUFBLEFBUEQsSUFPQztTQVBZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0b0xvZ291dENvbXBvbmVudCB9IGZyb20gJy4vYXV0by1sb2dvdXQuY29tcG9uZW50JztcblxuLyoqXG4gKiBBdXRvIGxvZ291dCBtb2R1bGVcbiAqIE5vdGU6IFNlcnZpY2UgdXNlcyBwcm92aWRlZEluOiAncm9vdCcsIG1vZHVsZSBvbmx5IGRlY2xhcmVzL2V4cG9ydHMgY29tcG9uZW50XG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0F1dG9Mb2dvdXRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZXhwb3J0czogW0F1dG9Mb2dvdXRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9Mb2dvdXRNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEF1dG9Mb2dvdXRNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEF1dG9Mb2dvdXRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtdXG4gICAgfTtcbiAgfVxufVxuIl19
|