@senior-agronegocio/angular-components 0.0.58 → 0.0.59

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.
Files changed (105) hide show
  1. package/bundles/senior-agronegocio-angular-components.umd.js +788 -689
  2. package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
  3. package/bundles/senior-agronegocio-angular-components.umd.min.js +2 -2
  4. package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
  5. package/common/agro-regex.constant.d.ts +0 -8
  6. package/common/agro-string-utils.class.d.ts +0 -13
  7. package/components/event-control-board/common/event-operation.d.ts +7 -1
  8. package/components/event-control-board/common/event-origin.d.ts +2 -1
  9. package/components/event-control-board/event-control-board.component.d.ts +10 -11
  10. package/components/event-control-board/index.d.ts +1 -0
  11. package/components/event-control-board/service/event-control-board.service.d.ts +3 -3
  12. package/components/event-control-board/service/fixation-entity/fixation-dto.d.ts +40 -0
  13. package/components/event-control-board/service/fixation-entity/fixation.module.d.ts +2 -0
  14. package/components/event-control-board/service/fixation-entity/fixation.service.d.ts +15 -0
  15. package/enums/agro-numbers.enum.d.ts +2 -1
  16. package/enums/fixation-status.d.ts +8 -0
  17. package/esm2015/common/agro-platform-utils.class.js +5 -6
  18. package/esm2015/common/agro-regex.constant.js +1 -9
  19. package/esm2015/common/agro-string-utils.class.js +58 -38
  20. package/esm2015/components/event-control-board/common/event-control-constants.js +8 -2
  21. package/esm2015/components/event-control-board/common/event-operation.js +7 -1
  22. package/esm2015/components/event-control-board/common/event-origin.js +2 -1
  23. package/esm2015/components/event-control-board/event-control-board.component.js +94 -104
  24. package/esm2015/components/event-control-board/event-control-board.module.js +7 -4
  25. package/esm2015/components/event-control-board/index.js +2 -1
  26. package/esm2015/components/event-control-board/service/event-control-board.service.js +10 -10
  27. package/esm2015/components/event-control-board/service/fixation-entity/fixation-dto.js +1 -0
  28. package/esm2015/components/event-control-board/service/fixation-entity/fixation.module.js +24 -0
  29. package/esm2015/components/event-control-board/service/fixation-entity/fixation.service.js +29 -0
  30. package/esm2015/enums/agro-numbers.enum.js +2 -1
  31. package/esm2015/enums/fixation-status.js +10 -0
  32. package/esm2015/form-validator/agro-form-validator.js +30 -39
  33. package/esm2015/services/i18n/en-US.js +17 -3
  34. package/esm2015/services/i18n/es-CO.js +17 -3
  35. package/esm2015/services/i18n/pt-BR.js +16 -2
  36. package/esm5/common/agro-platform-utils.class.js +5 -6
  37. package/esm5/common/agro-regex.constant.js +1 -9
  38. package/esm5/common/agro-string-utils.class.js +58 -38
  39. package/esm5/components/event-control-board/common/event-control-constants.js +8 -2
  40. package/esm5/components/event-control-board/common/event-operation.js +7 -1
  41. package/esm5/components/event-control-board/common/event-origin.js +2 -1
  42. package/esm5/components/event-control-board/event-control-board.component.js +101 -111
  43. package/esm5/components/event-control-board/event-control-board.module.js +7 -4
  44. package/esm5/components/event-control-board/index.js +2 -1
  45. package/esm5/components/event-control-board/service/event-control-board.service.js +10 -10
  46. package/esm5/components/event-control-board/service/fixation-entity/fixation-dto.js +1 -0
  47. package/esm5/components/event-control-board/service/fixation-entity/fixation.module.js +27 -0
  48. package/esm5/components/event-control-board/service/fixation-entity/fixation.service.js +32 -0
  49. package/esm5/enums/agro-numbers.enum.js +2 -1
  50. package/esm5/enums/fixation-status.js +10 -0
  51. package/esm5/form-validator/agro-form-validator.js +31 -39
  52. package/esm5/services/i18n/en-US.js +17 -3
  53. package/esm5/services/i18n/es-CO.js +17 -3
  54. package/esm5/services/i18n/pt-BR.js +16 -2
  55. package/fesm2015/senior-agronegocio-angular-components.js +756 -665
  56. package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
  57. package/fesm5/senior-agronegocio-angular-components.js +790 -692
  58. package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
  59. package/form-validator/agro-form-validator.d.ts +15 -17
  60. package/package.json +1 -1
  61. package/services/i18n/en-US.d.ts +14 -0
  62. package/services/i18n/es-CO.d.ts +14 -0
  63. package/services/i18n/pt-BR.d.ts +14 -0
  64. package/components/event-control-board/common/invoice-status.d.ts +0 -12
  65. package/components/event-control-board/common/invoice-type.d.ts +0 -5
  66. package/components/event-control-board/service/e012fam/e012fam.d.ts +0 -14
  67. package/components/event-control-board/service/e075der/e075der.d.ts +0 -18
  68. package/components/event-control-board/service/e113saf/e113saf.d.ts +0 -14
  69. package/components/event-control-board/service/e205dep/e205dep-dto.d.ts +0 -15
  70. package/components/event-control-board/service/e205dep/e205dep.d.ts +0 -16
  71. package/components/event-control-board/service/external-invoice/external-invoice.d.ts +0 -13
  72. package/components/event-control-board/service/invoice/invoice.d.ts +0 -21
  73. package/components/event-control-board/service/origination/operationType.d.ts +0 -5
  74. package/components/event-control-board/service/origination/origination.d.ts +0 -51
  75. package/components/event-control-board/service/producer-invoice/producer-invoice.d.ts +0 -27
  76. package/components/event-control-board/service/rural-estate/rural-estate.d.ts +0 -34
  77. package/components/event-control-board/service/ticket/ticket.d.ts +0 -18
  78. package/esm2015/components/event-control-board/common/invoice-status.js +0 -14
  79. package/esm2015/components/event-control-board/common/invoice-type.js +0 -7
  80. package/esm2015/components/event-control-board/service/e012fam/e012fam.js +0 -20
  81. package/esm2015/components/event-control-board/service/e075der/e075der.js +0 -31
  82. package/esm2015/components/event-control-board/service/e113saf/e113saf.js +0 -20
  83. package/esm2015/components/event-control-board/service/e205dep/e205dep-dto.js +0 -1
  84. package/esm2015/components/event-control-board/service/e205dep/e205dep.js +0 -20
  85. package/esm2015/components/event-control-board/service/external-invoice/external-invoice.js +0 -20
  86. package/esm2015/components/event-control-board/service/invoice/invoice.js +0 -43
  87. package/esm2015/components/event-control-board/service/origination/operationType.js +0 -7
  88. package/esm2015/components/event-control-board/service/origination/origination.js +0 -59
  89. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.js +0 -32
  90. package/esm2015/components/event-control-board/service/rural-estate/rural-estate.js +0 -78
  91. package/esm2015/components/event-control-board/service/ticket/ticket.js +0 -39
  92. package/esm5/components/event-control-board/common/invoice-status.js +0 -14
  93. package/esm5/components/event-control-board/common/invoice-type.js +0 -7
  94. package/esm5/components/event-control-board/service/e012fam/e012fam.js +0 -25
  95. package/esm5/components/event-control-board/service/e075der/e075der.js +0 -36
  96. package/esm5/components/event-control-board/service/e113saf/e113saf.js +0 -25
  97. package/esm5/components/event-control-board/service/e205dep/e205dep-dto.js +0 -1
  98. package/esm5/components/event-control-board/service/e205dep/e205dep.js +0 -25
  99. package/esm5/components/event-control-board/service/external-invoice/external-invoice.js +0 -25
  100. package/esm5/components/event-control-board/service/invoice/invoice.js +0 -48
  101. package/esm5/components/event-control-board/service/origination/operationType.js +0 -7
  102. package/esm5/components/event-control-board/service/origination/origination.js +0 -62
  103. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.js +0 -37
  104. package/esm5/components/event-control-board/service/rural-estate/rural-estate.js +0 -83
  105. package/esm5/components/event-control-board/service/ticket/ticket.js +0 -44
