ngx-star-rating-input
Version:
An Angular library for displaying star ratings.
95 lines • 14.6 kB
JavaScript
import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import * as i0 from "@angular/core";
export class StarRatingComponent {
constructor() {
this.count = 5;
this.filledColor = 'gold';
this.emptyColor = 'lightgray';
this.fillOnHover = true;
this.size = 14;
this.disabled = false;
this.ratingChange = new EventEmitter();
this.stars = [];
this.selectedRating = 0;
this.hoveredRating = null;
this.onChange = (value) => { };
this.onTouched = () => { };
this.updateStars();
}
ngOnChanges(changes) {
if (changes['count']) {
this.updateStars();
}
}
updateStars() {
this.stars = Array.from({ length: this.count }, (_, i) => i + 1);
}
isStarFilled(index) {
return !this.disabled && index <= (this.hoveredRating ?? this.selectedRating);
}
onMouseEnter(rating) {
if (!this.disabled && this.fillOnHover) {
this.hoveredRating = rating;
}
}
onMouseLeave() {
if (!this.disabled && this.fillOnHover) {
this.hoveredRating = null;
}
}
onStarClick(rating) {
if (!this.disabled) {
this.selectedRating = rating;
this.ratingChange.emit(this.selectedRating);
this.onChange(this.selectedRating);
this.onTouched();
}
}
// ControlValueAccessor methods
writeValue(value) {
this.selectedRating = value || 0;
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StarRatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: StarRatingComponent, selector: "ngx-star-rating", inputs: { count: "count", filledColor: "filledColor", emptyColor: "emptyColor", fillOnHover: "fillOnHover", size: "size", disabled: "disabled" }, outputs: { ratingChange: "ratingChange" }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => StarRatingComponent),
multi: true
}
], usesOnChanges: true, ngImport: i0, template: "<div class=\"rating-box {{disabled ? 'disabled' : ''}}\">\r\n @for (star of stars;let i = $index; track i) {\r\n <svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" [attr.width]=\"size\"\r\n (click)=\"onStarClick(star)\" [attr.height]=\"size\" (mouseenter)=\"onMouseEnter(star)\" (mouseleave)=\"onMouseLeave()\"\r\n viewBox=\"0 0 64 64\" enable-background=\"new 0 0 64 64\" xml:space=\"preserve\">\r\n <path [attr.fill]=\"isStarFilled(star) ? filledColor : emptyColor\" d=\"M63.893,24.277c-0.238-0.711-0.854-1.229-1.595-1.343l-19.674-3.006L33.809,1.15\r\n\t C33.479,0.448,32.773,0,31.998,0s-1.48,0.448-1.811,1.15l-8.815,18.778L1.698,22.935c-0.741,0.113-1.356,0.632-1.595,1.343\r\n\t c-0.238,0.71-0.059,1.494,0.465,2.031l14.294,14.657L11.484,61.67c-0.124,0.756,0.195,1.517,0.822,1.957\r\n\t c0.344,0.243,0.747,0.366,1.151,0.366c0.332,0,0.666-0.084,0.968-0.25l17.572-9.719l17.572,9.719c0.302,0.166,0.636,0.25,0.968,0.25\r\n\t c0.404,0,0.808-0.123,1.151-0.366c0.627-0.44,0.946-1.201,0.822-1.957l-3.378-20.704l14.294-14.657\r\n\t C63.951,25.771,64.131,24.987,63.893,24.277z\" />\r\n </svg>\r\n }\r\n</div>", styles: [".rating-box{display:inline-flex;gap:4px}.rating-box svg{cursor:pointer}.rating-box.disabled{pointer-events:none;opacity:.5}\n"] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StarRatingComponent, decorators: [{
type: Component,
args: [{ selector: 'ngx-star-rating', providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => StarRatingComponent),
multi: true
}
], template: "<div class=\"rating-box {{disabled ? 'disabled' : ''}}\">\r\n @for (star of stars;let i = $index; track i) {\r\n <svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" [attr.width]=\"size\"\r\n (click)=\"onStarClick(star)\" [attr.height]=\"size\" (mouseenter)=\"onMouseEnter(star)\" (mouseleave)=\"onMouseLeave()\"\r\n viewBox=\"0 0 64 64\" enable-background=\"new 0 0 64 64\" xml:space=\"preserve\">\r\n <path [attr.fill]=\"isStarFilled(star) ? filledColor : emptyColor\" d=\"M63.893,24.277c-0.238-0.711-0.854-1.229-1.595-1.343l-19.674-3.006L33.809,1.15\r\n\t C33.479,0.448,32.773,0,31.998,0s-1.48,0.448-1.811,1.15l-8.815,18.778L1.698,22.935c-0.741,0.113-1.356,0.632-1.595,1.343\r\n\t c-0.238,0.71-0.059,1.494,0.465,2.031l14.294,14.657L11.484,61.67c-0.124,0.756,0.195,1.517,0.822,1.957\r\n\t c0.344,0.243,0.747,0.366,1.151,0.366c0.332,0,0.666-0.084,0.968-0.25l17.572-9.719l17.572,9.719c0.302,0.166,0.636,0.25,0.968,0.25\r\n\t c0.404,0,0.808-0.123,1.151-0.366c0.627-0.44,0.946-1.201,0.822-1.957l-3.378-20.704l14.294-14.657\r\n\t C63.951,25.771,64.131,24.987,63.893,24.277z\" />\r\n </svg>\r\n }\r\n</div>", styles: [".rating-box{display:inline-flex;gap:4px}.rating-box svg{cursor:pointer}.rating-box.disabled{pointer-events:none;opacity:.5}\n"] }]
}], ctorParameters: () => [], propDecorators: { count: [{
type: Input
}], filledColor: [{
type: Input
}], emptyColor: [{
type: Input
}], fillOnHover: [{
type: Input
}], size: [{
type: Input
}], disabled: [{
type: Input
}], ratingChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rhci1yYXRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3Rhci1yYXRpbmcvc3JjL2xpYi9zdGFyLXJhdGluZy9zdGFyLXJhdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdGFyLXJhdGluZy9zcmMvbGliL3N0YXItcmF0aW5nL3N0YXItcmF0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQTRCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBY3pFLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjlCO1FBaEJTLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsZ0JBQVcsR0FBVyxNQUFNLENBQUM7UUFDN0IsZUFBVSxHQUFXLFdBQVcsQ0FBQztRQUNqQyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFekIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXBELFVBQUssR0FBYSxFQUFFLENBQUM7UUFDckIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFHNUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQzsrR0F2RVUsbUJBQW1CO21HQUFuQixtQkFBbUIsdU9BUm5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLCtDQ2JILHNzQ0FhTTs7NEZERU8sbUJBQW1CO2tCQVovQixTQUFTOytCQUNFLGlCQUFpQixhQUdoQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7d0RBR1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXN0YXItcmF0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3Rhci1yYXRpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zdGFyLXJhdGluZy5jb21wb25lbnQuY3NzJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN0YXJSYXRpbmdDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFN0YXJSYXRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBASW5wdXQoKSBjb3VudDogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBmaWxsZWRDb2xvcjogc3RyaW5nID0gJ2dvbGQnO1xyXG4gIEBJbnB1dCgpIGVtcHR5Q29sb3I6IHN0cmluZyA9ICdsaWdodGdyYXknO1xyXG4gIEBJbnB1dCgpIGZpbGxPbkhvdmVyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaXplOiBudW1iZXIgPSAxNDtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgcmF0aW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIHN0YXJzOiBudW1iZXJbXSA9IFtdO1xyXG4gIHNlbGVjdGVkUmF0aW5nID0gMDtcclxuICBob3ZlcmVkUmF0aW5nOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGFycygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2NvdW50J10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGFycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGFycygpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmNvdW50IH0sIChfLCBpKSA9PiBpICsgMSk7XHJcbiAgfVxyXG5cclxuICBpc1N0YXJGaWxsZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmRpc2FibGVkICYmIGluZGV4IDw9ICh0aGlzLmhvdmVyZWRSYXRpbmcgPz8gdGhpcy5zZWxlY3RlZFJhdGluZyk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRW50ZXIocmF0aW5nOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmZpbGxPbkhvdmVyKSB7XHJcbiAgICAgIHRoaXMuaG92ZXJlZFJhdGluZyA9IHJhdGluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmZpbGxPbkhvdmVyKSB7XHJcbiAgICAgIHRoaXMuaG92ZXJlZFJhdGluZyA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN0YXJDbGljayhyYXRpbmc6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYXRpbmcgPSByYXRpbmc7XHJcbiAgICAgIHRoaXMucmF0aW5nQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhdGluZyk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhdGluZyk7XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBtZXRob2RzXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmF0aW5nID0gdmFsdWUgfHwgMDtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyYXRpbmctYm94IHt7ZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJyd9fVwiPlxyXG4gICAgQGZvciAoc3RhciBvZiBzdGFycztsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xyXG4gICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIFthdHRyLndpZHRoXT1cInNpemVcIlxyXG4gICAgICAgIChjbGljayk9XCJvblN0YXJDbGljayhzdGFyKVwiIFthdHRyLmhlaWdodF09XCJzaXplXCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKHN0YXIpXCIgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgNjQgNjRcIiBlbmFibGUtYmFja2dyb3VuZD1cIm5ldyAwIDAgNjQgNjRcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPlxyXG4gICAgICAgIDxwYXRoIFthdHRyLmZpbGxdPVwiaXNTdGFyRmlsbGVkKHN0YXIpID8gZmlsbGVkQ29sb3IgOiBlbXB0eUNvbG9yXCIgZD1cIk02My44OTMsMjQuMjc3Yy0wLjIzOC0wLjcxMS0wLjg1NC0xLjIyOS0xLjU5NS0xLjM0M2wtMTkuNjc0LTMuMDA2TDMzLjgwOSwxLjE1XHJcblx0ICAgICAgICBDMzMuNDc5LDAuNDQ4LDMyLjc3MywwLDMxLjk5OCwwcy0xLjQ4LDAuNDQ4LTEuODExLDEuMTVsLTguODE1LDE4Ljc3OEwxLjY5OCwyMi45MzVjLTAuNzQxLDAuMTEzLTEuMzU2LDAuNjMyLTEuNTk1LDEuMzQzXHJcblx0ICAgICAgICBjLTAuMjM4LDAuNzEtMC4wNTksMS40OTQsMC40NjUsMi4wMzFsMTQuMjk0LDE0LjY1N0wxMS40ODQsNjEuNjdjLTAuMTI0LDAuNzU2LDAuMTk1LDEuNTE3LDAuODIyLDEuOTU3XHJcblx0ICAgICAgICBjMC4zNDQsMC4yNDMsMC43NDcsMC4zNjYsMS4xNTEsMC4zNjZjMC4zMzIsMCwwLjY2Ni0wLjA4NCwwLjk2OC0wLjI1bDE3LjU3Mi05LjcxOWwxNy41NzIsOS43MTljMC4zMDIsMC4xNjYsMC42MzYsMC4yNSwwLjk2OCwwLjI1XHJcblx0ICAgICAgICBjMC40MDQsMCwwLjgwOC0wLjEyMywxLjE1MS0wLjM2NmMwLjYyNy0wLjQ0LDAuOTQ2LTEuMjAxLDAuODIyLTEuOTU3bC0zLjM3OC0yMC43MDRsMTQuMjk0LTE0LjY1N1xyXG5cdCAgICAgICAgQzYzLjk1MSwyNS43NzEsNjQuMTMxLDI0Ljk4Nyw2My44OTMsMjQuMjc3elwiIC8+XHJcbiAgICA8L3N2Zz5cclxuICAgIH1cclxuPC9kaXY+Il19