@pavankalyan.c/quiz
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.1.2.
273 lines (269 loc) • 20.3 kB
JavaScript
import { Component, Input, Output, EventEmitter } from '@angular/core';
export class QuizComponent {
constructor() {
this.answerData = new EventEmitter();
this.currentQuestionIndex = 0;
this.answers = {};
this.answeredAll = false;
}
ngOnInit() {
this.currentQuestion = this.questionData[0];
}
selectQuestion(id) {
this.currentQuestionIndex = id;
this.currentQuestion = this.questionData[id];
}
goToNextQuestion() {
if (this.currentQuestionIndex === this.questionData.length - 1) {
return;
}
this.currentQuestionIndex++;
this.currentQuestion = this.questionData[this.currentQuestionIndex];
}
saveAnswer(qid, aid) {
this.answers[qid] = aid;
this.goToNextQuestion();
if (Object.keys(this.answers).length === this.questionData.length) {
this.answeredAll = true;
}
}
submitAnswers() {
this.answerData.emit(this.answers);
}
}
QuizComponent.decorators = [
{ type: Component, args: [{
selector: 'lib-quiz',
template: `
<div class="root-div">
<div class="quiz">
<div class="divLast d-flex justify-content-between">
<div *ngFor="let question of questionData; let i = index">
<div *ngIf="i == 0">
<div class="left-end col-12" (click)="selectQuestion(i)">
<div class="col-3 le"></div>
<div
class="dot col-6"
[class.attempted]="answers[question.questionId] != null"
[class]="
currentQuestion.questionId == question.questionId
? 'selected'
: ''
"
>
{{ i + 1 }}
</div>
<div class="col-3"></div>
</div>
</div>
<div *ngIf="i == questionData.length - 1">
<div class="right-end col-12" (click)="selectQuestion(i)">
<div class="col-3"></div>
<div
class="dot col-6"
[class.attempted]="answers[question.questionId] != null"
[class]="
currentQuestion.questionId == question.questionId
? 'selected'
: ''
"
>
{{ i + 1 }}
</div>
<div class="col-3 re"></div>
</div>
</div>
<div *ngIf="i != 0 && i != questionData.length - 1">
<div class="dot-outer" (click)="selectQuestion(i)">
<div
class="dot"
[class.attempted]="answers[question.questionId] != null"
[class]="
currentQuestion.questionId == question.questionId
? 'selected'
: ''
"
>
{{ i + 1 }}
</div>
</div>
</div>
</div>
</div>
<div class="question">
<div class="mt-4">
{{ currentQuestionIndex + 1 }}. {{ currentQuestion.questionText }}
</div>
<div class="options mt-4">
<div
class="mx-2 my-2 option p-3 mb-5"
*ngFor="let option of currentQuestion.options"
(click)="saveAnswer(currentQuestion.questionId, option.optionId)"
[class]="
answers[currentQuestion.questionId] === option.optionId
? 'selectedOption'
: ''
"
>
<span>{{ option.optionText }}</span>
</div>
</div>
</div>
</div>
<div class="submit d-flex justify-content-center">
<button
[disabled]="!answeredAll"
(click)="submitAnswers()"
class="btnSubmit btn btn-lg shadow-none"
>
Submit
</button>
</div>
</div>
`,
styles: [`
.divLast {
height: 60px;
border-bottom: 3px solid #cecece;
margin-left: 10%;
margin-right: 10%;
}
.dot:hover {
height: 25px;
width: 25px;
position: relative;
top: 45px;
background-color: rgb(41, 212, 41);
font-size: 18px;
text-align: center;
font-weight: 700;
}
.attempted {
background-color: rgb(41, 212, 41) !important;
}
.dot-outer {
width: 30px;
display: flex;
justify-content: center;
font-size: 18px;
text-align: center;
font-weight: 700;
}
.dot {
position: relative;
cursor: pointer;
top: 51px;
height: 14px;
width: 14px;
background-color: #bbb;
border-radius: 50%;
display: inline-block;
color: white;
font-size: 0px;
}
.left-end {
width: 30px;
display: flex;
justify-content: center;
}
.right-end {
width: 30px;
display: flex;
justify-content: center;
}
.selected {
height: 25px;
width: 25px;
position: relative;
top: 45px;
background-color: rgb(41, 212, 41);
font-size: 18px;
text-align: center;
font-weight: 700;
}
.question {
flex-direction: column;
display: flex;
margin-left: 10%;
margin-right: 10%;
}
.options {
display: flex;
flex-flow: wrap;
flex-direction: row;
}
.option {
background-color: rgb(255, 255, 255);
z-index: 0;
width: 40%;
border-radius: 10px;
box-shadow: 0 14px 21px rgba(0, 0, 0, 0.25),
0 0px 1px rgba(0, 0, 0, 0.22);
cursor: pointer;
}
.option:hover {
transform: scale(1.05);
transition: all 0.2s ease-out;
//animation: 1s ease-out 0s 1 normal none running fadeIn;
box-shadow: 0 2.8px 2.2px rgba(0, 0, 0, 0.034),
0 6.7px 5.3px rgba(0, 0, 0, 0.048), 0 12.5px 10px rgba(0, 0, 0, 0.06),
0 22.3px 17.9px rgba(0, 0, 0, 0.072),
0 41.8px 33.4px rgba(0, 0, 0, 0.086), 0 25px 20px rgba(0, 0, 0, 0.12);
background-color: rgb(41, 212, 41);
color: white;
}
.quiz {
background-color: rgb(250, 250, 250);
height: 90%;
overflow: auto;
}
@media only screen and (max-width: 500px) {
.options {
flex-direction: column;
}
.option {
width: 100%;
}
.divLast {
display: none !important;
}
}
.submit {
width: 100%;
height: 10%;
}
.btnSubmit {
height: 50px;
margin: auto;
background-color: rgb(41, 212, 41);
color: white;
}
.btn:focus,
.btn:active {
outline: none !important;
box-shadow: none !important;
}
.selectedOption {
background-color: rgb(41, 212, 41);
color: white;
transform: scale(1.025);
}
.root-div {
height: 100vh;
font-family: 'Trebuchet MS', sans-serif;
}
.re,
.le {
background-color: #fafafa;
position: relative;
top: 51px;
}
`]
},] }
];
QuizComponent.ctorParameters = () => [];
QuizComponent.propDecorators = {
questionData: [{ type: Input }],
answerData: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpei5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9xdWl6L3NyYy9saWIvcXVpei5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTRPL0UsTUFBTSxPQUFPLGFBQWE7SUFheEI7UUFWVSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU0sQ0FBQztRQUU5Qyx5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDekIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBTWQsQ0FBQztJQUVoQixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUc7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs7WUF0UkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxVQUFVO2dCQUNwQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVGVDt5QkFFQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E0SUM7YUFFSjs7OzsyQkFFRSxLQUFLO3lCQUVMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4vcXVlc3Rpb24ubW9kZWwnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1aXonLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJyb290LWRpdlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInF1aXpcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRpdkxhc3QgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcXVlc3Rpb25EYXRhOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA9PSAwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWVuZCBjb2wtMTJcIiAoY2xpY2spPVwic2VsZWN0UXVlc3Rpb24oaSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgbGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRvdCBjb2wtNlwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYXR0ZW1wdGVkXT1cImFuc3dlcnNbcXVlc3Rpb24ucXVlc3Rpb25JZF0gIT0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbi5xdWVzdGlvbklkID09IHF1ZXN0aW9uLnF1ZXN0aW9uSWRcbiAgICAgICAgICAgICAgICAgICAgICA/ICdzZWxlY3RlZCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA9PSBxdWVzdGlvbkRhdGEubGVuZ3RoIC0gMVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtZW5kIGNvbC0xMlwiIChjbGljayk9XCJzZWxlY3RRdWVzdGlvbihpKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG90IGNvbC02XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hdHRlbXB0ZWRdPVwiYW5zd2Vyc1txdWVzdGlvbi5xdWVzdGlvbklkXSAhPSBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uLnF1ZXN0aW9uSWQgPT0gcXVlc3Rpb24ucXVlc3Rpb25JZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ3NlbGVjdGVkJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgcmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpICE9IDAgJiYgaSAhPSBxdWVzdGlvbkRhdGEubGVuZ3RoIC0gMVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90LW91dGVyXCIgKGNsaWNrKT1cInNlbGVjdFF1ZXN0aW9uKGkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3RcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmF0dGVtcHRlZF09XCJhbnN3ZXJzW3F1ZXN0aW9uLnF1ZXN0aW9uSWRdICE9IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25JZCA9PSBxdWVzdGlvbi5xdWVzdGlvbklkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnc2VsZWN0ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAge3sgY3VycmVudFF1ZXN0aW9uSW5kZXggKyAxIH19LiB7eyBjdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25UZXh0IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMgbXQtNFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm14LTIgbXktMiBvcHRpb24gcC0zIG1iLTVcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGN1cnJlbnRRdWVzdGlvbi5vcHRpb25zXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbnN3ZXIoY3VycmVudFF1ZXN0aW9uLnF1ZXN0aW9uSWQsIG9wdGlvbi5vcHRpb25JZClcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgYW5zd2Vyc1tjdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25JZF0gPT09IG9wdGlvbi5vcHRpb25JZFxuICAgICAgICAgICAgICAgICAgPyAnc2VsZWN0ZWRPcHRpb24nXG4gICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi5vcHRpb25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3VibWl0IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFuc3dlcmVkQWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwic3VibWl0QW5zd2VycygpXCJcbiAgICAgICAgICBjbGFzcz1cImJ0blN1Ym1pdCBidG4gYnRuLWxnIHNoYWRvdy1ub25lXCJcbiAgICAgICAgPlxuICAgICAgICAgIFN1Ym1pdFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZGl2TGFzdCB7XG4gICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNjZWNlY2U7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxMCU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTAlO1xuICAgICAgfVxuICAgICAgLmRvdDpob3ZlciB7XG4gICAgICAgIGhlaWdodDogMjVweDtcbiAgICAgICAgd2lkdGg6IDI1cHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiA0NXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDEsIDIxMiwgNDEpO1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5hdHRlbXB0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDEsIDIxMiwgNDEpICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAuZG90LW91dGVyIHtcbiAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5kb3Qge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdG9wOiA1MXB4O1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJiO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBmb250LXNpemU6IDBweDtcbiAgICAgIH1cbiAgICAgIC5sZWZ0LWVuZCB7XG4gICAgICAgIHdpZHRoOiAzMHB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5yaWdodC1lbmQge1xuICAgICAgICB3aWR0aDogMzBweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAuc2VsZWN0ZWQge1xuICAgICAgICBoZWlnaHQ6IDI1cHg7XG4gICAgICAgIHdpZHRoOiAyNXB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogNDVweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDQxLCAyMTIsIDQxKTtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG4gICAgICAucXVlc3Rpb24ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBtYXJnaW4tbGVmdDogMTAlO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwJTtcbiAgICAgIH1cbiAgICAgIC5vcHRpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiB3cmFwO1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuXG4gICAgICAub3B0aW9uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpO1xuICAgICAgICB6LWluZGV4OiAwO1xuICAgICAgICB3aWR0aDogNDAlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDE0cHggMjFweCByZ2JhKDAsIDAsIDAsIDAuMjUpLFxuICAgICAgICAgIDAgMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMjIpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAub3B0aW9uOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcblxuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLW91dDtcbiAgICAgICAgLy9hbmltYXRpb246IDFzIGVhc2Utb3V0IDBzIDEgbm9ybWFsIG5vbmUgcnVubmluZyBmYWRlSW47XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMi44cHggMi4ycHggcmdiYSgwLCAwLCAwLCAwLjAzNCksXG4gICAgICAgICAgMCA2LjdweCA1LjNweCByZ2JhKDAsIDAsIDAsIDAuMDQ4KSwgMCAxMi41cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMDYpLFxuICAgICAgICAgIDAgMjIuM3B4IDE3LjlweCByZ2JhKDAsIDAsIDAsIDAuMDcyKSxcbiAgICAgICAgICAwIDQxLjhweCAzMy40cHggcmdiYSgwLCAwLCAwLCAwLjA4NiksIDAgMjVweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig0MSwgMjEyLCA0MSk7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIH1cbiAgICAgIC5xdWl6IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApO1xuICAgICAgICBoZWlnaHQ6IDkwJTtcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICB9XG4gICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAgIC5vcHRpb25zIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIC5vcHRpb24ge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgIC5kaXZMYXN0IHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5zdWJtaXQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMCU7XG4gICAgICB9XG4gICAgICAuYnRuU3VibWl0IHtcbiAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig0MSwgMjEyLCA0MSk7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIH1cblxuICAgICAgLmJ0bjpmb2N1cyxcbiAgICAgIC5idG46YWN0aXZlIHtcbiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAuc2VsZWN0ZWRPcHRpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDEsIDIxMiwgNDEpO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMjUpO1xuICAgICAgfVxuICAgICAgLnJvb3QtZGl2IHtcbiAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdUcmVidWNoZXQgTVMnLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuICAgICAgLnJlLFxuICAgICAgLmxlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDUxcHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVpekNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uRGF0YTogUXVlc3Rpb25bXTtcblxuICBAT3V0cHV0KCkgYW5zd2VyRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8e30+KCk7XG5cbiAgY3VycmVudFF1ZXN0aW9uSW5kZXggPSAwO1xuICBhbnN3ZXJzID0ge307XG4gIGFuc3dlcmVkQWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9jdXJyZW50UXVlc3Rpb25JZCA9ICcxJztcblxuICBjdXJyZW50UXVlc3Rpb246IFF1ZXN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25EYXRhWzBdO1xuICB9XG5cbiAgc2VsZWN0UXVlc3Rpb24oaWQpIHtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbkluZGV4ID0gaWQ7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uRGF0YVtpZF07XG4gIH1cblxuICBnb1RvTmV4dFF1ZXN0aW9uKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbkluZGV4ID09PSB0aGlzLnF1ZXN0aW9uRGF0YS5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JbmRleCsrO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkRhdGFbdGhpcy5jdXJyZW50UXVlc3Rpb25JbmRleF07XG4gIH1cblxuICBzYXZlQW5zd2VyKHFpZCwgYWlkKSB7XG4gICAgdGhpcy5hbnN3ZXJzW3FpZF0gPSBhaWQ7XG4gICAgdGhpcy5nb1RvTmV4dFF1ZXN0aW9uKCk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5hbnN3ZXJzKS5sZW5ndGggPT09IHRoaXMucXVlc3Rpb25EYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5hbnN3ZXJlZEFsbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0QW5zd2VycygpIHtcbiAgICB0aGlzLmFuc3dlckRhdGEuZW1pdCh0aGlzLmFuc3dlcnMpO1xuICB9XG59XG4iXX0=