@ng-bootstrap/ng-bootstrap
Version:
Angular powered Bootstrap
466 lines • 34.5 kB
JavaScript
import { NgbCalendarIslamicCivil } from './ngb-calendar-islamic-civil';
import { NgbDate } from '../ngb-date';
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
/**
* Umalqura calendar is one type of Hijri calendars used in islamic countries.
* This Calendar is used by Saudi Arabia for administrative purpose.
* Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic.
* http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types
*/
const GREGORIAN_FIRST_DATE = new Date(1882, 10, 12);
const GREGORIAN_LAST_DATE = new Date(2174, 10, 25);
const HIJRI_BEGIN = 1300;
const HIJRI_END = 1600;
const ONE_DAY = 1000 * 60 * 60 * 24;
const MONTH_LENGTH = [
// 1300-1304
'101010101010',
'110101010100',
'111011001001',
'011011010100',
'011011101010',
// 1305-1309
'001101101100',
'101010101101',
'010101010101',
'011010101001',
'011110010010',
// 1310-1314
'101110101001',
'010111010100',
'101011011010',
'010101011100',
'110100101101',
// 1315-1319
'011010010101',
'011101001010',
'101101010100',
'101101101010',
'010110101101',
// 1320-1324
'010010101110',
'101001001111',
'010100010111',
'011010001011',
'011010100101',
// 1325-1329
'101011010101',
'001011010110',
'100101011011',
'010010011101',
'101001001101',
// 1330-1334
'110100100110',
'110110010101',
'010110101100',
'100110110110',
'001010111010',
// 1335-1339
'101001011011',
'010100101011',
'101010010101',
'011011001010',
'101011101001',
// 1340-1344
'001011110100',
'100101110110',
'001010110110',
'100101010110',
'101011001010',
// 1345-1349
'101110100100',
'101111010010',
'010111011001',
'001011011100',
'100101101101',
// 1350-1354
'010101001101',
'101010100101',
'101101010010',
'101110100101',
'010110110100',
// 1355-1359
'100110110110',
'010101010111',
'001010010111',
'010101001011',
'011010100011',
// 1360-1364
'011101010010',
'101101100101',
'010101101010',
'101010101011',
'010100101011',
// 1365-1369
'110010010101',
'110101001010',
'110110100101',
'010111001010',
'101011010110',
// 1370-1374
'100101010111',
'010010101011',
'100101001011',
'101010100101',
'101101010010',
// 1375-1379
'101101101010',
'010101110101',
'001001110110',
'100010110111',
'010001011011',
// 1380-1384
'010101010101',
'010110101001',
'010110110100',
'100111011010',
'010011011101',
// 1385-1389
'001001101110',
'100100110110',
'101010101010',
'110101010100',
'110110110010',
// 1390-1394
'010111010101',
'001011011010',
'100101011011',
'010010101011',
'101001010101',
// 1395-1399
'101101001001',
'101101100100',
'101101110001',
'010110110100',
'101010110101',
// 1400-1404
'101001010101',
'110100100101',
'111010010010',
'111011001001',
'011011010100',
// 1405-1409
'101011101001',
'100101101011',
'010010101011',
'101010010011',
'110101001001',
// 1410-1414
'110110100100',
'110110110010',
'101010111001',
'010010111010',
'101001011011',
// 1415-1419
'010100101011',
'101010010101',
'101100101010',
'101101010101',
'010101011100',
// 1420-1424
'010010111101',
'001000111101',
'100100011101',
'101010010101',
'101101001010',
// 1425-1429
'101101011010',
'010101101101',
'001010110110',
'100100111011',
'010010011011',
// 1430-1434
'011001010101',
'011010101001',
'011101010100',
'101101101010',
'010101101100',
// 1435-1439
'101010101101',
'010101010101',
'101100101001',
'101110010010',
'101110101001',
// 1440-1444
'010111010100',
'101011011010',
'010101011010',
'101010101011',
'010110010101',
// 1445-1449
'011101001001',
'011101100100',
'101110101010',
'010110110101',
'001010110110',
// 1450-1454
'101001010110',
'111001001101',
'101100100101',
'101101010010',
'101101101010',
// 1455-1459
'010110101101',
'001010101110',
'100100101111',
'010010010111',
'011001001011',
// 1460-1464
'011010100101',
'011010101100',
'101011010110',
'010101011101',
'010010011101',
// 1465-1469
'101001001101',
'110100010110',
'110110010101',
'010110101010',
'010110110101',
// 1470-1474
'001011011010',
'100101011011',
'010010101101',
'010110010101',
'011011001010',
// 1475-1479
'011011100100',
'101011101010',
'010011110101',
'001010110110',
'100101010110',
// 1480-1484
'101010101010',
'101101010100',
'101111010010',
'010111011001',
'001011101010',
// 1485-1489
'100101101101',
'010010101101',
'101010010101',
'101101001010',
'101110100101',
// 1490-1494
'010110110010',
'100110110101',
'010011010110',
'101010010111',
'010101000111',
// 1495-1499
'011010010011',
'011101001001',
'101101010101',
'010101101010',
'101001101011',
// 1500-1504
'010100101011',
'101010001011',
'110101000110',
'110110100011',
'010111001010',
// 1505-1509
'101011010110',
'010011011011',
'001001101011',
'100101001011',
'101010100101',
// 1510-1514
'101101010010',
'101101101001',
'010101110101',
'000101110110',
'100010110111',
// 1515-1519
'001001011011',
'010100101011',
'010101100101',
'010110110100',
'100111011010',
// 1520-1524
'010011101101',
'000101101101',
'100010110110',
'101010100110',
'110101010010',
// 1525-1529
'110110101001',
'010111010100',
'101011011010',
'100101011011',
'010010101011',
// 1530-1534
'011001010011',
'011100101001',
'011101100010',
'101110101001',
'010110110010',
// 1535-1539
'101010110101',
'010101010101',
'101100100101',
'110110010010',
'111011001001',
// 1540-1544
'011011010010',
'101011101001',
'010101101011',
'010010101011',
'101001010101',
// 1545-1549
'110100101001',
'110101010100',
'110110101010',
'100110110101',
'010010111010',
// 1550-1554
'101000111011',
'010010011011',
'101001001101',
'101010101010',
'101011010101',
// 1555-1559
'001011011010',
'100101011101',
'010001011110',
'101000101110',
'110010011010',
// 1560-1564
'110101010101',
'011010110010',
'011010111001',
'010010111010',
'101001011101',
// 1565-1569
'010100101101',
'101010010101',
'101101010010',
'101110101000',
'101110110100',
// 1570-1574
'010110111001',
'001011011010',
'100101011010',
'101101001010',
'110110100100',
// 1575-1579
'111011010001',
'011011101000',
'101101101010',
'010101101101',
'010100110101',
// 1580-1584
'011010010101',
'110101001010',
'110110101000',
'110111010100',
'011011011010',
// 1585-1589
'010101011011',
'001010011101',
'011000101011',
'101100010101',
'101101001010',
// 1590-1594
'101110010101',
'010110101010',
'101010101110',
'100100101110',
'110010001111',
// 1595-1599
'010100100111',
'011010010101',
'011010101010',
'101011010110',
'010101011101',
// 1600
'001010011101',
];
function getDaysDiff(date1, date2) {
// Ignores the time part in date1 and date2:
const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());
const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());
const diff = Math.abs(time1 - time2);
return Math.round(diff / ONE_DAY);
}
export class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil {
/**
* Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date.
* `gdate` is s JS Date to be converted to Hijri.
*/
fromGregorian(gDate) {
let hDay = 1, hMonth = 0, hYear = 1300;
let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE);
if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) {
let year = 1300;
for (let i = 0; i < MONTH_LENGTH.length; i++, year++) {
for (let j = 0; j < 12; j++) {
let numOfDays = +MONTH_LENGTH[i][j] + 29;
if (daysDiff <= numOfDays) {
hDay = daysDiff + 1;
if (hDay > numOfDays) {
hDay = 1;
j++;
}
if (j > 11) {
j = 0;
year++;
}
hMonth = j;
hYear = year;
return new NgbDate(hYear, hMonth + 1, hDay);
}
daysDiff = daysDiff - numOfDays;
}
}
return null;
}
else {
return super.fromGregorian(gDate);
}
}
/**
* Converts the current Hijri date to Gregorian.
*/
toGregorian(hDate) {
const hYear = hDate.year;
const hMonth = hDate.month - 1;
const hDay = hDate.day;
let gDate = new Date(GREGORIAN_FIRST_DATE);
let dayDiff = hDay - 1;
if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
for (let y = 0; y < hYear - HIJRI_BEGIN; y++) {
for (let m = 0; m < 12; m++) {
dayDiff += +MONTH_LENGTH[y][m] + 29;
}
}
for (let m = 0; m < hMonth; m++) {
dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29;
}
gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff);
}
else {
gDate = super.toGregorian(hDate);
}
return gDate;
}
/**
* Returns the number of days in a specific Hijri hMonth.
* `hMonth` is 1 for Muharram, 2 for Safar, etc.
* `hYear` is any Hijri hYear.
*/
getDaysPerMonth(hMonth, hYear) {
if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) {
const pos = hYear - HIJRI_BEGIN;
return +MONTH_LENGTH[pos][hMonth - 1] + 29;
}
return super.getDaysPerMonth(hMonth, hYear);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: NgbCalendarIslamicUmalqura, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: NgbCalendarIslamicUmalqura }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: NgbCalendarIslamicUmalqura, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWlzbGFtaWMtdW1hbHF1cmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9oaWpyaS9uZ2ItY2FsZW5kYXItaXNsYW1pYy11bWFscXVyYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOzs7OztHQUtHO0FBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVwQyxNQUFNLFlBQVksR0FBRztJQUNwQixZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJ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LEVBQUUsQ0FBQztpQkFDcEM7YUFDRDtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3REO1lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztTQUN4RDthQUFNO1lBQ04sS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQzVDLElBQUksS0FBSyxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1lBQy9DLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDaEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDOzhHQXhFVywwQkFBMEI7a0hBQTFCLDBCQUEwQjs7MkZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nYkNhbGVuZGFySXNsYW1pY0NpdmlsIH0gZnJvbSAnLi9uZ2ItY2FsZW5kYXItaXNsYW1pYy1jaXZpbCc7XG5pbXBvcnQgeyBOZ2JEYXRlIH0gZnJvbSAnLi4vbmdiLWRhdGUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFVtYWxxdXJhIGNhbGVuZGFyIGlzIG9uZSB0eXBlIG9mIEhpanJpIGNhbGVuZGFycyB1c2VkIGluIGlzbGFtaWMgY291bnRyaWVzLlxuICogVGhpcyBDYWxlbmRhciBpcyB1c2VkIGJ5IFNhdWRpIEFyYWJpYSBmb3IgYWRtaW5pc3RyYXRpdmUgcHVycG9zZS5cbiAqIFVubGlrZSB0YWJ1bGFyIGNhbGVuZGFycywgdGhlIGFsZ29yaXRobSBpbnZvbHZlcyBhc3Ryb25vbWljYWwgY2FsY3VsYXRpb24sIGJ1dCBpdCdzIHN0aWxsIGRldGVybWluaXN0aWMuXG4gKiBodHRwOi8vY2xkci51bmljb2RlLm9yZy9kZXZlbG9wbWVudC9kZXZlbG9wbWVudC1wcm9jZXNzL2Rlc2lnbi1wcm9wb3NhbHMvaXNsYW1pYy1jYWxlbmRhci10eXBlc1xuICovXG5cbmNvbnN0IEdSRUdPUklBTl9GSVJTVF9EQVRFID0gbmV3IERhdGUoMTg4MiwgMTAsIDEyKTtcbmNvbnN0IEdSRUdPUklBTl9MQVNUX0RBVEUgPSBuZXcgRGF0ZSgyMTc0LCAxMCwgMjUpO1xuY29uc3QgSElKUklfQkVHSU4gPSAxMzAwO1xuY29uc3QgSElKUklfRU5EID0gMTYwMDtcbmNvbnN0IE9ORV9EQVkgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuXG5jb25zdCBNT05USF9MRU5HVEggPSBbXG5cdC8vIDEzMDAtMTMwNFxuXHQnMTAxMDEwMTAxMDEwJyxcblx0JzExMDEwMTAxMDEwMCcsXG5cdCcxMTEwMTEwMDEwMDEnLFxuXHQnMDExMDExMDEwMTAwJyxcblx0JzAxMTAxMTEwMTAxMCcsXG5cdC8vIDEzMDUtMTMwOVxuXHQnMDAxMTAxMTAxMTAwJyxcblx0JzEwMTAxMDEwMTEwMScsXG5cdCcwMTAxMDEwMTAxMDEnLFxuXHQnMDExMDEwMTAxMDAxJyxcblx0JzAxMTExMDAxMDAxMCcsXG5cdC8vIDEzMTAtMTMxNFxuXHQnMTAxMTEwMTAxMDAxJyxcblx0JzAxMDExMTAxMDEwMCcsXG5cdCcxMDEwMTEwMTEwMTAnLFxuXHQnMDEwMTAxMDExMTAwJyxcblx0JzExMDEwMDEwMTEwMScsXG5cdC8vIDEzMTUtMTMxOVxuXHQnMDExMDEwMDEwMTAxJyxcblx0JzAxMTEwMTAwMTAxMCcsXG5cdCcxMDExMDEwMTAxMDAnLFxuXHQnMTAxMTAxMTAxMDEwJyxcblx0JzAxMDExMDEwMTEwMScsXG5cdC8vIDEzMjAtMTMyNFxuXHQnMDEwMDEwMTAxMTEwJyxcblx0JzEwMTAwMTAwMTExMScsXG5cdCcwMTAxMDAwMTAxMTEnLFxuXHQnMDExMDEwMDAxMDExJyxcblx0JzAxMTAxMDEwMDEwMScsXG5cdC8vIDEzMjUtMTMyOVxuXHQnMTAxMDExMDEwMTAxJyxcblx0JzAwMTAxMTAxMDExMCcsXG5cdCcxMDAxMDEwMTEwMTEnLFxuXHQnMDEwMDEwMDExMTAxJyxcblx0JzEwMTAwMTAwMTEwMScsXG5cdC8vIDEzMzAtMTMzNFxuXHQnMTEwMTAwMTAwMTEwJyxcblx0JzExMDExMDAxMDEwMScsXG5cdCcwMTAxMTAxMDExMDAnLFxuXHQnMTAwMTEwMTEwMTEwJyxcblx0JzAwMTAxMDExMTAxMCcsXG5cdC8vIDEzMzUtMTMzOVxuXHQnMTAxMDAxMDExMDExJyxcblx0JzAxMDEwMDEwMTAxMScsXG5cdCcxMDEwMTAwMTAxMDEnLFxuXHQnMDExMDExMDAxMDEwJyxcblx0JzEwMTAxMTEwMTAwMScsXG5cdC8vIDEzNDAtMTM0NFxuXHQnMDAxMDExMTEwMTAwJyxcblx0JzEwMDEwMTExMDExMCcsXG5cdCcwMDEwMTAxMTAxMTAnLFxuXHQnMTAwMTAxMDEwMTEwJyxcblx0JzEwMTAxMTAwMTAxMCcsXG5cdC8vIDEzNDUtMTM0OVxuXHQnMTAxMTEwMTAwMTAwJyxcblx0JzEwMTExMTAxMDAxMCcsXG5cdCcwMTAxMTEwMTEwMDEnLFxuXHQnMDAxMDExMDExMTAwJyxcblx0JzEwMDEwMTEwMTEwMScsXG5cdC8vIDEzNTAtMTM1NFxuXHQnMDEwMTAxMDAxMTAxJyxcblx0JzEwMTAxMDEwMDEwMScsXG5cdCcxMDExMDEwMTAwMTAnLFxuXHQnMTAxMTEwMTAwMTAxJyxcblx0JzAxMDExMDExMDEwMCcsXG5cdC8vIDEzNTUtMTM1OVxuXHQnMTAwMTEwMTEwMTEwJyxcblx0JzAxMDEwMTAxMDExMScsXG5cdCcwMDEwMTAwMTAxMTEnLFxuXHQnMDEwMTAxMDAxMDExJyxcblx0JzAxMTAxMDEwMDAxMScsXG5cdC8vIDEzNjAtMTM2NFxuXHQnMDExMTAxMDEwMDEwJyxcblx0JzEwMTEwMTEwMDEwMScsXG5cdCcwMTAxMDExMDEwMTAnLFxuXHQnMTAxMDEwMTAxMDExJyxcblx0JzAxMDEwMDEwMTAxMScsXG5cdC8vIDEzNjUtMTM2OVxuXHQnMTEwMDEwMDEwMTAxJyxcblx0JzExMDEwMTAwMTAxMCcsXG5cdCcxMTAxMTAxMDAxMDEnLFxuXHQnMDEwMTExMDAxMDEwJyxcblx0JzEwMTAxMTAxMDExMCcsXG5cdC8vIDEzNzAtMTM3NFxuXHQnMTAwMTAxMDEwMTExJyxcblx0JzAxMDAxMDEwMTAxMScsXG5cdCcxMDAxMDEwMDEwMTEnLFxuXHQnMTAxMDEwMTAwMTAxJyxcblx0JzEwMTEwMTAxMDAxMCcsXG5cdC8vIDEzNzUtMTM3OVxuXHQnMTAxMTAxMTAxMDEwJyxcblx0JzAxMDEwMTExMDEwMScsXG5cdCcwMDEwMDExMTAxMTAnLFxuXHQnMTAwMDEwMTEwMTExJyxcblx0JzAxMDAwMTAxMTAxMScsXG5cdC8vIDEzODAtMTM4NFxuXHQnMDEwMTAxMDEwMTAxJyxcblx0JzAxMDExMDEwMTAwMScsXG5cdCcwMTAxMTAxMTAxMDAnLFxuXHQnMTAwMTExMDExMDEwJyxcblx0JzAxMDAxMTAxMTEwMScsXG5cdC8vIDEzODUtMTM4OVxuXHQnMDAxMDAxMTAxMTEwJyxcblx0JzEwMDEwMDExMDExMCcsXG5cdCcxMDEwMTAxMDEwMTAnLFxuXHQnMTEwMTAxMDEwMTAwJyxcblx0JzExMDExMDExMDAxMCcsXG5cdC8vIDEzOTAtMTM5NFxuXHQnMDEwMTExMDEwMTAxJyxcblx0JzAwMTAxMTAxMTAxMCcsXG5cdCcxMDAxMDEwMTEwMTEnLFxuXHQnMDEwMDEwMTAxMDExJyxcblx0JzEwMTAwMTAxMDEwMScsXG5cdC8vIDEzOTUtMTM5OVxuXHQnMTAxMTAxMDAxMDAxJyxcblx0JzEwMTEwMTEwMDEwMCcsXG5cdCcxMDExMDExMTAwMDEnLFxuXHQnMDEwMTEwMTEwMTAwJyxcblx0JzEwMTAxMDExMDEwMScsXG5cdC8vIDE0MDAtMTQwNFxuXHQnMTAxMDAxMDEwMTAxJyxcblx0JzExMDEwMDEwMDEwMScsXG5cdCcxMTEwMTAwMTAwMTAnLFxuXHQnMTExMDExMDAxMDAxJyxcblx0JzAxMTAxMTAxMDEwMCcsXG5cdC8vIDE0MDUtMTQwOVxuXHQnMTAxMDExMTAxMDAxJyxcblx0JzEwMDEwMTEwMTAxMScsXG5cdCcwMTAwMTAxMDEwMTEnLFxuXHQnMTAxMDEwMDEwMDExJyxcblx0JzExMDEwMTAwMTAwMScsXG5cdC8vIDE0MTAtMTQxNFxuXHQnMTEwMTEwMTAwMTAwJyxcblx0JzExMDExMDExMDAxMCcsXG5cdCcxMDEwMTAxMTEwMDEnLFxuXHQnMDEwMDEwMTExMDEwJyxcblx0JzEwMTAwMTAxMTAxMScsXG5cdC8vIDE0MTUtMTQxOVxuXHQnMDEwMTAwMTAxMDExJyxcblx0JzEwMTAxMDAxMDEwMScsXG5cdCcxMDExMDAxMDEwMTAnLFxuXHQnMTAxMTAxMDEwMTAxJyxcblx0JzAxMDEwMTAxMTEwMCcsXG5cdC8vIDE0MjAtMTQyNFxuXHQnMDEwMDEwMTExMTAxJyxcblx0JzAwMTAwMDExMTEwMScsXG5cdCcxMDAxMDAwMTExMDEnLFxuXHQnMTAxMDEwMDEwMTAxJyxcblx0JzEwMTEwMTAwMTAxMCcsXG5cdC8vIDE0MjUtMTQyOVxuXHQnMTAxMTAxMDExMDEwJyxcblx0JzAxMDEwMTEwMTEwMScsXG5cdCcwMDEwMTAxMTAxMTAnLFxuXHQnMTAwMTAwMTExMDExJyxcblx0JzAxMDAxMDAxMTAxMScsXG5cdC8vIDE0MzAtMTQzNFxuXHQnMDExMDAxMDEwMTAxJyxcblx0JzAxMTAxMDEwMTAwMScsXG5cdCcwMTExMDEwMTAxMDAnLFxuXHQnMTAxMTAxMTAxMDEwJyxcblx0JzAxMDEwMTEwMTEwMCcsXG5cdC8vIDE0MzUtMTQzOVxuXHQnMTAxMDEwMTAxMTAxJyxcblx0JzAxMDEwMTAxMDEwMScsXG5cdCcxMDExMDAxMDEwMDEnLFxuXHQnMTAxMTEwMDEwMDEwJyxcblx0JzEwMTExMDEwMTAwMScsXG5cdC8vIDE0NDAtMTQ0NFxuXHQnMDEwMTExMDEwMTAwJyxcblx0JzEwMTAxMTAxMTAxMCcsXG5cdCcwMTAxMDEwMTEwMTAnLFxuXHQnMTAxMDEwMTAxMDExJyxcblx0JzAxMDExMDAxMDEwMScsXG5cdC8vIDE0NDUtMTQ0OVxuXHQnMDExMTAxMDAxMDAxJyxcblx0JzAxMTEwMTEwMDEwMCcsXG5cdCcxMDExMTAxMDEwMTAnLFxuXHQnMDEwMTEwMTEwMTAxJyxcblx0JzAwMTAxMDExMDExMCcsXG5cdC8vIDE0NTAtMTQ1NFxuXHQnMTAxMDAxMDEwMTEwJyxcblx0JzExMTAwMTAwMTEwMScsXG5cdCcxMDExMDAxMDAxMDEnLFxuXHQnMTAxMTAxMDEwMDEwJyxcblx0JzEwMTEwMTEwMTAxMCcsXG5cdC8vIDE0NTUtMTQ1OVxuXHQnMDEwMTEwMTAxMTAxJyxcblx0JzAwMTAxMDEwMTExMCcsXG5cdCcxMDAxMDAxMDExMTEnLFxuXHQnMDEwMDEwMDEwMTExJyxcblx0JzAxMTAwMTAwMTAxMScsXG5cdC8vIDE0NjAtMTQ2NFxuXHQnMDExMDEwMTAwMTAxJyxcblx0JzAxMTAxMDEwMTEwMCcsXG5cdCcxMDEwMTEwMTAxMTAnLFxuXHQnMDEwMTAxMDExMTAxJyxcblx0JzAxMDAxMDAxMTEwMScsXG5cdC8vIDE0NjUtMTQ2OVxuXHQnMTAxMDAxMDAxMTAxJyxcblx0JzExMDEwMDAxMDExMCcsXG5cdCcxMTAxMTAwMTAxMDEnLFxuXHQnMDEwMTEwMTAxMDEwJyxcblx0JzAxMDExMDExMDEwMScsXG5cdC8vIDE0NzAtMTQ3NFxuXHQnMDAxMDExMDExMDEwJyxcblx0JzEwMDEwMTAxMTAxMScsXG5cdCcwMTAwMTAxMDExMDEnLFxuXHQnMDEwMTEwMDEwMTAxJyxcblx0JzAxMTAxMTAwMTAxMCcsXG5cdC8vIDE0NzUtMTQ3OVxuXHQnMDExMDExMTAwMTAwJyxcblx0JzEwMTAxMTEwMTAxMCcsXG5cdCcwMTAwMTExMTAxMDEnLFxuXHQnMDAxMDEwMTEwMTEwJyxcblx0JzEwMDEwMTAxMDExMCcsXG5cdC8vIDE0ODAtMTQ4NFxuXHQnMTAxMDEwMTAxMDEwJyxcblx0JzEwMTEwMTAxMDEwMCcsXG5cdCcxMDExMTEwMTAwMTAnLFxuXHQnMDEwMTExMDExMDAxJyxcblx0JzAwMTAxMTEwMTAxMCcsXG5cdC8vIDE0ODUtMTQ4OVxuXHQnMTAwMTAxMTAxMTAxJyxcblx0JzAxMDAxMDEwMTEwMScsXG5cdCcxMDEwMTAwMTAxMDEnLFxuXHQnMTAxMTAxMDAxMDEwJyxcblx0JzEwMTExMDEwMDEwMScsXG5cdC8vIDE0OTAtMTQ5NFxuXHQnMDEwMTEwMTEwMDEwJyxcblx0JzEwMDExMDExMDEwMScsXG5cdCcwMTAwMTEwMTAxMTAnLFxuXHQnMTAxMDEwMDEwMTExJyxcblx0JzAxMDEwMTAwMDExMScsXG5cdC8vIDE0OTUtMTQ5OVxuXHQnMDExMDEwMDEwMDExJyxcblx0JzAxMTEwMTAwMTAwMScsXG5cdCcxMDExMDEwMTAxMDEnLFxuXHQnMDEwMTAxMTAxMDEwJyxcblx0JzEwMTAwMTEwMTAxMScsXG5cdC8vIDE1MDAtMTUwNFxuXHQnMDEwMTAwMTAxMDExJyxcblx0JzEwMTAxMDAwMTAxMScsXG5cdCcxMTAxMDEwMDAxMTAnLFxuXHQnMTEwMTEwMTAwMDExJyxcblx0JzAxMDExMTAwMTAxMCcsXG5cdC8vIDE1MDUtMTUwOVxuXHQnMTAxMDExMDEwMTEwJyxcblx0JzAxMDAxMTAxMTAxMScsXG5cdCcwMDEwMDExMDEwMTEnLFxuXHQnMTAwMTAxMDAxMDExJyxcblx0JzEwMTAxMDEwMDEwMScsXG5cdC8vIDE1MTAtMTUxNFxuXHQnMTAxMTAxMDEwMDEwJyxcblx0JzEwMTEwMTEwMTAwMScsXG5cdCcwMTAxMDExMTAxMDEnLFxuXHQnMDAwMTAxMTEwMTEwJyxcblx0JzEwMDAxMDExMDExMScsXG5cdC8vIDE1MTUtMTUxOVxuXHQnMDAxMDAxMDExMDExJyxcblx0JzAxMDEwMDEwMTAxMScsXG5cdCcwMTAxMDExMDAxMDEnLFxuXHQnMDEwMTEwMTEwMTAwJyxcblx0JzEwMDExMTAxMTAxMCcsXG5cdC8vIDE1MjAtMTUyNFxuXHQnMDEwMDExMTAxMTAxJyxcblx0JzAwMDEwMTEwMTEwMScsXG5cdCcxMDAwMTAxMTAxMTAnLFxuXHQnMTAxMDEwMTAwMTEwJyxcblx0JzExMDEwMTAxMDAxMCcsXG5cdC8vIDE1MjUtMTUyOVxuXHQnMTEwMTEwMTAxMDAxJyxcblx0JzAxMDExMTAxMDEwMCcsXG5cdCcxMDEwMTEwMTEwMTAnLFxuXHQnMTAwMTAxMDExMDExJyxcblx0JzAxMDAxMDEwMTAxMScsXG5cdC8vIDE1MzAtMTUzNFxuXHQnMDExMDAxMDEwMDExJyxcblx0JzAxMTEwMDEwMTAwMScsXG5cdCcwMTExMDExMDAwMTAnLFxuXHQnMTAxMTEwMTAxMDAxJyxcblx0JzAxMDExMDExMDAxMCcsXG5cdC8vIDE1MzUtMTUzOVxuXHQnMTAxMDEwMTEwMTAxJyxcblx0JzAxMDEwMTAxMDEwMScsXG5cdCcxMDExMDAxMDAxMDEnLFxuXHQnMTEwMTEwMDEwMDEwJyxcblx0JzExMTAxMTAwMTAwMScsXG5cdC8vIDE1NDAtMTU0NFxuXHQnMDExMDExMDEwMDEwJyxcblx0JzEwMTAxMTEwMTAwMScsXG5cdCcwMTAxMDExMDEwMTEnLFxuXHQnMDEwMDEwMTAxMDExJyxcblx0JzEwMTAwMTAxMDEwMScsXG5cdC8vIDE1NDUtMTU0OVxuXHQnMTEwMTAwMTAxMDAxJyxcblx0JzExMDEwMTAxMDEwMCcsXG5cdCcxMTAxMTAxMDEwMTAnLFxuXHQnMTAwMTEwMTEwMTAxJyxcblx0JzAxMDAxMDExMTAxMCcsXG5cdC8vIDE1NTAtMTU1NFxuXHQnMTAxMDAwMTExMDExJyxcblx0JzAxMDAxMDAxMTAxMScsXG5cdCcxMDEwMDEwMDExMDEnLFxuXHQnMTAxMDEwMTAxMDEwJyxcblx0JzEwMTAxMTAxMDEwMScsXG5cdC8vIDE1NTUtMTU1OVxuXHQnMDAxMDExMDExMDEwJyxcblx0JzEwMDEwMTAxMTEwMScsXG5cdCcwMTAwMDEwMTExMTAnLFxuXHQnMTAxMDAwMTAxMTEwJyxcblx0JzExMDAxMDAxMTAxMCcsXG5cdC8vIDE1NjAtMTU2NFxuXHQnMTEwMTAxMDEwMTAxJyxcblx0JzAxMTAxMDExMDAxMCcsXG5cdCcwMTEwMTAxMTEwMDEnLFxuXHQnMDEwMDEwMTExMDEwJyxcblx0JzEwMTAwMTAxMTEwMScsXG5cdC8vIDE1NjUtMTU2OVxuXHQnMDEwMTAwMTAxMTAxJyxcblx0JzEwMTAxMDAxMDEwMScsXG5cdCcxMDExMDEwMTAwMTAnLFxuXHQnMTAxMTEwMTAxMDAwJyxcblx0JzEwMTExMDExMDEwMCcsXG5cdC8vIDE1NzAtMTU3NFxuXHQnMDEwMTEwMTExMDAxJyxcblx0JzAwMTAxMTAxMTAxMCcsXG5cdCcxMDAxMDEwMTEwMTAnLFxuXHQnMTAxMTAxMDAxMDEwJyxcblx0JzExMDExMDEwMDEwMCcsXG5cdC8vIDE1NzUtMTU3OVxuXHQnMTExMDExMDEwMDAxJyxcblx0JzAxMTAxMTEwMTAwMCcsXG5cdCcxMDExMDExMDEwMTAnLFxuXHQnMDEwMTAxMTAxMTAxJyxcblx0JzAxMDEwMDExMDEwMScsXG5cdC8vIDE1ODAtMTU4NFxuXHQnMDExMDEwMDEwMTAxJyxcblx0JzExMDEwMTAwMTAxMCcsXG5cdCcxMTAxMTAxMDEwMDAnLFxuXHQnMTEwMTExMDEwMTAwJyxcblx0JzAxMTAxMTAxMTAxMCcsXG5cdC8vIDE1ODUtMTU4OVxuXHQnMDEwMTAxMDExMDExJyxcblx0JzAwMTAxMDAxMTEwMScsXG5cdCcwMTEwMDAxMDEwMTEnLFxuXHQnMTAxMTAwMDEwMTAxJyxcblx0JzEwMTEwMTAwMTAxMCcsXG5cdC8vIDE1OTAtMTU5NFxuXHQnMTAxMTEwMDEwMTAxJyxcblx0JzAxMDExMDEwMTAxMCcsXG5cdCcxMDEwMTAxMDExMTAnLFxuXHQnMTAwMTAwMTAxMTEwJyxcblx0JzExMDAxMDAwMTExMScsXG5cdC8vIDE1OTUtMTU5OVxuXHQnMDEwMTAwMTAwMTExJyxcblx0JzAxMTAxMDAxMDEwMScsXG5cdCcwMTEwMTAxMDEwMTAnLFxuXHQnMTAxMDExMDEwMTEwJyxcblx0JzAxMDEwMTAxMTEwMScsXG5cdC8vIDE2MDBcblx0JzAwMTAxMDAxMTEwMScsXG5dO1xuXG5mdW5jdGlvbiBnZXREYXlzRGlmZihkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUpOiBudW1iZXIge1xuXHQvLyBJZ25vcmVzIHRoZSB0aW1lIHBhcnQgaW4gZGF0ZTEgYW5kIGRhdGUyOlxuXHRjb25zdCB0aW1lMSA9IERhdGUuVVRDKGRhdGUxLmdldEZ1bGxZZWFyKCksIGRhdGUxLmdldE1vbnRoKCksIGRhdGUxLmdldERhdGUoKSk7XG5cdGNvbnN0IHRpbWUyID0gRGF0ZS5VVEMoZGF0ZTIuZ2V0RnVsbFllYXIoKSwgZGF0ZTIuZ2V0TW9udGgoKSwgZGF0ZTIuZ2V0RGF0ZSgpKTtcblx0Y29uc3QgZGlmZiA9IE1hdGguYWJzKHRpbWUxIC0gdGltZTIpO1xuXHRyZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gT05FX0RBWSk7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JDYWxlbmRhcklzbGFtaWNVbWFscXVyYSBleHRlbmRzIE5nYkNhbGVuZGFySXNsYW1pY0NpdmlsIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGVxdWl2YWxlbnQgaXNsYW1pYyhVbWFscXVyYSkgZGF0ZSB2YWx1ZSBmb3IgYSBnaXZlIGlucHV0IEdyZWdvcmlhbiBkYXRlLlxuXHQgKiBgZ2RhdGVgIGlzIHMgSlMgRGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSGlqcmkuXG5cdCAqL1xuXHRmcm9tR3JlZ29yaWFuKGdEYXRlOiBEYXRlKTogTmdiRGF0ZSB7XG5cdFx0bGV0IGhEYXkgPSAxLFxuXHRcdFx0aE1vbnRoID0gMCxcblx0XHRcdGhZZWFyID0gMTMwMDtcblx0XHRsZXQgZGF5c0RpZmYgPSBnZXREYXlzRGlmZihnRGF0ZSwgR1JFR09SSUFOX0ZJUlNUX0RBVEUpO1xuXHRcdGlmIChnRGF0ZS5nZXRUaW1lKCkgLSBHUkVHT1JJQU5fRklSU1RfREFURS5nZXRUaW1lKCkgPj0gMCAmJiBnRGF0ZS5nZXRUaW1lKCkgLSBHUkVHT1JJQU5fTEFTVF9EQVRFLmdldFRpbWUoKSA8PSAwKSB7XG5cdFx0XHRsZXQgeWVhciA9IDEzMDA7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IE1PTlRIX0xFTkdUSC5sZW5ndGg7IGkrKywgeWVhcisrKSB7XG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgMTI7IGorKykge1xuXHRcdFx0XHRcdGxldCBudW1PZkRheXMgPSArTU9OVEhfTEVOR1RIW2ldW2pdICsgMjk7XG5cdFx0XHRcdFx0aWYgKGRheXNEaWZmIDw9IG51bU9mRGF5cykge1xuXHRcdFx0XHRcdFx0aERheSA9IGRheXNEaWZmICsgMTtcblx0XHRcdFx0XHRcdGlmIChoRGF5ID4gbnVtT2ZEYXlzKSB7XG5cdFx0XHRcdFx0XHRcdGhEYXkgPSAxO1xuXHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaiA+IDExKSB7XG5cdFx0XHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdFx0XHR5ZWFyKys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRoTW9udGggPSBqO1xuXHRcdFx0XHRcdFx0aFllYXIgPSB5ZWFyO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5ldyBOZ2JEYXRlKGhZZWFyLCBoTW9udGggKyAxLCBoRGF5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF5c0RpZmYgPSBkYXlzRGlmZiAtIG51bU9mRGF5cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGwgYXMgYW55O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc3VwZXIuZnJvbUdyZWdvcmlhbihnRGF0ZSk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB0aGUgY3VycmVudCBIaWpyaSBkYXRlIHRvIEdyZWdvcmlhbi5cblx0ICovXG5cdHRvR3JlZ29yaWFuKGhEYXRlOiBOZ2JEYXRlKTogRGF0ZSB7XG5cdFx0Y29uc3QgaFllYXIgPSBoRGF0ZS55ZWFyO1xuXHRcdGNvbnN0IGhNb250aCA9IGhEYXRlLm1vbnRoIC0gMTtcblx0XHRjb25zdCBoRGF5ID0gaERhdGUuZGF5O1xuXHRcdGxldCBnRGF0ZSA9IG5ldyBEYXRlKEdSRUdPUklBTl9GSVJTVF9EQVRFKTtcblx0XHRsZXQgZGF5RGlmZiA9IGhEYXkgLSAxO1xuXHRcdGlmIChoWWVhciA+PSBISUpSSV9CRUdJTiAmJiBoWWVhciA8PSBISUpSSV9FTkQpIHtcblx0XHRcdGZvciAobGV0IHkgPSAwOyB5IDwgaFllYXIgLSBISUpSSV9CRUdJTjsgeSsrKSB7XG5cdFx0XHRcdGZvciAobGV0IG0gPSAwOyBtIDwgMTI7IG0rKykge1xuXHRcdFx0XHRcdGRheURpZmYgKz0gK01PTlRIX0xFTkdUSFt5XVttXSArIDI5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBtID0gMDsgbSA8IGhNb250aDsgbSsrKSB7XG5cdFx0XHRcdGRheURpZmYgKz0gK01PTlRIX0xFTkdUSFtoWWVhciAtIEhJSlJJX0JFR0lOXVttXSArIDI5O1xuXHRcdFx0fVxuXHRcdFx0Z0RhdGUuc2V0RGF0ZShHUkVHT1JJQU5fRklSU1RfREFURS5nZXREYXRlKCkgKyBkYXlEaWZmKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Z0RhdGUgPSBzdXBlci50b0dyZWdvcmlhbihoRGF0ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBnRGF0ZTtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBzcGVjaWZpYyBIaWpyaSBoTW9udGguXG5cdCAqIGBoTW9udGhgIGlzIDEgZm9yIE11aGFycmFtLCAyIGZvciBTYWZhciwgZXRjLlxuXHQgKiBgaFllYXJgIGlzIGFueSBIaWpyaSBoWWVhci5cblx0ICovXG5cdGdldERheXNQZXJNb250aChoTW9udGg6IG51bWJlciwgaFllYXI6IG51bWJlcik6IG51bWJlciB7XG5cdFx0aWYgKGhZZWFyID49IEhJSlJJX0JFR0lOICYmIGhZZWFyIDw9IEhJSlJJX0VORCkge1xuXHRcdFx0Y29uc3QgcG9zID0gaFllYXIgLSBISUpSSV9CRUdJTjtcblx0XHRcdHJldHVybiArTU9OVEhfTEVOR1RIW3Bvc11baE1vbnRoIC0gMV0gKyAyOTtcblx0XHR9XG5cdFx0cmV0dXJuIHN1cGVyLmdldERheXNQZXJNb250aChoTW9udGgsIGhZZWFyKTtcblx0fVxufVxuIl19