@@ -39,14 +39,6 @@ export declare const AGRO_REGEX: {
39
39
  * Validação de Placa de Veículo
40
40
  */
41
41
  isLicensePlate: RegExp;
42
- /**
43
- * Validação de Placa de veículo padrão mercosul
44
- */
45
- isMercosulLicensePlate: RegExp;
46
- /**
47
- * Validação de Placa de veículo padrão antigo AAA-1234
48
- */
49
- isOldLicensePlate: RegExp;
50
42
  /**
51
43
  * Validação de Número de Telefone
52
44
  */
@@ -191,17 +191,4 @@ export declare class AgroStringUtils {
191
191
  * @returns True se a string for inválida, false caso contrário.
192
192
  */
193
193
  static isInvalid(str: NullableString): boolean;
194
- /**
195
- * Valida se uma string é um e-mail válido ou não
196
- * Retorna um booleano para indicar se é um e-mail válido ou não
197
- * @param email - A string a ser verificada
198
- * @returns True se a string for um e-mail válido, false caso contrário
199
- */
200
- static isValidEmail(email: string): boolean;
201
- /**
202
- * Valida se uma string é uma placa de veículo BR válida ou não.
203
- * Retorna um booleano para indicar se é uma placa válida ou não.
204
- * @param plate - A string a ser verificada
205
- */
206
- static isValidLicensePlate(plate: string): boolean;
207
194
  }
@@ -12,5 +12,11 @@ export declare enum EventOperation {
12
12
  REPROCESS_INVOICE = "REPROCESS_INVOICE",
13
13
  TRANSFER_CREATE_INCOMING_INVOICE = "TRANSFER_CREATE_INCOMING_INVOICE",
14
14
  TRANSFER_CREATE_OUTGOING_INVOICE = "TRANSFER_CREATE_OUTGOING_INVOICE",
15
- TRANSFER_PRODUCER_BALANCE = "TRANSFER_PRODUCER_BALANCE"
15
+ TRANSFER_PRODUCER_BALANCE = "TRANSFER_PRODUCER_BALANCE",
16
+ FINISH_FINANCIAL_FIXATION = "FINISH_FINANCIAL_FIXATION",
17
+ FINISH_PRODUCER_NET_VALUE_FIXATION = "FINISH_PRODUCER_NET_VALUE_FIXATION",
18
+ CONCLUDE_FIXATION = "CONCLUDE_FIXATION",
19
+ CANCEL_FINANCIAL_FIXATION = "CANCEL_FINANCIAL_FIXATION",
20
+ CANCEL_PRODUCER_NET_VALUE_FIXATION = "CANCEL_PRODUCER_NET_VALUE_FIXATION",
21
+ CANCEL_FIXATION = "CANCEL_FIXATION"
16
22
  }
@@ -4,5 +4,6 @@ export declare enum EventOrigin {
4
4
  INVOICE = "INVOICE",
5
5
  TRANSFER = "TRANSFER",
6
6
  CHANGE_REQUEST = "CHANGE_REQUEST",
7
- CREATE_INVOICE = "CREATE_INVOICE"
7
+ CREATE_INVOICE = "CREATE_INVOICE",
8
+ FIXATION = "FIXATION"
8
9
  }
@@ -2,13 +2,12 @@ import { FormBuilder, FormGroup } from "@angular/forms";
2
2
  import { BadgeColors, ButtonPriority, FormField, Step } from "@seniorsistemas/angular-components";
3
3
  import { OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
4
4
  import { WebsocketService } from "../../services/websocket";
5
- import { MessageService } from "primeng";
5
+ import { ConfirmationService, MessageService } from "primeng";
6
6
  import { PaginatorStorageService } from "./service/paginator-storage.service";
7
7
  import { EventStatus } from "./common/event-status";
8
8
  import { E070Emp } from "./service/e070emp/e070emp";
9
9
  import { E070Fil } from "./service/e070fil/e070fil";
10
10
  import { EventOrigin } from "./common/event-origin";
11
- import { Ticket } from "./service/ticket/ticket";
12
11
  import { EventControlBoardService } from "./service/event-control-board.service";
13
12
  import { ProducerInvoiceDto } from "./service/producer-invoice/producer-invoice-dto";
14
13
  import { AGRO_NUMBERS } from "../../enums/agro-numbers.enum";
@@ -20,9 +19,10 @@ export declare class EventControlBoardComponent implements OnInit, OnDestroy, On
20
19
  private readonly eventControlBoardService;
21
20
  private readonly paginatorStorageService;
22
21
  private readonly messageService;
22
+ private readonly confirmationService;
23
23
  e070emp: E070Emp;
24
24
  e070fil: E070Fil;
25
- ticket: Ticket;
25
+ controlCode: string[];
26
26
  eventOrigin: EventOrigin;
27
27
  eventStatus: EventStatus;
28
28
  externalId: string;
@@ -51,12 +51,11 @@ export declare class EventControlBoardComponent implements OnInit, OnDestroy, On
51
51
  currentListParams: any;
52
52
  private readonly ngUnsubscribe;
53
53
  private readonly eventItem;
54
- private socketConnection;
55
- constructor(translate: LibTranslationService, formBuilder: FormBuilder, websocketService: WebsocketService, eventControlBoardService: EventControlBoardService, paginatorStorageService: PaginatorStorageService, messageService: MessageService);
54
+ constructor(translate: LibTranslationService, formBuilder: FormBuilder, websocketService: WebsocketService, eventControlBoardService: EventControlBoardService, paginatorStorageService: PaginatorStorageService, messageService: MessageService, confirmationService: ConfirmationService);
56
55
  ngOnInit(): Promise<void>;
57
56
  ngOnChanges(changes: SimpleChanges): void;
58
57
  private updateCompanyAndBranchFormFields;
59
- private updateEventOriginAndTicketFormFields;
58
+ private updateEventOriginAndControlCodeFormFields;
60
59
  private updateEventStatusAndCreatedDateFormFields;
61
60
  private initializeFormGroup;
62
61
  private setFormFields;
@@ -66,14 +65,12 @@ export declare class EventControlBoardComponent implements OnInit, OnDestroy, On
66
65
  onSearch(): void;
67
66
  resetGrid(listParams?: any): void;
68
67
  private updateGrid;
69
- private getSortedFields;
70
- private getFilterQuery;
71
- private handleListResponse;
72
- private processDetailCalls;
73
- private processDetailsResponses;
68
+ private processEventControlItems;
74
69
  private groupByEventGroup;
75
70
  private determineStepState;
76
71
  private getEventLabel;
72
+ private getSortedFields;
73
+ private getFilterQuery;
77
74
  private getFieldNameForSortRequest;
78
75
  private createFilterString;
79
76
  private createFilterStringFromType;
@@ -89,6 +86,8 @@ export declare class EventControlBoardComponent implements OnInit, OnDestroy, On
89
86
  reprocessEvent(): void;
90
87
  private addMessage;
91
88
  openModal(): void;
89
+ openCancelModal(): void;
90
+ private cancelFixation;
92
91
  confirmModal(): void;
93
92
  cancelModal(): void;
94
93
  closeSidebar(): void;
@@ -3,6 +3,7 @@ export { EventControlBoardService } from './service/event-control-board.service'
3
3
  export { SharedModule } from './shared.module';
4
4
  export { EventControlBoardModule } from './event-control-board.module';
5
5
  export { EventStepsModule } from '../event-steps/index';
6
+ export { FixationModule } from './service/fixation-entity/fixation.module';
6
7
  export { E001pesModule } from './service/e001pes/e001pes.module';
7
8
  export { E001TnsModule } from './service/e001tns/e001tns.module';
8
9
  export { E070EmpModule } from './service/e070emp/e070emp.module';
@@ -1,13 +1,13 @@
1
1
  import { EventControlItemService } from "./event-control-item/event-control-item.service";
2
2
  import { EventControlService } from "./event-control/event-control.service";
3
3
  import { ProducerInvoiceService } from "./producer-invoice/producer-invoice.service";
4
- import { TicketService } from "./ticket/ticket.service";
5
4
  import { TransferService } from "./transfer/transfer.service";
5
+ import { FixationService } from "./fixation-entity/fixation.service";
6
6
  export declare class EventControlBoardService {
7
7
  eventControlService: EventControlService;
8
8
  eventControlItemService: EventControlItemService;
9
- ticketService: TicketService;
10
9
  transferService: TransferService;
11
10
  producerInvoiceService: ProducerInvoiceService;
12
- constructor(eventControlService: EventControlService, eventControlItemService: EventControlItemService, ticketService: TicketService, transferService: TransferService, producerInvoiceService: ProducerInvoiceService);
11
+ fixationService: FixationService;
12
+ constructor(eventControlService: EventControlService, eventControlItemService: EventControlItemService, transferService: TransferService, producerInvoiceService: ProducerInvoiceService, fixationService: FixationService);
13
13
  }
@@ -0,0 +1,40 @@
1
+ import { FixationStatus } from "../../../../enums/fixation-status";
2
+ export interface FixationDto {
3
+ id?: string;
4
+ company: any;
5
+ branch: any;
6
+ code: number;
7
+ dateFixation: string;
8
+ hourFixation: string;
9
+ producer?: any;
10
+ producerGroup?: any;
11
+ royaltyId?: string;
12
+ valueCreditRoy?: number;
13
+ valueCreditRoyCharged?: number;
14
+ quantityCreditRoy?: number;
15
+ quantityAvailable: number;
16
+ quantityFix: number;
17
+ valueFix: number;
18
+ valueNet: number;
19
+ percentageBonus?: number;
20
+ valueBonus?: number;
21
+ valueTaxGenerated?: number;
22
+ valueTaxDiscounted?: number;
23
+ quantityTax?: number;
24
+ valueFit?: number;
25
+ valueTitPayment?: number;
26
+ valueTitReceive?: number;
27
+ valueIncrease?: number;
28
+ valueFunrural?: number;
29
+ valueSenar?: number;
30
+ valueGilRat?: number;
31
+ createdBy?: string;
32
+ createdDate?: Date;
33
+ lastModifiedBy?: string;
34
+ lastModifiedDate?: Date;
35
+ custom?: any;
36
+ status?: FixationStatus;
37
+ quantityEffective?: number;
38
+ quantityReserved?: number;
39
+ quantityBlocked?: number;
40
+ }
@@ -0,0 +1,2 @@
1
+ export declare class FixationModule {
2
+ }
@@ -0,0 +1,15 @@
1
+ import { FixationDto } from './fixation-dto';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { MessageService } from 'primeng/api';
4
+ import { LibTranslationService as TranslateService } from "../../../../services/lib-translation.service";
5
+ import { EntityService } from '../entity-service';
6
+ export interface ICancelFixationPayload {
7
+ fixationId: string;
8
+ }
9
+ export declare class FixationService extends EntityService<FixationDto> {
10
+ protected http: HttpClient;
11
+ protected messageService: MessageService;
12
+ protected translate: TranslateService;
13
+ constructor(http: HttpClient, messageService: MessageService, translate: TranslateService);
14
+ cancelFixation(body: ICancelFixationPayload): import("rxjs").Observable<unknown>;
15
+ }
@@ -1002,5 +1002,6 @@ export declare enum AGRO_NUMBERS {
1002
1002
  TWO_HUNDRED_AND_TWENTY_TWO = 222,
1003
1003
  TWO_HUNDRED_AND_TWENTY_ZERO = 220,
1004
1004
  TWO_HUNDRED_AND_TWO = 202,
1005
- ZERO = 0
1005
+ ZERO = 0,
1006
+ FIVE_SECONDS = 5000
1006
1007
  }
@@ -0,0 +1,8 @@
1
+ export declare enum FixationStatus {
2
+ APPROVED = "APPROVED",
3
+ CANCELED = "CANCELED",
4
+ IN_ANALYSIS = "IN_ANALYSIS",
5
+ FINISHED = "FINISHED",
6
+ REJECTED = "REJECTED",
7
+ IN_PROGRESS = "IN_PROGRESS"
8
+ }
@@ -42,11 +42,10 @@ export class AgroPlatformUtils {
42
42
  */
43
43
  static getCurrentUserName() {
44
44
  var _a;
45
- const cookie = AgroCookieUtils.getCookie('com.senior.token', true);
45
+ const cookie = AgroCookieUtils.getCookie('com.senior.token');
46
46
  if (cookie) {
47
- let str = (_a = AgroObjectUtils.fromString(cookie)) === null || _a === void 0 ? void 0 : _a.fullName;
47
+ const str = (_a = AgroCookieUtils.parseCookieToObject(cookie)) === null || _a === void 0 ? void 0 : _a.fullName;
48
48
  if (str) {
49
- str = str.replace(/\+/g, ' ');
50
49
  return str;
51
50
  }
52
51
  }
@@ -59,9 +58,9 @@ export class AgroPlatformUtils {
59
58
  */
60
59
  static getCurrentUserEmail() {
61
60
  var _a;
62
- const cookie = AgroCookieUtils.getCookie('com.senior.token', true);
61
+ const cookie = AgroCookieUtils.getCookie('com.senior.token');
63
62
  if (cookie) {
64
- const str = (_a = AgroObjectUtils.fromString(cookie)) === null || _a === void 0 ? void 0 : _a.email;
63
+ const str = (_a = AgroCookieUtils.parseCookieToObject(cookie)) === null || _a === void 0 ? void 0 : _a.email;
65
64
  if (str) {
66
65
  return str;
67
66
  }
@@ -110,4 +109,4 @@ export class AgroPlatformUtils {
110
109
  return null;
111
110
  }
112
111
  }
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1wbGF0Zm9ybS11dGlscy5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tcGxhdGZvcm0tdXRpbHMuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxpQkFBaUIsSUFBSSxhQUFhLEVBQUMsQ0FBQztBQUV0RSxNQUFNLE9BQU8saUJBQWlCO0lBRTFCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCOztRQUNuQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxHQUFHLFNBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsVUFBVSxDQUFDO1lBQzNELElBQUksR0FBRyxFQUFFO2dCQUNMLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7U0FDSjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxxQkFBcUI7O1FBQ3hCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLEdBQUcsU0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxNQUFNLENBQUM7WUFDdkQsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsT0FBTyxHQUFHLENBQUM7YUFDZDtTQUNKO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQjs7UUFDckIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksR0FBRyxTQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLFFBQVEsQ0FBQztZQUN2RCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQzdCLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQjs7UUFDdEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxJQUFJLE1BQU0sRUFBRTtZQUNSLE1BQU0sR0FBRyxTQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssQ0FBQztZQUN0RCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxPQUFPLEdBQUcsQ0FBQzthQUNkO1NBQ0o7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVTtRQUNiLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRSxJQUFJLE1BQU0sRUFBRTtZQUNSLE9BQU8sTUFBTSxDQUFDO1NBQ2pCO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGNBQWM7UUFDakIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQyxPQUFPLE1BQWdCLENBQUM7U0FDM0I7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxxQkFBcUI7O1FBQ3hCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3RCxJQUFJLE1BQU0sRUFBRTtZQUNSLE1BQU0sR0FBRyxTQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsMENBQUUsV0FBVyxDQUFDO1lBQ3JFLElBQUksR0FBRyxFQUFFO2dCQUNMLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7U0FDSjtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZ3JvQ29va2llVXRpbHMgfSBmcm9tIFwiLi9hZ3JvLWNvb2tpZS11dGlscy5jbGFzc1wiO1xyXG5pbXBvcnQgeyBBZ3JvT2JqZWN0VXRpbHMgfSBmcm9tIFwiLi9hZ3JvLW9iamVjdC11dGlscy5jbGFzc1wiO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gXCIuL2Fncm8tc3RyaW5nLXV0aWxzLmNsYXNzXCI7XHJcblxyXG5leHBvcnQge0Fncm9QbGF0Zm9ybVV0aWxzIGFzIEFQVSwgQWdyb1BsYXRmb3JtVXRpbHMgYXMgUGxhdGZvcm1VdGlsc307XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb1BsYXRmb3JtVXRpbHMge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIHRlbmFudCBhdHVhbFxyXG4gICAgICogQ2FzbyBjb250csOhcmlvLCByZXRvcm5hIHVtYSBpbnN0w6JuY2lhIGRlIEVycm9yXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudFRlbmFudCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nLCB0cnVlKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9PYmplY3RVdGlscy5mcm9tU3RyaW5nKGNvb2tpZSk/LnRlbmFudE5hbWU7XHJcbiAgICAgICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb29raWU6IFwiY29tLnNlbmlvci50b2tlblwiIG7Do28gZW5jb250cmFkby4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgbyBsb2NhbGUgZG8gdGVuYW50IGF0dWFsXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEN1cnJlblRlbmFudExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nLCB0cnVlKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9PYmplY3RVdGlscy5mcm9tU3RyaW5nKGNvb2tpZSk/LmxvY2FsZTtcclxuICAgICAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnRva2VuXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIHVzdcOhcmlvIGxvZ2Fkb1xyXG4gICAgICogQ2FzbyBjb250csOhcmlvLCByZXRvcm5hIHVtYSBpbnN0w6JuY2lhIGRlIEVycm9yXHJcbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgfHwgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudFVzZXJOYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nLCB0cnVlKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGxldCBzdHIgPSBBZ3JvT2JqZWN0VXRpbHMuZnJvbVN0cmluZyhjb29raWUpPy5mdWxsTmFtZTtcclxuICAgICAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcKy9nLCAnICcpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIGUtbWFpbCBkbyB1c3XDoXJpbyBsb2dhZG9cclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICogQHJldHVybnMgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRDdXJyZW50VXNlckVtYWlsKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nLCB0cnVlKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9PYmplY3RVdGlscy5mcm9tU3RyaW5nKGNvb2tpZSk/LmVtYWlsO1xyXG4gICAgICAgICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnRva2VuXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSB1bWEgc3RyaW5nIGNvbSBhIGJhc2VVUkwgYXR1YWxcclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICogQGV4YW1wbGUgXCJodHRwczovL2Nsb3VkLWxlYWYuc2VuaW9yLmNvbS5iclwiIHx8IFwiaHR0cHM6Ly9wbGF0Zm9ybS5zZW5pb3IuY29tLmJyXCJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJhc2VVUkwoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBjb29raWUgPSBBZ3JvQ29va2llVXRpbHMuZ2V0Q29va2llKCdjb20uc2VuaW9yLmJhc2UudXJsJyk7XHJcbiAgICAgICAgaWYgKGNvb2tpZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29va2llO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLmJhc2UudXJsXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSB1bWEgc3RyaW5nIGNvbSBhIFVSTCBkb3Mgc2VydmnDp29zXHJcbiAgICAgKiBDYXNvIGNvbnRyw6FyaW8sIHJldG9ybmEgdW1hIGluc3TDom5jaWEgZGUgRXJyb3JcclxuICAgICAqIEBleGFtcGxlIFwiaHR0cHM6Ly9jbG91ZC1sZWFmLnNlbmlvci5jb20uYnIvdC9zZW5pb3IuY29tLmJyL2JyaWRnZS8xLjAvXCJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldFNlcnZpY2VzVVJMKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgY29va2llID0gQWdyb0Nvb2tpZVV0aWxzLmdldENvb2tpZSgnY29tLnNlbmlvci5zZXJ2aWNlcy51cmwnKTtcclxuICAgICAgICBpZiAoU3RyaW5nVXRpbHMuaXNOb3RFbXB0eShjb29raWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb29raWUgYXMgc3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnNlcnZpY2VzLnVybFwiIG7Do28gZW5jb250cmFkby4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgdW1hIHN0cmluZyBjb20gbyB0b2tlbiBkZSBhY2Vzc28gYXR1YWxcclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudEFjY2Vzc1Rva2VuKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9Db29raWVVdGlscy5wYXJzZUNvb2tpZVRvT2JqZWN0KGNvb2tpZSk/LmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnRva2VuXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1wbGF0Zm9ybS11dGlscy5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tcGxhdGZvcm0tdXRpbHMuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEQsT0FBTyxFQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxpQkFBaUIsSUFBSSxhQUFhLEVBQUMsQ0FBQztBQUV0RSxNQUFNLE9BQU8saUJBQWlCO0lBRTFCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCOztRQUNuQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxHQUFHLFNBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsVUFBVSxDQUFDO1lBQzNELElBQUksR0FBRyxFQUFFO2dCQUNMLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7U0FDSjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxxQkFBcUI7O1FBQ3hCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLEdBQUcsU0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxNQUFNLENBQUM7WUFDdkQsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsT0FBTyxHQUFHLENBQUM7YUFDZDtTQUNKO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQjs7UUFDckIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdELElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxHQUFHLFNBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQywwQ0FBRSxRQUFRLENBQUM7WUFDbEUsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsT0FBTyxHQUFHLENBQUM7YUFDZDtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsbUJBQW1COztRQUN0QixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLEdBQUcsU0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssQ0FBQztZQUMvRCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxPQUFPLEdBQUcsQ0FBQzthQUNkO1NBQ0o7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVTtRQUNiLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRSxJQUFJLE1BQU0sRUFBRTtZQUNSLE9BQU8sTUFBTSxDQUFDO1NBQ2pCO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGNBQWM7UUFDakIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQyxPQUFPLE1BQWdCLENBQUM7U0FDM0I7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxxQkFBcUI7O1FBQ3hCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3RCxJQUFJLE1BQU0sRUFBRTtZQUNSLE1BQU0sR0FBRyxTQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsMENBQUUsV0FBVyxDQUFDO1lBQ3JFLElBQUksR0FBRyxFQUFFO2dCQUNMLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7U0FDSjtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZ3JvQ29va2llVXRpbHMgfSBmcm9tIFwiLi9hZ3JvLWNvb2tpZS11dGlscy5jbGFzc1wiO1xyXG5pbXBvcnQgeyBBZ3JvT2JqZWN0VXRpbHMgfSBmcm9tIFwiLi9hZ3JvLW9iamVjdC11dGlscy5jbGFzc1wiO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gXCIuL2Fncm8tc3RyaW5nLXV0aWxzLmNsYXNzXCI7XHJcblxyXG5leHBvcnQge0Fncm9QbGF0Zm9ybVV0aWxzIGFzIEFQVSwgQWdyb1BsYXRmb3JtVXRpbHMgYXMgUGxhdGZvcm1VdGlsc307XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb1BsYXRmb3JtVXRpbHMge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIHRlbmFudCBhdHVhbFxyXG4gICAgICogQ2FzbyBjb250csOhcmlvLCByZXRvcm5hIHVtYSBpbnN0w6JuY2lhIGRlIEVycm9yXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudFRlbmFudCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nLCB0cnVlKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9PYmplY3RVdGlscy5mcm9tU3RyaW5nKGNvb2tpZSk/LnRlbmFudE5hbWU7XHJcbiAgICAgICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb29raWU6IFwiY29tLnNlbmlvci50b2tlblwiIG7Do28gZW5jb250cmFkby4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgbyBsb2NhbGUgZG8gdGVuYW50IGF0dWFsXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEN1cnJlblRlbmFudExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nLCB0cnVlKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9PYmplY3RVdGlscy5mcm9tU3RyaW5nKGNvb2tpZSk/LmxvY2FsZTtcclxuICAgICAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnRva2VuXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIHVzdcOhcmlvIGxvZ2Fkb1xyXG4gICAgICogQ2FzbyBjb250csOhcmlvLCByZXRvcm5hIHVtYSBpbnN0w6JuY2lhIGRlIEVycm9yXHJcbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgfHwgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudFVzZXJOYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9Db29raWVVdGlscy5wYXJzZUNvb2tpZVRvT2JqZWN0KGNvb2tpZSk/LmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIGUtbWFpbCBkbyB1c3XDoXJpbyBsb2dhZG9cclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICogQHJldHVybnMgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRDdXJyZW50VXNlckVtYWlsKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9Db29raWVVdGlscy5wYXJzZUNvb2tpZVRvT2JqZWN0KGNvb2tpZSk/LmVtYWlsO1xyXG4gICAgICAgICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnRva2VuXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSB1bWEgc3RyaW5nIGNvbSBhIGJhc2VVUkwgYXR1YWxcclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICogQGV4YW1wbGUgXCJodHRwczovL2Nsb3VkLWxlYWYuc2VuaW9yLmNvbS5iclwiIHx8IFwiaHR0cHM6Ly9wbGF0Zm9ybS5zZW5pb3IuY29tLmJyXCJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJhc2VVUkwoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBjb29raWUgPSBBZ3JvQ29va2llVXRpbHMuZ2V0Q29va2llKCdjb20uc2VuaW9yLmJhc2UudXJsJyk7XHJcbiAgICAgICAgaWYgKGNvb2tpZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29va2llO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLmJhc2UudXJsXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSB1bWEgc3RyaW5nIGNvbSBhIFVSTCBkb3Mgc2VydmnDp29zXHJcbiAgICAgKiBDYXNvIGNvbnRyw6FyaW8sIHJldG9ybmEgdW1hIGluc3TDom5jaWEgZGUgRXJyb3JcclxuICAgICAqIEBleGFtcGxlIFwiaHR0cHM6Ly9jbG91ZC1sZWFmLnNlbmlvci5jb20uYnIvdC9zZW5pb3IuY29tLmJyL2JyaWRnZS8xLjAvXCJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldFNlcnZpY2VzVVJMKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgY29va2llID0gQWdyb0Nvb2tpZVV0aWxzLmdldENvb2tpZSgnY29tLnNlbmlvci5zZXJ2aWNlcy51cmwnKTtcclxuICAgICAgICBpZiAoU3RyaW5nVXRpbHMuaXNOb3RFbXB0eShjb29raWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb29raWUgYXMgc3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnNlcnZpY2VzLnVybFwiIG7Do28gZW5jb250cmFkby4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgdW1hIHN0cmluZyBjb20gbyB0b2tlbiBkZSBhY2Vzc28gYXR1YWxcclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudEFjY2Vzc1Rva2VuKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoJ2NvbS5zZW5pb3IudG9rZW4nKTtcclxuICAgICAgICBpZiAoY29va2llKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IEFncm9Db29raWVVdGlscy5wYXJzZUNvb2tpZVRvT2JqZWN0KGNvb2tpZSk/LmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nvb2tpZTogXCJjb20uc2VuaW9yLnRva2VuXCIgbsOjbyBlbmNvbnRyYWRvLicpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
@@ -39,14 +39,6 @@ export const AGRO_REGEX = {
39
39
  * Validação de Placa de Veículo
40
40
  */
41
41
  isLicensePlate: /^[A-Za-z0-9]{1,7}-?[A-Za-z0-9]{1,7}$/,
42
- /**
43
- * Validação de Placa de veículo padrão mercosul
44
- */
45
- isMercosulLicensePlate: /^[A-Z]{3}\d[A-Z]\d{2}$/,
46
- /**
47
- * Validação de Placa de veículo padrão antigo AAA-1234
48
- */
49
- isOldLicensePlate: /^[A-Z]{3}-?\d{4}$/,
50
42
  /**
51
43
  * Validação de Número de Telefone
52
44
  */
@@ -148,4 +140,4 @@ export const AGRO_REGEX = {
148
140
  */
149
141
  isAllDigitsEqual: /^(.)\1+$/,
150
142
  };
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1yZWdleC5jb25zdGFudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCOztPQUVHO0lBQ0gsT0FBTyxFQUFFLDRCQUE0QjtJQUVyQzs7T0FFRztJQUNILGVBQWUsRUFBRSxZQUFZO0lBRTdCOztPQUVHO0lBQ0gsZUFBZSxFQUFFLGFBQWE7SUFFOUI7O09BRUc7SUFDSCxlQUFlLEVBQUUsT0FBTztJQUV4Qjs7T0FFRztJQUNILE9BQU8sRUFBRSx1QkFBdUI7SUFFaEM7O09BRUc7SUFDSCxRQUFRLEVBQUUsV0FBVztJQUVyQjs7T0FFRztJQUNILE1BQU0sRUFBRSw0RkFBNEY7SUFFcEc7O09BRUc7SUFDSCxRQUFRLEVBQUUsU0FBUztJQUVuQjs7T0FFRztJQUNILFNBQVMsRUFBRSxhQUFhO0lBRXhCOztPQUVHO0lBQ0gsY0FBYyxFQUFFLHNDQUFzQztJQUV0RDs7T0FFRztJQUNILHNCQUFzQixFQUFFLHdCQUF3QjtJQUVoRDs7T0FFRztJQUNILGlCQUFpQixFQUFFLG1CQUFtQjtJQUV0Qzs7T0FFRztJQUNILGFBQWEsRUFBRSx3QkFBd0I7SUFFdkM7O09BRUc7SUFDSCxNQUFNLEVBQUUscUJBQXFCO0lBRTdCOztPQUVHO0lBQ0gsTUFBTSxFQUFFLDRCQUE0QjtJQUVwQzs7T0FFRztJQUNILFVBQVUsRUFBRSw4Q0FBOEM7SUFFMUQ7O09BRUc7SUFDSCxLQUFLLEVBQUUsd0RBQXdEO0lBRS9EOztPQUVHO0lBQ0gsV0FBVyxFQUFFLGdCQUFnQjtJQUU3Qjs7T0FFRztJQUNILFFBQVEsRUFBRSx3QkFBd0I7SUFFbEM7O09BRUc7SUFDSCxVQUFVLEVBQUUsWUFBWTtJQUV4Qjs7T0FFRztJQUNILGNBQWMsRUFBRSxnQkFBZ0I7SUFFaEM7O09BRUc7SUFDSCxNQUFNLEVBQUUsY0FBYztJQUV0Qjs7T0FFRztJQUNILFlBQVksRUFBRSwyQkFBMkI7SUFFekM7O09BRUc7SUFDSCxhQUFhLEVBQUUsZ0JBQWdCO0lBRS9COztPQUVHO0lBQ0gsVUFBVSxFQUFFLG1CQUFtQjtJQUUvQjs7T0FFRztJQUNILFlBQVksRUFBRSx5Q0FBeUM7SUFFdkQ7O09BRUc7SUFDSCxTQUFTLEVBQUUsMkNBQTJDO0lBRXREOztPQUVHO0lBQ0gsb0JBQW9CLEVBQUUsdUJBQXVCO0lBRTdDOztPQUVHO0lBQ0gsZ0JBQWdCLEVBQUUsc0VBQXNFO0lBRXhGOztPQUVHO0lBQ0gsWUFBWSxFQUFFLGFBQWE7SUFFM0I7O09BRUc7SUFDSCxZQUFZLEVBQUUsbUNBQW1DO0lBRWpEOztPQUVHO0lBQ0gsVUFBVSxFQUFFLHFDQUFxQztJQUVqRDs7T0FFRztJQUNILFdBQVcsRUFBRSxxREFBcUQ7SUFFbEU7O09BRUc7SUFDSCxZQUFZLEVBQUUsMkNBQTJDO0lBRXpEOztPQUVHO0lBQ0gsc0JBQXNCLEVBQUUsMEJBQTBCO0lBRWxEOztPQUVHO0lBQ0gsS0FBSyxFQUFFLHFCQUFxQjtJQUU1Qjs7T0FFRztJQUNILGdCQUFnQixFQUFFLFVBQVU7Q0FDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBR1JPX1JFR0VYID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBFLW1haWxcclxuICAgICAqL1xyXG4gICAgaXNFbWFpbDogL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvcyBJbnRlaXJvcyBQb3NpdGl2b3NcclxuICAgICAqL1xyXG4gICAgcG9zaXRpdmVJbnRlZ2VyOiAvXlsxLTldXFxkKiQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVyb3MgRGVjaW1haXMgUG9zaXRpdm9zXHJcbiAgICAgKi9cclxuICAgIHBvc2l0aXZlRGVjaW1hbDogL15cXGQqXFwuP1xcZCskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIHN0cmluZyBxdWUgY29uc2lzdGUgYXBlbmFzIGVtIGVzcGHDp29zIGVtIGJyYW5jbyBvdSBlc3TDoSB2YXppYS5cclxuICAgICAqL1xyXG4gICAgb25seUJsYW5rU3BhY2VzOiAvXlxccyokLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIENFUCAoQ8OzZGlnbyBQb3N0YWwpXHJcbiAgICAgKi9cclxuICAgIHppcENvZGU6IC9eXFxkezh9JHxeXFxkezV9LVxcZHszfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgU3RyaW5nIChxdWFscXVlciBjYXJhY3RlcmUpXHJcbiAgICAgKi9cclxuICAgIGlzU3RyaW5nOiAvXltcXHNcXFNdKiQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgVVVJRFxyXG4gICAgICovXHJcbiAgICBpc1VVSUQ6IC9eWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtNV1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVyb1xyXG4gICAgICovXHJcbiAgICBpc051bWJlcjogL14tP1xcZCskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm8gRGVjaW1hbFxyXG4gICAgICovXHJcbiAgICBpc0RlY2ltYWw6IC9eXFxkKlxcLj9cXGQrJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBQbGFjYSBkZSBWZcOtY3Vsb1xyXG4gICAgICovXHJcbiAgICBpc0xpY2Vuc2VQbGF0ZTogL15bQS1aYS16MC05XXsxLDd9LT9bQS1aYS16MC05XXsxLDd9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBQbGFjYSBkZSB2ZcOtY3VsbyBwYWRyw6NvIG1lcmNvc3VsXHJcbiAgICAgKi9cclxuICAgIGlzTWVyY29zdWxMaWNlbnNlUGxhdGU6IC9eW0EtWl17M31cXGRbQS1aXVxcZHsyfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgUGxhY2EgZGUgdmXDrWN1bG8gcGFkcsOjbyBhbnRpZ28gQUFBLTEyMzRcclxuICAgICAqL1xyXG4gICAgaXNPbGRMaWNlbnNlUGxhdGU6IC9eW0EtWl17M30tP1xcZHs0fSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVybyBkZSBUZWxlZm9uZVxyXG4gICAgICovXHJcbiAgICBpc1Bob25lTnVtYmVyOiAvXlxcKz9cXGR7MSw0fS0/XFxkezYsMTF9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBEYXRhIChGb3JtYXRvIFlZWVktTU0tREQpXHJcbiAgICAgKi9cclxuICAgIGlzRGF0ZTogL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgSG9yYSAoRm9ybWF0byBISDptbSlcclxuICAgICAqL1xyXG4gICAgaXNUaW1lOiAvXigwXFxkfDFcXGR8MlswLTNdKTpbMC01XVxcZCQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgRGF0YSBlIEhvcmEgKEZvcm1hdG8gWVlZWS1NTS1ERCBISDptbSlcclxuICAgICAqL1xyXG4gICAgaXNEYXRlVGltZTogL15cXGR7NH0tXFxkezJ9LVxcZHsyfSAoMFxcZHwxXFxkfDJbMC0zXSk6WzAtNV1cXGQkLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIFVSTFxyXG4gICAgICovXHJcbiAgICBpc1VSTDogL14oaHR0cHxodHRwcyk6XFwvXFwvKFtcXHctXStcXC4pK1tcXHctXSsoXFwvW1xcdy0gLi8/JSY9XSopPyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVybyBIZXhhZGVjaW1hbFxyXG4gICAgICovXHJcbiAgICBpc0hleE51bWJlcjogL15bMC05YS1mQS1GXSskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIEJhc2U2NFxyXG4gICAgICovXHJcbiAgICBpc0Jhc2U2NDogL15bYS16QS1aMC05Ky9dKz17MCwyfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTm9tZSBkZSBVc3XDoXJpbyAoMyBhIDIwIGNhcmFjdGVyZXMgYWxmYW51bcOpcmljb3MpXHJcbiAgICAgKi9cclxuICAgIGlzVXNlcm5hbWU6IC9eXFx3ezMsMjB9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBBbGZhbnVtw6lyaWNvXHJcbiAgICAgKi9cclxuICAgIGlzQWxwaGFudW1lcmljOiAvXlthLXpBLVowLTldKyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgU2x1ZyAobGV0cmFzIG1pbsO6c2N1bGFzLCBuw7ptZXJvcyBlIHRyYcOnb3MpXHJcbiAgICAgKi9cclxuICAgIGlzU2x1ZzogL15bYS16MC05LV0rJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvIGRlIENhcnTDo28gZGUgQ3LDqWRpdG9cclxuICAgICAqL1xyXG4gICAgaXNDcmVkaXRDYXJkOiAvXlxcZHs0fS1cXGR7NH0tXFxkezR9LVxcZHs0fSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVybyBIZXhhZGVjaW1hbFxyXG4gICAgICovXHJcbiAgICBpc0hleGFkZWNpbWFsOiAvXlswLTlhLWZBLUZdKyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTW9lZGFcclxuICAgICAqL1xyXG4gICAgaXNDdXJyZW5jeTogL15cXGQrKFxcLlxcZHsxLDJ9KT8kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIFBvcmNlbnRhZ2VtXHJcbiAgICAgKi9cclxuICAgIGlzUGVyY2VudGFnZTogL14oMTAwKFxcLjB7MSwyfSk/fFsxLTldP1xcZChcXC5cXGR7MSwyfSk/KSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgVGFnIEhUTUwgU2ltcGxlc1xyXG4gICAgICovXHJcbiAgICBpc0hUTUxUYWc6IC9ePChbYS16XSspKFtePF0rKSooPzo+KC4qKTxcXC9cXDE+fFxccytcXC8+KSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTm9tZSBkZSBVc3XDoXJpbyBjb20gRXNwYcOnb3MgKDMgYSAyMCBjYXJhY3RlcmVzIGFsZmFudW3DqXJpY29zIGUgZXNwYcOnb3MpXHJcbiAgICAgKi9cclxuICAgIGlzVXNlcm5hbWVXaXRoU3BhY2VzOiAvXlthLXpBLVowLTlfIF17MywyMH0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIFNlbmhhIEZvcnRlIChtw61uaW1vIDggY2FyYWN0ZXJlcywgdW1hIGxldHJhIG1pbsO6c2N1bGEsIHVtYSBsZXRyYSBtYWnDunNjdWxhLCB1bSBuw7ptZXJvIGUgdW0gY2FyYWN0ZXJlIGVzcGVjaWFsKVxyXG4gICAgICovXHJcbiAgICBpc1N0cm9uZ1Bhc3N3b3JkOiAvXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlxcZCkoPz0uKltAJCElKj8mXSlbQS1aYS16XFxkQCQhJSo/Jl17OCx9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBTdHJpbmcgQWxmYWLDqXRpY2FcclxuICAgICAqL1xyXG4gICAgaXNBbHBoYWJldGljOiAvXlthLXpBLVpdKyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgSG9yYSBubyBGb3JtYXRvIGRlIDEyIEhvcmFzXHJcbiAgICAgKi9cclxuICAgIGlzVGltZTEySG91cjogL14oMD9bMS05XXwxWzAtMl0pOlxcZHsyfSAoQU18UE0pJC9pLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTGF0aXR1ZGVcclxuICAgICAqL1xyXG4gICAgaXNMYXRpdHVkZTogL15bLStdPyhbMS04XT9cXGQoXFwuXFxkKyk/fDkwKFxcLjArKT8pJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBMb25naXR1ZGVcclxuICAgICAqL1xyXG4gICAgaXNMb25naXR1ZGU6IC9eWy0rXT8oMTgwKFxcLjArKT98KCgxWzAtN11cXGQpfChbMS05XT9cXGQpKShcXC5cXGQrKT8pJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBFbmRlcmXDp28gTUFDXHJcbiAgICAgKi9cclxuICAgIGlzTUFDQWRkcmVzczogL14oWzAtOUEtRmEtZl17Mn1bOi1dKXs1fShbMC05QS1GYS1mXXsyfSkkLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIERhdGEgZGUgRXhwaXJhw6fDo28gZGUgQ2FydMOjbyBkZSBDcsOpZGl0b1xyXG4gICAgICovXHJcbiAgICBpc0NyZWRpdENhcmRFeHBpcmF0aW9uOiAvXigwWzEtOV18MVswLTJdKVxcL1xcZHsyfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVybyBkZSBTZWd1cm8gU29jaWFsIChTU04pXHJcbiAgICAgKi9cclxuICAgIGlzU1NOOiAvXlxcZHszfS1cXGR7Mn0tXFxkezR9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpc1xyXG4gICAgICovXHJcbiAgICBpc0FsbERpZ2l0c0VxdWFsOiAvXiguKVxcMSskLyxcclxuICB9O1xyXG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1yZWdleC5jb25zdGFudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCOztPQUVHO0lBQ0gsT0FBTyxFQUFFLDRCQUE0QjtJQUVyQzs7T0FFRztJQUNILGVBQWUsRUFBRSxZQUFZO0lBRTdCOztPQUVHO0lBQ0gsZUFBZSxFQUFFLGFBQWE7SUFFOUI7O09BRUc7SUFDSCxlQUFlLEVBQUUsT0FBTztJQUV4Qjs7T0FFRztJQUNILE9BQU8sRUFBRSx1QkFBdUI7SUFFaEM7O09BRUc7SUFDSCxRQUFRLEVBQUUsV0FBVztJQUVyQjs7T0FFRztJQUNILE1BQU0sRUFBRSw0RkFBNEY7SUFFcEc7O09BRUc7SUFDSCxRQUFRLEVBQUUsU0FBUztJQUVuQjs7T0FFRztJQUNILFNBQVMsRUFBRSxhQUFhO0lBRXhCOztPQUVHO0lBQ0gsY0FBYyxFQUFFLHNDQUFzQztJQUV0RDs7T0FFRztJQUNILGFBQWEsRUFBRSx3QkFBd0I7SUFFdkM7O09BRUc7SUFDSCxNQUFNLEVBQUUscUJBQXFCO0lBRTdCOztPQUVHO0lBQ0gsTUFBTSxFQUFFLDRCQUE0QjtJQUVwQzs7T0FFRztJQUNILFVBQVUsRUFBRSw4Q0FBOEM7SUFFMUQ7O09BRUc7SUFDSCxLQUFLLEVBQUUsd0RBQXdEO0lBRS9EOztPQUVHO0lBQ0gsV0FBVyxFQUFFLGdCQUFnQjtJQUU3Qjs7T0FFRztJQUNILFFBQVEsRUFBRSx3QkFBd0I7SUFFbEM7O09BRUc7SUFDSCxVQUFVLEVBQUUsWUFBWTtJQUV4Qjs7T0FFRztJQUNILGNBQWMsRUFBRSxnQkFBZ0I7SUFFaEM7O09BRUc7SUFDSCxNQUFNLEVBQUUsY0FBYztJQUV0Qjs7T0FFRztJQUNILFlBQVksRUFBRSwyQkFBMkI7SUFFekM7O09BRUc7SUFDSCxhQUFhLEVBQUUsZ0JBQWdCO0lBRS9COztPQUVHO0lBQ0gsVUFBVSxFQUFFLG1CQUFtQjtJQUUvQjs7T0FFRztJQUNILFlBQVksRUFBRSx5Q0FBeUM7SUFFdkQ7O09BRUc7SUFDSCxTQUFTLEVBQUUsMkNBQTJDO0lBRXREOztPQUVHO0lBQ0gsb0JBQW9CLEVBQUUsdUJBQXVCO0lBRTdDOztPQUVHO0lBQ0gsZ0JBQWdCLEVBQUUsc0VBQXNFO0lBRXhGOztPQUVHO0lBQ0gsWUFBWSxFQUFFLGFBQWE7SUFFM0I7O09BRUc7SUFDSCxZQUFZLEVBQUUsbUNBQW1DO0lBRWpEOztPQUVHO0lBQ0gsVUFBVSxFQUFFLHFDQUFxQztJQUVqRDs7T0FFRztJQUNILFdBQVcsRUFBRSxxREFBcUQ7SUFFbEU7O09BRUc7SUFDSCxZQUFZLEVBQUUsMkNBQTJDO0lBRXpEOztPQUVHO0lBQ0gsc0JBQXNCLEVBQUUsMEJBQTBCO0lBRWxEOztPQUVHO0lBQ0gsS0FBSyxFQUFFLHFCQUFxQjtJQUU1Qjs7T0FFRztJQUNILGdCQUFnQixFQUFFLFVBQVU7Q0FDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBR1JPX1JFR0VYID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBFLW1haWxcclxuICAgICAqL1xyXG4gICAgaXNFbWFpbDogL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvcyBJbnRlaXJvcyBQb3NpdGl2b3NcclxuICAgICAqL1xyXG4gICAgcG9zaXRpdmVJbnRlZ2VyOiAvXlsxLTldXFxkKiQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVyb3MgRGVjaW1haXMgUG9zaXRpdm9zXHJcbiAgICAgKi9cclxuICAgIHBvc2l0aXZlRGVjaW1hbDogL15cXGQqXFwuP1xcZCskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIHN0cmluZyBxdWUgY29uc2lzdGUgYXBlbmFzIGVtIGVzcGHDp29zIGVtIGJyYW5jbyBvdSBlc3TDoSB2YXppYS5cclxuICAgICAqL1xyXG4gICAgb25seUJsYW5rU3BhY2VzOiAvXlxccyokLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIENFUCAoQ8OzZGlnbyBQb3N0YWwpXHJcbiAgICAgKi9cclxuICAgIHppcENvZGU6IC9eXFxkezh9JHxeXFxkezV9LVxcZHszfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgU3RyaW5nIChxdWFscXVlciBjYXJhY3RlcmUpXHJcbiAgICAgKi9cclxuICAgIGlzU3RyaW5nOiAvXltcXHNcXFNdKiQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgVVVJRFxyXG4gICAgICovXHJcbiAgICBpc1VVSUQ6IC9eWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtNV1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVyb1xyXG4gICAgICovXHJcbiAgICBpc051bWJlcjogL14tP1xcZCskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm8gRGVjaW1hbFxyXG4gICAgICovXHJcbiAgICBpc0RlY2ltYWw6IC9eXFxkKlxcLj9cXGQrJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBQbGFjYSBkZSBWZcOtY3Vsb1xyXG4gICAgICovXHJcbiAgICBpc0xpY2Vuc2VQbGF0ZTogL15bQS1aYS16MC05XXsxLDd9LT9bQS1aYS16MC05XXsxLDd9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvIGRlIFRlbGVmb25lXHJcbiAgICAgKi9cclxuICAgIGlzUGhvbmVOdW1iZXI6IC9eXFwrP1xcZHsxLDR9LT9cXGR7NiwxMX0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIERhdGEgKEZvcm1hdG8gWVlZWS1NTS1ERClcclxuICAgICAqL1xyXG4gICAgaXNEYXRlOiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBIb3JhIChGb3JtYXRvIEhIOm1tKVxyXG4gICAgICovXHJcbiAgICBpc1RpbWU6IC9eKDBcXGR8MVxcZHwyWzAtM10pOlswLTVdXFxkJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBEYXRhIGUgSG9yYSAoRm9ybWF0byBZWVlZLU1NLUREIEhIOm1tKVxyXG4gICAgICovXHJcbiAgICBpc0RhdGVUaW1lOiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9ICgwXFxkfDFcXGR8MlswLTNdKTpbMC01XVxcZCQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgVVJMXHJcbiAgICAgKi9cclxuICAgIGlzVVJMOiAvXihodHRwfGh0dHBzKTpcXC9cXC8oW1xcdy1dK1xcLikrW1xcdy1dKyhcXC9bXFx3LSAuLz8lJj1dKik/JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvIEhleGFkZWNpbWFsXHJcbiAgICAgKi9cclxuICAgIGlzSGV4TnVtYmVyOiAvXlswLTlhLWZBLUZdKyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgQmFzZTY0XHJcbiAgICAgKi9cclxuICAgIGlzQmFzZTY0OiAvXlthLXpBLVowLTkrL10rPXswLDJ9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOb21lIGRlIFVzdcOhcmlvICgzIGEgMjAgY2FyYWN0ZXJlcyBhbGZhbnVtw6lyaWNvcylcclxuICAgICAqL1xyXG4gICAgaXNVc2VybmFtZTogL15cXHd7MywyMH0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIEFsZmFudW3DqXJpY29cclxuICAgICAqL1xyXG4gICAgaXNBbHBoYW51bWVyaWM6IC9eW2EtekEtWjAtOV0rJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBTbHVnIChsZXRyYXMgbWluw7pzY3VsYXMsIG7Dum1lcm9zIGUgdHJhw6dvcylcclxuICAgICAqL1xyXG4gICAgaXNTbHVnOiAvXlthLXowLTktXSskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm8gZGUgQ2FydMOjbyBkZSBDcsOpZGl0b1xyXG4gICAgICovXHJcbiAgICBpc0NyZWRpdENhcmQ6IC9eXFxkezR9LVxcZHs0fS1cXGR7NH0tXFxkezR9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvIEhleGFkZWNpbWFsXHJcbiAgICAgKi9cclxuICAgIGlzSGV4YWRlY2ltYWw6IC9eWzAtOWEtZkEtRl0rJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBNb2VkYVxyXG4gICAgICovXHJcbiAgICBpc0N1cnJlbmN5OiAvXlxcZCsoXFwuXFxkezEsMn0pPyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgUG9yY2VudGFnZW1cclxuICAgICAqL1xyXG4gICAgaXNQZXJjZW50YWdlOiAvXigxMDAoXFwuMHsxLDJ9KT98WzEtOV0/XFxkKFxcLlxcZHsxLDJ9KT8pJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBUYWcgSFRNTCBTaW1wbGVzXHJcbiAgICAgKi9cclxuICAgIGlzSFRNTFRhZzogL148KFthLXpdKykoW148XSspKig/Oj4oLiopPFxcL1xcMT58XFxzK1xcLz4pJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOb21lIGRlIFVzdcOhcmlvIGNvbSBFc3Bhw6dvcyAoMyBhIDIwIGNhcmFjdGVyZXMgYWxmYW51bcOpcmljb3MgZSBlc3Bhw6dvcylcclxuICAgICAqL1xyXG4gICAgaXNVc2VybmFtZVdpdGhTcGFjZXM6IC9eW2EtekEtWjAtOV8gXXszLDIwfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgU2VuaGEgRm9ydGUgKG3DrW5pbW8gOCBjYXJhY3RlcmVzLCB1bWEgbGV0cmEgbWluw7pzY3VsYSwgdW1hIGxldHJhIG1hacO6c2N1bGEsIHVtIG7Dum1lcm8gZSB1bSBjYXJhY3RlcmUgZXNwZWNpYWwpXHJcbiAgICAgKi9cclxuICAgIGlzU3Ryb25nUGFzc3dvcmQ6IC9eKD89LipbYS16XSkoPz0uKltBLVpdKSg/PS4qXFxkKSg/PS4qW0AkISUqPyZdKVtBLVphLXpcXGRAJCElKj8mXXs4LH0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIFN0cmluZyBBbGZhYsOpdGljYVxyXG4gICAgICovXHJcbiAgICBpc0FscGhhYmV0aWM6IC9eW2EtekEtWl0rJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBIb3JhIG5vIEZvcm1hdG8gZGUgMTIgSG9yYXNcclxuICAgICAqL1xyXG4gICAgaXNUaW1lMTJIb3VyOiAvXigwP1sxLTldfDFbMC0yXSk6XFxkezJ9IChBTXxQTSkkL2ksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBMYXRpdHVkZVxyXG4gICAgICovXHJcbiAgICBpc0xhdGl0dWRlOiAvXlstK10/KFsxLThdP1xcZChcXC5cXGQrKT98OTAoXFwuMCspPykkLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIExvbmdpdHVkZVxyXG4gICAgICovXHJcbiAgICBpc0xvbmdpdHVkZTogL15bLStdPygxODAoXFwuMCspP3woKDFbMC03XVxcZCl8KFsxLTldP1xcZCkpKFxcLlxcZCspPykkLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIEVuZGVyZcOnbyBNQUNcclxuICAgICAqL1xyXG4gICAgaXNNQUNBZGRyZXNzOiAvXihbMC05QS1GYS1mXXsyfVs6LV0pezV9KFswLTlBLUZhLWZdezJ9KSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgRGF0YSBkZSBFeHBpcmHDp8OjbyBkZSBDYXJ0w6NvIGRlIENyw6lkaXRvXHJcbiAgICAgKi9cclxuICAgIGlzQ3JlZGl0Q2FyZEV4cGlyYXRpb246IC9eKDBbMS05XXwxWzAtMl0pXFwvXFxkezJ9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvIGRlIFNlZ3VybyBTb2NpYWwgKFNTTilcclxuICAgICAqL1xyXG4gICAgaXNTU046IC9eXFxkezN9LVxcZHsyfS1cXGR7NH0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIHNlIHRvZG9zIG9zIGTDrWdpdG9zIHPDo28gaWd1YWlzXHJcbiAgICAgKi9cclxuICAgIGlzQWxsRGlnaXRzRXF1YWw6IC9eKC4pXFwxKyQvLFxyXG4gIH07XHJcbiJdfQ==
@@ -251,31 +251,70 @@ export class AgroStringUtils {
251
251
  return matches ? matches.length : AGRO_NUMBERS.ZERO;
252
252
  }
253
253
  static validateCPF(cpf) {
254
+ // Remover caracteres não numéricos
254
255
  cpf = cpf.replace(/\D/g, "");
255
- if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) {
256
+ // Verificar se o CPF tem 11 dígitos
257
+ if (cpf.length !== AGRO_NUMBERS.ELEVEN) {
256
258
  return false;
257
259
  }
258
- const calcCheckDigit = (length) => {
259
- let sum = 0;
260
- for (let i = 0; i < length; i++) {
261
- sum += Number(cpf[i]) * (length + 1 - i);
262
- }
263
- let remainder = sum % 11;
264
- return remainder < 2 ? 0 : 11 - remainder;
265
- };
266
- return calcCheckDigit(9) === Number(cpf[9]) && calcCheckDigit(10) === Number(cpf[10]);
260
+ // Verificar se todos os dígitos são iguais (caso contrário, é um sinal de CPF inválido)
261
+ if (/^(\d)\1{10}$/.test(cpf)) {
262
+ return false;
263
+ }
264
+ // Calcular o primeiro dígito verificador
265
+ let sum = AGRO_NUMBERS.ZERO;
266
+ let remainder;
267
+ for (let i = AGRO_NUMBERS.ONE; i <= AGRO_NUMBERS.NINE; i++) {
268
+ sum += parseInt(cpf[i - AGRO_NUMBERS.ONE]) * (AGRO_NUMBERS.ELEVEN - i);
269
+ }
270
+ remainder = sum % AGRO_NUMBERS.ELEVEN;
271
+ if (remainder === AGRO_NUMBERS.TEN || remainder === AGRO_NUMBERS.ELEVEN) {
272
+ remainder = AGRO_NUMBERS.ZERO;
273
+ }
274
+ if (remainder !== parseInt(cpf[AGRO_NUMBERS.NINE])) {
275
+ return false;
276
+ }
277
+ // Calcular o segundo dígito verificador
278
+ sum = AGRO_NUMBERS.ZERO;
279
+ for (let i = AGRO_NUMBERS.ONE; i <= AGRO_NUMBERS.TEN; i++) {
280
+ sum += parseInt(cpf[i - AGRO_NUMBERS.ONE]) * (AGRO_NUMBERS.TWELVE - i);
281
+ }
282
+ remainder = sum % AGRO_NUMBERS.ELEVEN;
283
+ if (remainder === AGRO_NUMBERS.TEN || remainder === AGRO_NUMBERS.ELEVEN) {
284
+ remainder = AGRO_NUMBERS.ZERO;
285
+ }
286
+ if (remainder !== parseInt(cpf[AGRO_NUMBERS.TEN])) {
287
+ return false;
288
+ }
289
+ return true;
267
290
  }
268
291
  static validateCNPJ(cnpj) {
292
+ // Remove todos os caracteres não numéricos
269
293
  cnpj = cnpj.replace(/\D/g, "");
270
- if (cnpj.length !== 14 || /^(\d)\1{13}$/.test(cnpj))
294
+ // Verifica se tem 14 dígitos
295
+ if (cnpj.length !== 14)
296
+ return false;
297
+ // Verifica se o CNPJ é uma sequência repetida (ex: 11111111111111, 22222222222222, etc.)
298
+ if (/^(\d)\1{13}$/.test(cnpj))
271
299
  return false;
272
- const calcularDigito = (length) => {
273
- const pesos = length === 12 ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
274
- const soma = pesos.reduce((acc, peso, i) => acc + Number(cnpj[i]) * peso, 0);
275
- const resto = soma % 11;
276
- return resto < 2 ? 0 : 11 - resto;
277
- };
278
- return calcularDigito(12) === Number(cnpj[12]) && calcularDigito(13) === Number(cnpj[13]);
300
+ // Cálculo do primeiro dígito verificador
301
+ let soma = 0;
302
+ let pesos1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
303
+ for (let i = 0; i < 12; i++) {
304
+ soma += parseInt(cnpj.charAt(i)) * pesos1[i];
305
+ }
306
+ let resto = soma % 11;
307
+ let digito1 = resto < 2 ? 0 : 11 - resto;
308
+ // Cálculo do segundo dígito verificador
309
+ soma = 0;
310
+ let pesos2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
311
+ for (let i = 0; i < 13; i++) {
312
+ soma += parseInt(cnpj.charAt(i)) * pesos2[i];
313
+ }
314
+ resto = soma % 11;
315
+ let digito2 = resto < 2 ? 0 : 11 - resto;
316
+ // Verifica se os dígitos verificadores são válidos
317
+ return parseInt(cnpj.charAt(12)) === digito1 && parseInt(cnpj.charAt(13)) === digito2;
279
318
  }
280
319
  /**
281
320
  * Método para aplicar uma máscara em uma string. Considere a máscara com valores 9 para aplicação
@@ -324,24 +363,5 @@ export class AgroStringUtils {
324
363
  static isInvalid(str) {
325
364
  return !AgroStringUtils.isValid(str);
326
365
  }
327
- /**
328
- * Valida se uma string é um e-mail válido ou não
329
- * Retorna um booleano para indicar se é um e-mail válido ou não
330
- * @param email - A string a ser verificada
331
- * @returns True se a string for um e-mail válido, false caso contrário
332
- */
333
- static isValidEmail(email) {
334
- return AGRO_REGEX.isEmail.test(email);
335
- }
336
- /**
337
- * Valida se uma string é uma placa de veículo BR válida ou não.
338
- * Retorna um booleano para indicar se é uma placa válida ou não.
339
- * @param plate - A string a ser verificada
340
- */
341
- static isValidLicensePlate(plate) {
342
- const oldFormat = /^[A-Z]{3}-?\d{4}$/;
343
- const mercosulFormat = /^[A-Z]{3}\d[A-Z]\d{2}$/;
344
- return oldFormat.test(plate) || mercosulFormat.test(plate);
345
- }
346
366
  }
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBRzFDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDeEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7O1FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsSUFBSSxFQUFFLDBDQUFFLE1BQU0sTUFBSyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7UUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBbUI7UUFDakMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENB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RUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0csTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLENBQUMsQ0FBQztRQUVGLE9BQU8sY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDOUIsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDeEIsTUFBTTthQUNUO1lBQ0QsSUFBSSxRQUFRLEtBQUssR0FBRyxFQUFFO2dCQUNsQixXQUFXLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0gsV0FBVyxJQUFJLFFBQVEsQ0FBQzthQUMzQjtTQUNKO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQW1CO1FBQzlCLElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDNUMsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFtQjtRQUNoQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDO1FBQ2hELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFHUk9fTlVNQkVSUyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbi8qKlxyXG4gKiBDbGFzc2UgdXRpbGl0w6FyaWEgcGFyYSBvcGVyYcOnw7VlcyBkZSBzdHJpbmcuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWdyb1N0cmluZ1V0aWxzIHtcclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyBlc3TDoSB2YXppYSBvdSBjb25zaXN0ZSBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBlc3RpdmVyIHZhemlhIG91IGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgc3RyLnRyaW0oKT8ubGVuZ3RoID09PSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYSBlIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhIGUgbsOjbyBjb25zaXN0aXIgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzRW1wdHkoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgZXN0w6EgdmF6aWEsIGNvbnNpc3RlIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZXN0aXZlciB2YXppYSwgY29uc2lzdGlyIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IGZvciBudWxhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0JsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ciB8fCBBR1JPX1JFR0VYLm9ubHlCbGFua1NwYWNlcy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIG7Do28gZXN0w6EgdmF6aWEsIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28gZSBuw6NvIMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhLCBuw6NvIGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBlIG7Do28gZm9yIG51bGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90Qmxhbmsoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzQmxhbmsoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBvcyBlc3Bhw6dvcyBlbSBicmFuY28gZGUgdW1hIHN0cmluZyBlIHJldG9ybmEgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEsIGNhc28gY29udHLDoXJpbyByZXRvcm5hIGEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgcmVtb3ZpZG9zIG9zIGVzcGHDp29zIGVtIGJyYW5jby5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28gb3UgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0cmltVG9OdWxsKHN0cjogTnVsbGFibGVTdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIHRyaW1tZWQgPT09IFwiXCIgPyBudWxsIDogdHJpbW1lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcywgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMSAtIEEgcHJpbWVpcmEgc3RyaW5nIGEgc2VyIGNvbXBhcmFkYS5cclxuICAgICAqIEBwYXJhbSBzdHIyIC0gQSBzZWd1bmRhIHN0cmluZyBhIHNlciBjb21wYXJhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGFzIHN0cmluZ3MgZm9yZW0gaWd1YWlzLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXF1YWxzSWdub3JlQ2FzZShzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMT8udG9Mb3dlckNhc2UoKSA9PT0gc3RyMj8udG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFscyhzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMSA9PT0gc3RyMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydGUgb3MgY2FyYWN0ZXJlcyBkZSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGludmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGludmVydGlkYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBlLW1haWwuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBlLW1haWwsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2by5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2bywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1Bvc2l0aXZlRGVjaW1hbChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLnBvc2l0aXZlRGVjaW1hbC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBDRVAgKEPDs2RpZ28gUG9zdGFsKS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIENFUCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNaaXBDb2RlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguemlwQ29kZS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBVVUlELlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gVVVJRCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBuw7ptZXJvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc051bWJlcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzTnVtYmVyLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGRpZmZlcmVuY2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGxlbjEgPSBzdHIxLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBsZW4yID0gc3RyMi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGRpZmYgPSBNYXRoLmFicyhsZW4xIC0gbGVuMik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgTWF0aC5taW4obGVuMSwgbGVuMik7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaWZmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmVuZHNXaXRoKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEuc3RhcnRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgY29udMOpbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjb250YWlucyhzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmluY2x1ZGVzKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoSWdub3JlQ2FzZShzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb252ZXJ0aWRhIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9VcHBlckNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnZlcnRpZGEgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b0xvd2VyQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0ZSBvIGNhc28gZGFzIGxldHJhcyBlbSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb20gbyBjYXNvIGRhcyBsZXRyYXMgaW52ZXJ0aWRvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IGNoYXIudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzd2FwcGVkICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3dhcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1hacO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1hacO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdChBR1JPX05VTUJFUlMuWkVSTykudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1pbsO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1pbsO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB1bmNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGEgbyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkZSB1bWEgc3Vic3RyaW5nIGVtIHVtYSBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgb25kZSBhIGNvbnRhZ2VtIHNlcsOhIHJlYWxpemFkYS5cclxuICAgICAqIEBwYXJhbSBzdWJzdHJpbmcgLSBBIHN1YnN0cmluZyBhIHNlciBjb250YWRhLlxyXG4gICAgICogQHJldHVybnMgTyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkYSBzdWJzdHJpbmcgbmEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY291bnRNYXRjaGVzKHN0cjogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHN1YnN0cmluZywgXCJnXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcclxuICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzLmxlbmd0aCA6IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNwZiA9IGNwZi5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIGlmIChjcGYubGVuZ3RoICE9PSAxMSB8fCAvXihcXGQpXFwxezEwfSQvLnRlc3QoY3BmKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjYWxjQ2hlY2tEaWdpdCA9IChsZW5ndGg6IG51bWJlcik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gTnVtYmVyKGNwZltpXSkgKiAobGVuZ3RoICsgMSAtIGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZW1haW5kZXIgPSBzdW0gJSAxMTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA8IDIgPyAwIDogMTEgLSByZW1haW5kZXI7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbGNDaGVja0RpZ2l0KDkpID09PSBOdW1iZXIoY3BmWzldKSAmJiBjYWxjQ2hlY2tEaWdpdCgxMCkgPT09IE51bWJlcihjcGZbMTBdKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgdmFsaWRhdGVDTlBKKGNucGo6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCB8fCAvXihcXGQpXFwxezEzfSQvLnRlc3QoY25waikpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FsY3VsYXJEaWdpdG8gPSAobGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwZXNvcyA9IGxlbmd0aCA9PT0gMTIgPyBbNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl0gOiBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzb21hID0gcGVzb3MucmVkdWNlKChhY2MsIHBlc28sIGkpID0+IGFjYyArIE51bWJlcihjbnBqW2ldKSAqIHBlc28sIDApO1xyXG4gICAgICAgICAgICBjb25zdCByZXN0byA9IHNvbWEgJSAxMTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3RvIDwgMiA/IDAgOiAxMSAtIHJlc3RvO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBjYWxjdWxhckRpZ2l0bygxMikgPT09IE51bWJlcihjbnBqWzEyXSkgJiYgY2FsY3VsYXJEaWdpdG8oMTMpID09PSBOdW1iZXIoY25walsxM10pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTcOpdG9kbyBwYXJhIGFwbGljYXIgdW1hIG3DoXNjYXJhIGVtIHVtYSBzdHJpbmcuIENvbnNpZGVyZSBhIG3DoXNjYXJhIGNvbSB2YWxvcmVzIDkgcGFyYSBhcGxpY2HDp8Ojb1xyXG4gICAgICogQGV4YW1wbGUgQWdyb1N0cmluZ1V0aWxzLmFwcGx5TWFzaygnMTIzNDU2Nzg5MDEnLCAnOTk5Ljk5OS45OTktOTknKSA9PiAnMTIzLjQ1Ni43ODktMDEnXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqIEBwYXJhbSBtYXNrXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwbHlNYXNrKHZhbHVlOiBzdHJpbmcsIG1hc2s6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVDaGFycyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCJcIik7XHJcbiAgICAgICAgY29uc3QgbWFza0NoYXJzID0gbWFzay5zcGxpdChcIlwiKTtcclxuICAgICAgICBsZXQgbWFza2VkVmFsdWUgPSBcIlwiO1xyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBtYXNrQ2hhciBvZiBtYXNrQ2hhcnMpIHtcclxuICAgICAgICAgICAgaWYgKGogPj0gdmFsdWVDaGFycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXNrQ2hhciA9PT0gXCI5XCIpIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IHZhbHVlQ2hhcnNbaisrXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IG1hc2tDaGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWFza2VkVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIMOpIHbDoWxpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZm9yIHbDoWxpZGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzVmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RyID09PSBcInVuZGVmaW5lZFwiIHx8IHN0ciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQWdyb1N0cmluZ1V0aWxzLmlzTm90RW1wdHkoc3RyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyDDqSBpbnbDoWxpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZm9yIGludsOhbGlkYSwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNJbnZhbGlkKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIUFncm9TdHJpbmdVdGlscy5pc1ZhbGlkKHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgc2UgdW1hIHN0cmluZyDDqSB1bSBlLW1haWwgdsOhbGlkbyBvdSBuw6NvXHJcbiAgICAgKiBSZXRvcm5hIHVtIGJvb2xlYW5vIHBhcmEgaW5kaWNhciBzZSDDqSB1bSBlLW1haWwgdsOhbGlkbyBvdSBuw6NvXHJcbiAgICAgKiBAcGFyYW0gZW1haWwgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBlLW1haWwgdsOhbGlkbywgZmFsc2UgY2FzbyBjb250csOhcmlvXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1ZhbGlkRW1haWwoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzRW1haWwudGVzdChlbWFpbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgc2UgdW1hIHN0cmluZyDDqSB1bWEgcGxhY2EgZGUgdmXDrWN1bG8gQlIgdsOhbGlkYSBvdSBuw6NvLlxyXG4gICAgICogUmV0b3JuYSB1bSBib29sZWFubyBwYXJhIGluZGljYXIgc2Ugw6kgdW1hIHBsYWNhIHbDoWxpZGEgb3UgbsOjby5cclxuICAgICAqIEBwYXJhbSBwbGF0ZSAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGFcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzVmFsaWRMaWNlbnNlUGxhdGUocGxhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IG9sZEZvcm1hdCA9IC9eW0EtWl17M30tP1xcZHs0fSQvO1xyXG4gICAgICAgIGNvbnN0IG1lcmNvc3VsRm9ybWF0ID0gL15bQS1aXXszfVxcZFtBLVpdXFxkezJ9JC87XHJcbiAgICAgICAgcmV0dXJuIG9sZEZvcm1hdC50ZXN0KHBsYXRlKSB8fCBtZXJjb3N1bEZvcm1hdC50ZXN0KHBsYXRlKTtcclxuICAgIH1cclxufVxyXG4iXX0=
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBRzFDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDeEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7O1FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsSUFBSSxFQUFFLDBDQUFFLE1BQU0sTUFBSyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7UUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBbUI7UUFDakMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENB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Li9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbi8qKlxyXG4gKiBDbGFzc2UgdXRpbGl0w6FyaWEgcGFyYSBvcGVyYcOnw7VlcyBkZSBzdHJpbmcuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWdyb1N0cmluZ1V0aWxzIHtcclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyBlc3TDoSB2YXppYSBvdSBjb25zaXN0ZSBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBlc3RpdmVyIHZhemlhIG91IGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgc3RyLnRyaW0oKT8ubGVuZ3RoID09PSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYSBlIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhIGUgbsOjbyBjb25zaXN0aXIgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzRW1wdHkoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgZXN0w6EgdmF6aWEsIGNvbnNpc3RlIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZXN0aXZlciB2YXppYSwgY29uc2lzdGlyIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IGZvciBudWxhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0JsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ciB8fCBBR1JPX1JFR0VYLm9ubHlCbGFua1NwYWNlcy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIG7Do28gZXN0w6EgdmF6aWEsIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28gZSBuw6NvIMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhLCBuw6NvIGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBlIG7Do28gZm9yIG51bGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90Qmxhbmsoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzQmxhbmsoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBvcyBlc3Bhw6dvcyBlbSBicmFuY28gZGUgdW1hIHN0cmluZyBlIHJldG9ybmEgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEsIGNhc28gY29udHLDoXJpbyByZXRvcm5hIGEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgcmVtb3ZpZG9zIG9zIGVzcGHDp29zIGVtIGJyYW5jby5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28gb3UgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0cmltVG9OdWxsKHN0cjogTnVsbGFibGVTdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIHRyaW1tZWQgPT09IFwiXCIgPyBudWxsIDogdHJpbW1lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcywgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMSAtIEEgcHJpbWVpcmEgc3RyaW5nIGEgc2VyIGNvbXBhcmFkYS5cclxuICAgICAqIEBwYXJhbSBzdHIyIC0gQSBzZWd1bmRhIHN0cmluZyBhIHNlciBjb21wYXJhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGFzIHN0cmluZ3MgZm9yZW0gaWd1YWlzLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXF1YWxzSWdub3JlQ2FzZShzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMT8udG9Mb3dlckNhc2UoKSA9PT0gc3RyMj8udG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFscyhzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMSA9PT0gc3RyMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydGUgb3MgY2FyYWN0ZXJlcyBkZSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGludmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGludmVydGlkYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBlLW1haWwuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBlLW1haWwsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2by5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2bywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1Bvc2l0aXZlRGVjaW1hbChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLnBvc2l0aXZlRGVjaW1hbC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBDRVAgKEPDs2RpZ28gUG9zdGFsKS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIENFUCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNaaXBDb2RlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguemlwQ29kZS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBVVUlELlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gVVVJRCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBuw7ptZXJvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc051bWJlcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzTnVtYmVyLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGRpZmZlcmVuY2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGxlbjEgPSBzdHIxLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBsZW4yID0gc3RyMi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGRpZmYgPSBNYXRoLmFicyhsZW4xIC0gbGVuMik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgTWF0aC5taW4obGVuMSwgbGVuMik7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaWZmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmVuZHNXaXRoKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEuc3RhcnRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgY29udMOpbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjb250YWlucyhzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmluY2x1ZGVzKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoSWdub3JlQ2FzZShzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb252ZXJ0aWRhIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9VcHBlckNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnZlcnRpZGEgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b0xvd2VyQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0ZSBvIGNhc28gZGFzIGxldHJhcyBlbSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb20gbyBjYXNvIGRhcyBsZXRyYXMgaW52ZXJ0aWRvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IGNoYXIudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzd2FwcGVkICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3dhcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1hacO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1hacO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdChBR1JPX05VTUJFUlMuWkVSTykudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1pbsO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1pbsO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB1bmNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGEgbyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkZSB1bWEgc3Vic3RyaW5nIGVtIHVtYSBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgb25kZSBhIGNvbnRhZ2VtIHNlcsOhIHJlYWxpemFkYS5cclxuICAgICAqIEBwYXJhbSBzdWJzdHJpbmcgLSBBIHN1YnN0cmluZyBhIHNlciBjb250YWRhLlxyXG4gICAgICogQHJldHVybnMgTyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkYSBzdWJzdHJpbmcgbmEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY291bnRNYXRjaGVzKHN0cjogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHN1YnN0cmluZywgXCJnXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcclxuICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzLmxlbmd0aCA6IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIFJlbW92ZXIgY2FyYWN0ZXJlcyBuw6NvIG51bcOpcmljb3NcclxuICAgICAgICBjcGYgPSBjcGYucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xyXG5cclxuICAgICAgICAvLyBWZXJpZmljYXIgc2UgbyBDUEYgdGVtIDExIGTDrWdpdG9zXHJcbiAgICAgICAgaWYgKGNwZi5sZW5ndGggIT09IEFHUk9fTlVNQkVSUy5FTEVWRU4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2FyIHNlIHRvZG9zIG9zIGTDrWdpdG9zIHPDo28gaWd1YWlzIChjYXNvIGNvbnRyw6FyaW8sIMOpIHVtIHNpbmFsIGRlIENQRiBpbnbDoWxpZG8pXHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTB9JC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGFyIG8gcHJpbWVpcm8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIGxldCBzdW0gPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICBsZXQgcmVtYWluZGVyOiBudW1iZXI7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5PTkU7IGkgPD0gQUdST19OVU1CRVJTLk5JTkU7IGkrKykge1xyXG4gICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2kgLSBBR1JPX05VTUJFUlMuT05FXSkgKiAoQUdST19OVU1CRVJTLkVMRVZFTiAtIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW1haW5kZXIgPSBzdW0gJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGlmIChyZW1haW5kZXIgPT09IEFHUk9fTlVNQkVSUy5URU4gfHwgcmVtYWluZGVyID09PSBBR1JPX05VTUJFUlMuRUxFVkVOKSB7XHJcbiAgICAgICAgICAgIHJlbWFpbmRlciA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVtYWluZGVyICE9PSBwYXJzZUludChjcGZbQUdST19OVU1CRVJTLk5JTkVdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhciBvIHNlZ3VuZG8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIHN1bSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuT05FOyBpIDw9IEFHUk9fTlVNQkVSUy5URU47IGkrKykge1xyXG4gICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2kgLSBBR1JPX05VTUJFUlMuT05FXSkgKiAoQUdST19OVU1CRVJTLlRXRUxWRSAtIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW1haW5kZXIgPSBzdW0gJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGlmIChyZW1haW5kZXIgPT09IEFHUk9fTlVNQkVSUy5URU4gfHwgcmVtYWluZGVyID09PSBBR1JPX05VTUJFUlMuRUxFVkVOKSB7XHJcbiAgICAgICAgICAgIHJlbWFpbmRlciA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVtYWluZGVyICE9PSBwYXJzZUludChjcGZbQUdST19OVU1CRVJTLlRFTl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdGF0aWMgdmFsaWRhdGVDTlBKKGNucGo6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0b2RvcyBvcyBjYXJhY3RlcmVzIG7Do28gbnVtw6lyaWNvc1xyXG4gICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2Egc2UgdGVtIDE0IGTDrWdpdG9zXHJcbiAgICAgICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSBvIENOUEogw6kgdW1hIHNlcXXDqm5jaWEgcmVwZXRpZGEgKGV4OiAxMTExMTExMTExMTExMSwgMjIyMjIyMjIyMjIyMjIsIGV0Yy4pXHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdChjbnBqKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBDw6FsY3VsbyBkbyBwcmltZWlybyBkw61naXRvIHZlcmlmaWNhZG9yXHJcbiAgICAgICAgbGV0IHNvbWEgPSAwO1xyXG4gICAgICAgIGxldCBwZXNvczEgPSBbNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNvbWEgKz0gcGFyc2VJbnQoY25wai5jaGFyQXQoaSkpICogcGVzb3MxW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdG8gPSBzb21hICUgMTE7XHJcbiAgICAgICAgbGV0IGRpZ2l0bzEgPSByZXN0byA8IDIgPyAwIDogMTEgLSByZXN0bztcclxuXHJcbiAgICAgICAgLy8gQ8OhbGN1bG8gZG8gc2VndW5kbyBkw61naXRvIHZlcmlmaWNhZG9yXHJcbiAgICAgICAgc29tYSA9IDA7XHJcbiAgICAgICAgbGV0IHBlc29zMiA9IFs2LCA1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEzOyBpKyspIHtcclxuICAgICAgICAgICAgc29tYSArPSBwYXJzZUludChjbnBqLmNoYXJBdChpKSkgKiBwZXNvczJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3RvID0gc29tYSAlIDExO1xyXG4gICAgICAgIGxldCBkaWdpdG8yID0gcmVzdG8gPCAyID8gMCA6IDExIC0gcmVzdG87XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIG9zIGTDrWdpdG9zIHZlcmlmaWNhZG9yZXMgc8OjbyB2w6FsaWRvc1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjbnBqLmNoYXJBdCgxMikpID09PSBkaWdpdG8xICYmIHBhcnNlSW50KGNucGouY2hhckF0KDEzKSkgPT09IGRpZ2l0bzI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNw6l0b2RvIHBhcmEgYXBsaWNhciB1bWEgbcOhc2NhcmEgZW0gdW1hIHN0cmluZy4gQ29uc2lkZXJlIGEgbcOhc2NhcmEgY29tIHZhbG9yZXMgOSBwYXJhIGFwbGljYcOnw6NvXHJcbiAgICAgKiBAZXhhbXBsZSBBZ3JvU3RyaW5nVXRpbHMuYXBwbHlNYXNrKCcxMjM0NTY3ODkwMScsICc5OTkuOTk5Ljk5OS05OScpID0+ICcxMjMuNDU2Ljc4OS0wMSdcclxuICAgICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBseU1hc2sodmFsdWU6IHN0cmluZywgbWFzazogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUNoYXJzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIlwiKTtcclxuICAgICAgICBjb25zdCBtYXNrQ2hhcnMgPSBtYXNrLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGxldCBtYXNrZWRWYWx1ZSA9IFwiXCI7XHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuICAgICAgICBmb3IgKGNvbnN0IG1hc2tDaGFyIG9mIG1hc2tDaGFycykge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hc2tDaGFyID09PSBcIjlcIikge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gdmFsdWVDaGFyc1tqKytdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gbWFza0NoYXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXNrZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgw6kgdsOhbGlkYS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdsOhbGlkYSwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNWYWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdHIgPT09IFwidW5kZWZpbmVkXCIgfHwgc3RyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBZ3JvU3RyaW5nVXRpbHMuaXNOb3RFbXB0eShzdHIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIMOpIGludsOhbGlkYS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBmb3IgaW52w6FsaWRhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0ludmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzVmFsaWQoc3RyKTtcclxuICAgIH1cclxufVxyXG4iXX0=