@senior-agronegocio/angular-components 0.0.76 → 0.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/senior-agronegocio-angular-components.umd.js +13 -34
- package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
- package/esm2015/common/agro-string-utils.class.js +14 -35
- package/esm5/common/agro-string-utils.class.js +14 -35
- package/fesm2015/senior-agronegocio-angular-components.js +13 -34
- package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
- package/fesm5/senior-agronegocio-angular-components.js +13 -34
- package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
- package/package.json +1 -1
|
@@ -251,42 +251,21 @@ export class AgroStringUtils {
|
|
|
251
251
|
return matches ? matches.length : AGRO_NUMBERS.ZERO;
|
|
252
252
|
}
|
|
253
253
|
static validateCPF(cpf) {
|
|
254
|
-
|
|
255
|
-
cpf
|
|
256
|
-
// Verificar se o CPF tem 11 dígitos
|
|
257
|
-
if (cpf.length !== AGRO_NUMBERS.ELEVEN) {
|
|
254
|
+
cpf = cpf.replace(/\D/g, '');
|
|
255
|
+
if (cpf.length !== 11 || /^(\d)\1+$/.test(cpf)) {
|
|
258
256
|
return false;
|
|
259
257
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
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;
|
|
258
|
+
const calcVerifier = (cpf, length) => {
|
|
259
|
+
let sum = 0;
|
|
260
|
+
for (let i = 0; i < length; i++) {
|
|
261
|
+
sum += parseInt(cpf[i]) * (length + 1 - i);
|
|
262
|
+
}
|
|
263
|
+
let result = sum % 11;
|
|
264
|
+
return result < 2 ? 0 : 11 - result;
|
|
265
|
+
};
|
|
266
|
+
const digit1 = calcVerifier(cpf, 9);
|
|
267
|
+
const digit2 = calcVerifier(cpf, 10);
|
|
268
|
+
return digit1 === parseInt(cpf[9]) && digit2 === parseInt(cpf[10]);
|
|
290
269
|
}
|
|
291
270
|
static validateCNPJ(cnpj) {
|
|
292
271
|
// Remove todos os caracteres não numéricos
|
|
@@ -364,4 +343,4 @@ export class AgroStringUtils {
|
|
|
364
343
|
return !AgroStringUtils.isValid(str);
|
|
365
344
|
}
|
|
366
345
|
}
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBRzFDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDeEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7O1FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsSUFBSSxFQUFFLDBDQUFFLE1BQU0sTUFBSyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7UUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBbUI7UUFDakMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENB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Li9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbi8qKlxyXG4gKiBDbGFzc2UgdXRpbGl0w6FyaWEgcGFyYSBvcGVyYcOnw7VlcyBkZSBzdHJpbmcuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWdyb1N0cmluZ1V0aWxzIHtcclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyBlc3TDoSB2YXppYSBvdSBjb25zaXN0ZSBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBlc3RpdmVyIHZhemlhIG91IGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgc3RyLnRyaW0oKT8ubGVuZ3RoID09PSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYSBlIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhIGUgbsOjbyBjb25zaXN0aXIgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzRW1wdHkoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgZXN0w6EgdmF6aWEsIGNvbnNpc3RlIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZXN0aXZlciB2YXppYSwgY29uc2lzdGlyIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IGZvciBudWxhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0JsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ciB8fCBBR1JPX1JFR0VYLm9ubHlCbGFua1NwYWNlcy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIG7Do28gZXN0w6EgdmF6aWEsIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28gZSBuw6NvIMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhLCBuw6NvIGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBlIG7Do28gZm9yIG51bGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90Qmxhbmsoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzQmxhbmsoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBvcyBlc3Bhw6dvcyBlbSBicmFuY28gZGUgdW1hIHN0cmluZyBlIHJldG9ybmEgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEsIGNhc28gY29udHLDoXJpbyByZXRvcm5hIGEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgcmVtb3ZpZG9zIG9zIGVzcGHDp29zIGVtIGJyYW5jby5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28gb3UgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0cmltVG9OdWxsKHN0cjogTnVsbGFibGVTdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIHRyaW1tZWQgPT09IFwiXCIgPyBudWxsIDogdHJpbW1lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcywgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMSAtIEEgcHJpbWVpcmEgc3RyaW5nIGEgc2VyIGNvbXBhcmFkYS5cclxuICAgICAqIEBwYXJhbSBzdHIyIC0gQSBzZWd1bmRhIHN0cmluZyBhIHNlciBjb21wYXJhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGFzIHN0cmluZ3MgZm9yZW0gaWd1YWlzLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXF1YWxzSWdub3JlQ2FzZShzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMT8udG9Mb3dlckNhc2UoKSA9PT0gc3RyMj8udG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFscyhzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMSA9PT0gc3RyMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydGUgb3MgY2FyYWN0ZXJlcyBkZSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGludmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGludmVydGlkYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBlLW1haWwuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBlLW1haWwsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2by5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2bywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1Bvc2l0aXZlRGVjaW1hbChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLnBvc2l0aXZlRGVjaW1hbC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBDRVAgKEPDs2RpZ28gUG9zdGFsKS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIENFUCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNaaXBDb2RlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguemlwQ29kZS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBVVUlELlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gVVVJRCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBuw7ptZXJvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc051bWJlcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzTnVtYmVyLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGRpZmZlcmVuY2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGxlbjEgPSBzdHIxLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBsZW4yID0gc3RyMi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGRpZmYgPSBNYXRoLmFicyhsZW4xIC0gbGVuMik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgTWF0aC5taW4obGVuMSwgbGVuMik7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaWZmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmVuZHNXaXRoKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEuc3RhcnRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgY29udMOpbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjb250YWlucyhzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmluY2x1ZGVzKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoSWdub3JlQ2FzZShzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb252ZXJ0aWRhIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9VcHBlckNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnZlcnRpZGEgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b0xvd2VyQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0ZSBvIGNhc28gZGFzIGxldHJhcyBlbSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb20gbyBjYXNvIGRhcyBsZXRyYXMgaW52ZXJ0aWRvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IGNoYXIudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzd2FwcGVkICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3dhcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1hacO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1hacO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdChBR1JPX05VTUJFUlMuWkVSTykudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1pbsO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1pbsO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB1bmNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGEgbyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkZSB1bWEgc3Vic3RyaW5nIGVtIHVtYSBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgb25kZSBhIGNvbnRhZ2VtIHNlcsOhIHJlYWxpemFkYS5cclxuICAgICAqIEBwYXJhbSBzdWJzdHJpbmcgLSBBIHN1YnN0cmluZyBhIHNlciBjb250YWRhLlxyXG4gICAgICogQHJldHVybnMgTyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkYSBzdWJzdHJpbmcgbmEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY291bnRNYXRjaGVzKHN0cjogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHN1YnN0cmluZywgXCJnXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcclxuICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzLmxlbmd0aCA6IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIFJlbW92ZXIgY2FyYWN0ZXJlcyBuw6NvIG51bcOpcmljb3NcclxuICAgICAgICBjcGYgPSBjcGYucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xyXG5cclxuICAgICAgICAvLyBWZXJpZmljYXIgc2UgbyBDUEYgdGVtIDExIGTDrWdpdG9zXHJcbiAgICAgICAgaWYgKGNwZi5sZW5ndGggIT09IEFHUk9fTlVNQkVSUy5FTEVWRU4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2FyIHNlIHRvZG9zIG9zIGTDrWdpdG9zIHPDo28gaWd1YWlzIChjYXNvIGNvbnRyw6FyaW8sIMOpIHVtIHNpbmFsIGRlIENQRiBpbnbDoWxpZG8pXHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTB9JC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGFyIG8gcHJpbWVpcm8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIGxldCBzdW0gPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICBsZXQgcmVtYWluZGVyOiBudW1iZXI7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5PTkU7IGkgPD0gQUdST19OVU1CRVJTLk5JTkU7IGkrKykge1xyXG4gICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2kgLSBBR1JPX05VTUJFUlMuT05FXSkgKiAoQUdST19OVU1CRVJTLkVMRVZFTiAtIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW1haW5kZXIgPSBzdW0gJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGlmIChyZW1haW5kZXIgPT09IEFHUk9fTlVNQkVSUy5URU4gfHwgcmVtYWluZGVyID09PSBBR1JPX05VTUJFUlMuRUxFVkVOKSB7XHJcbiAgICAgICAgICAgIHJlbWFpbmRlciA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVtYWluZGVyICE9PSBwYXJzZUludChjcGZbQUdST19OVU1CRVJTLk5JTkVdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhciBvIHNlZ3VuZG8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIHN1bSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuT05FOyBpIDw9IEFHUk9fTlVNQkVSUy5URU47IGkrKykge1xyXG4gICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2kgLSBBR1JPX05VTUJFUlMuT05FXSkgKiAoQUdST19OVU1CRVJTLlRXRUxWRSAtIGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW1haW5kZXIgPSBzdW0gJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGlmIChyZW1haW5kZXIgPT09IEFHUk9fTlVNQkVSUy5URU4gfHwgcmVtYWluZGVyID09PSBBR1JPX05VTUJFUlMuRUxFVkVOKSB7XHJcbiAgICAgICAgICAgIHJlbWFpbmRlciA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVtYWluZGVyICE9PSBwYXJzZUludChjcGZbQUdST19OVU1CRVJTLlRFTl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdGF0aWMgdmFsaWRhdGVDTlBKKGNucGo6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0b2RvcyBvcyBjYXJhY3RlcmVzIG7Do28gbnVtw6lyaWNvc1xyXG4gICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2Egc2UgdGVtIDE0IGTDrWdpdG9zXHJcbiAgICAgICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSBvIENOUEogw6kgdW1hIHNlcXXDqm5jaWEgcmVwZXRpZGEgKGV4OiAxMTExMTExMTExMTExMSwgMjIyMjIyMjIyMjIyMjIsIGV0Yy4pXHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdChjbnBqKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBDw6FsY3VsbyBkbyBwcmltZWlybyBkw61naXRvIHZlcmlmaWNhZG9yXHJcbiAgICAgICAgbGV0IHNvbWEgPSAwO1xyXG4gICAgICAgIGxldCBwZXNvczEgPSBbNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNvbWEgKz0gcGFyc2VJbnQoY25wai5jaGFyQXQoaSkpICogcGVzb3MxW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdG8gPSBzb21hICUgMTE7XHJcbiAgICAgICAgbGV0IGRpZ2l0bzEgPSByZXN0byA8IDIgPyAwIDogMTEgLSByZXN0bztcclxuXHJcbiAgICAgICAgLy8gQ8OhbGN1bG8gZG8gc2VndW5kbyBkw61naXRvIHZlcmlmaWNhZG9yXHJcbiAgICAgICAgc29tYSA9IDA7XHJcbiAgICAgICAgbGV0IHBlc29zMiA9IFs2LCA1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEzOyBpKyspIHtcclxuICAgICAgICAgICAgc29tYSArPSBwYXJzZUludChjbnBqLmNoYXJBdChpKSkgKiBwZXNvczJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3RvID0gc29tYSAlIDExO1xyXG4gICAgICAgIGxldCBkaWdpdG8yID0gcmVzdG8gPCAyID8gMCA6IDExIC0gcmVzdG87XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIG9zIGTDrWdpdG9zIHZlcmlmaWNhZG9yZXMgc8OjbyB2w6FsaWRvc1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludChjbnBqLmNoYXJBdCgxMikpID09PSBkaWdpdG8xICYmIHBhcnNlSW50KGNucGouY2hhckF0KDEzKSkgPT09IGRpZ2l0bzI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNw6l0b2RvIHBhcmEgYXBsaWNhciB1bWEgbcOhc2NhcmEgZW0gdW1hIHN0cmluZy4gQ29uc2lkZXJlIGEgbcOhc2NhcmEgY29tIHZhbG9yZXMgOSBwYXJhIGFwbGljYcOnw6NvXHJcbiAgICAgKiBAZXhhbXBsZSBBZ3JvU3RyaW5nVXRpbHMuYXBwbHlNYXNrKCcxMjM0NTY3ODkwMScsICc5OTkuOTk5Ljk5OS05OScpID0+ICcxMjMuNDU2Ljc4OS0wMSdcclxuICAgICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBseU1hc2sodmFsdWU6IHN0cmluZywgbWFzazogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUNoYXJzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIlwiKTtcclxuICAgICAgICBjb25zdCBtYXNrQ2hhcnMgPSBtYXNrLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGxldCBtYXNrZWRWYWx1ZSA9IFwiXCI7XHJcblxyXG4gICAgICAgIGxldCBqID0gMDtcclxuICAgICAgICBmb3IgKGNvbnN0IG1hc2tDaGFyIG9mIG1hc2tDaGFycykge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hc2tDaGFyID09PSBcIjlcIikge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gdmFsdWVDaGFyc1tqKytdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gbWFza0NoYXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXNrZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgw6kgdsOhbGlkYS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdsOhbGlkYSwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNWYWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdHIgPT09IFwidW5kZWZpbmVkXCIgfHwgc3RyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBZ3JvU3RyaW5nVXRpbHMuaXNOb3RFbXB0eShzdHIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIMOpIGludsOhbGlkYS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBmb3IgaW52w6FsaWRhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0ludmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzVmFsaWQoc3RyKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBRzFDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDeEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7O1FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsSUFBSSxFQUFFLDBDQUFFLE1BQU0sTUFBSyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBbUI7UUFDOUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBbUI7UUFDakMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENB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UUFDOUIsSUFBSSxPQUFPLEdBQUcsS0FBSyxXQUFXLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUM1QyxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQW1CO1FBQ2hDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFHUk9fTlVNQkVSUyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbi8qKlxyXG4gKiBDbGFzc2UgdXRpbGl0w6FyaWEgcGFyYSBvcGVyYcOnw7VlcyBkZSBzdHJpbmcuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWdyb1N0cmluZ1V0aWxzIHtcclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyBlc3TDoSB2YXppYSBvdSBjb25zaXN0ZSBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBlc3RpdmVyIHZhemlhIG91IGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgc3RyLnRyaW0oKT8ubGVuZ3RoID09PSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYSBlIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhIGUgbsOjbyBjb25zaXN0aXIgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzRW1wdHkoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgZXN0w6EgdmF6aWEsIGNvbnNpc3RlIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZXN0aXZlciB2YXppYSwgY29uc2lzdGlyIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IGZvciBudWxhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0JsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ciB8fCBBR1JPX1JFR0VYLm9ubHlCbGFua1NwYWNlcy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIG7Do28gZXN0w6EgdmF6aWEsIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28gZSBuw6NvIMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhLCBuw6NvIGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBlIG7Do28gZm9yIG51bGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90Qmxhbmsoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzQmxhbmsoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBvcyBlc3Bhw6dvcyBlbSBicmFuY28gZGUgdW1hIHN0cmluZyBlIHJldG9ybmEgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEsIGNhc28gY29udHLDoXJpbyByZXRvcm5hIGEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgcmVtb3ZpZG9zIG9zIGVzcGHDp29zIGVtIGJyYW5jby5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28gb3UgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0cmltVG9OdWxsKHN0cjogTnVsbGFibGVTdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIHRyaW1tZWQgPT09IFwiXCIgPyBudWxsIDogdHJpbW1lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcywgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMSAtIEEgcHJpbWVpcmEgc3RyaW5nIGEgc2VyIGNvbXBhcmFkYS5cclxuICAgICAqIEBwYXJhbSBzdHIyIC0gQSBzZWd1bmRhIHN0cmluZyBhIHNlciBjb21wYXJhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGFzIHN0cmluZ3MgZm9yZW0gaWd1YWlzLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXF1YWxzSWdub3JlQ2FzZShzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMT8udG9Mb3dlckNhc2UoKSA9PT0gc3RyMj8udG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFscyhzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMSA9PT0gc3RyMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydGUgb3MgY2FyYWN0ZXJlcyBkZSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGludmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGludmVydGlkYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBlLW1haWwuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBlLW1haWwsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2by5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2bywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1Bvc2l0aXZlRGVjaW1hbChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLnBvc2l0aXZlRGVjaW1hbC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBDRVAgKEPDs2RpZ28gUG9zdGFsKS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIENFUCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNaaXBDb2RlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguemlwQ29kZS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBVVUlELlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gVVVJRCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBuw7ptZXJvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc051bWJlcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzTnVtYmVyLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGRpZmZlcmVuY2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGxlbjEgPSBzdHIxLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBsZW4yID0gc3RyMi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGRpZmYgPSBNYXRoLmFicyhsZW4xIC0gbGVuMik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgTWF0aC5taW4obGVuMSwgbGVuMik7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaWZmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmVuZHNXaXRoKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEuc3RhcnRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgY29udMOpbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjb250YWlucyhzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmluY2x1ZGVzKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoSWdub3JlQ2FzZShzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb252ZXJ0aWRhIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9VcHBlckNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnZlcnRpZGEgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b0xvd2VyQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0ZSBvIGNhc28gZGFzIGxldHJhcyBlbSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb20gbyBjYXNvIGRhcyBsZXRyYXMgaW52ZXJ0aWRvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IGNoYXIudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzd2FwcGVkICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3dhcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1hacO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1hacO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdChBR1JPX05VTUJFUlMuWkVSTykudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1pbsO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1pbsO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB1bmNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGEgbyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkZSB1bWEgc3Vic3RyaW5nIGVtIHVtYSBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgb25kZSBhIGNvbnRhZ2VtIHNlcsOhIHJlYWxpemFkYS5cclxuICAgICAqIEBwYXJhbSBzdWJzdHJpbmcgLSBBIHN1YnN0cmluZyBhIHNlciBjb250YWRhLlxyXG4gICAgICogQHJldHVybnMgTyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkYSBzdWJzdHJpbmcgbmEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY291bnRNYXRjaGVzKHN0cjogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHN1YnN0cmluZywgXCJnXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcclxuICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzLmxlbmd0aCA6IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNwZiA9IGNwZi5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG5cclxuICAgICAgICBpZiAoY3BmLmxlbmd0aCAhPT0gMTEgfHwgL14oXFxkKVxcMSskLy50ZXN0KGNwZikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2FsY1ZlcmlmaWVyID0gKGNwZjogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2ldKSAqIChsZW5ndGggKyAxIC0gaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHN1bSAlIDExO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IDwgMiA/IDAgOiAxMSAtIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBkaWdpdDEgPSBjYWxjVmVyaWZpZXIoY3BmLCA5KTtcclxuICAgICAgICBjb25zdCBkaWdpdDIgPSBjYWxjVmVyaWZpZXIoY3BmLCAxMCk7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWdpdDEgPT09IHBhcnNlSW50KGNwZls5XSkgJiYgZGlnaXQyID09PSBwYXJzZUludChjcGZbMTBdKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNOUEooY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRvZG9zIG9zIGNhcmFjdGVyZXMgbsOjbyBudW3DqXJpY29zXHJcbiAgICAgICAgY25waiA9IGNucGoucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSB0ZW0gMTQgZMOtZ2l0b3NcclxuICAgICAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIG8gQ05QSiDDqSB1bWEgc2VxdcOqbmNpYSByZXBldGlkYSAoZXg6IDExMTExMTExMTExMTExLCAyMjIyMjIyMjIyMjIyMiwgZXRjLilcclxuICAgICAgICBpZiAoL14oXFxkKVxcMXsxM30kLy50ZXN0KGNucGopKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIEPDoWxjdWxvIGRvIHByaW1laXJvIGTDrWdpdG8gdmVyaWZpY2Fkb3JcclxuICAgICAgICBsZXQgc29tYSA9IDA7XHJcbiAgICAgICAgbGV0IHBlc29zMSA9IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHtcclxuICAgICAgICAgICAgc29tYSArPSBwYXJzZUludChjbnBqLmNoYXJBdChpKSkgKiBwZXNvczFbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN0byA9IHNvbWEgJSAxMTtcclxuICAgICAgICBsZXQgZGlnaXRvMSA9IHJlc3RvIDwgMiA/IDAgOiAxMSAtIHJlc3RvO1xyXG5cclxuICAgICAgICAvLyBDw6FsY3VsbyBkbyBzZWd1bmRvIGTDrWdpdG8gdmVyaWZpY2Fkb3JcclxuICAgICAgICBzb21hID0gMDtcclxuICAgICAgICBsZXQgcGVzb3MyID0gWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTM7IGkrKykge1xyXG4gICAgICAgICAgICBzb21hICs9IHBhcnNlSW50KGNucGouY2hhckF0KGkpKSAqIHBlc29zMltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdG8gPSBzb21hICUgMTE7XHJcbiAgICAgICAgbGV0IGRpZ2l0bzIgPSByZXN0byA8IDIgPyAwIDogMTEgLSByZXN0bztcclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2Egc2Ugb3MgZMOtZ2l0b3MgdmVyaWZpY2Fkb3JlcyBzw6NvIHbDoWxpZG9zXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGNucGouY2hhckF0KDEyKSkgPT09IGRpZ2l0bzEgJiYgcGFyc2VJbnQoY25wai5jaGFyQXQoMTMpKSA9PT0gZGlnaXRvMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE3DqXRvZG8gcGFyYSBhcGxpY2FyIHVtYSBtw6FzY2FyYSBlbSB1bWEgc3RyaW5nLiBDb25zaWRlcmUgYSBtw6FzY2FyYSBjb20gdmFsb3JlcyA5IHBhcmEgYXBsaWNhw6fDo29cclxuICAgICAqIEBleGFtcGxlIEFncm9TdHJpbmdVdGlscy5hcHBseU1hc2soJzEyMzQ1Njc4OTAxJywgJzk5OS45OTkuOTk5LTk5JykgPT4gJzEyMy40NTYuNzg5LTAxJ1xyXG4gICAgICogQHBhcmFtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gbWFza1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFwcGx5TWFzayh2YWx1ZTogc3RyaW5nLCBtYXNrOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhcnMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hc2tDaGFycyA9IG1hc2suc3BsaXQoXCJcIik7XHJcbiAgICAgICAgbGV0IG1hc2tlZFZhbHVlID0gXCJcIjtcclxuXHJcbiAgICAgICAgbGV0IGogPSAwO1xyXG4gICAgICAgIGZvciAoY29uc3QgbWFza0NoYXIgb2YgbWFza0NoYXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChqID49IHZhbHVlQ2hhcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWFza0NoYXIgPT09IFwiOVwiKSB7XHJcbiAgICAgICAgICAgICAgICBtYXNrZWRWYWx1ZSArPSB2YWx1ZUNoYXJzW2orK107XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXNrZWRWYWx1ZSArPSBtYXNrQ2hhcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hc2tlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyDDqSB2w6FsaWRhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIGZvciB2w6FsaWRhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1ZhbGlkKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodHlwZW9mIHN0ciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBzdHIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFncm9TdHJpbmdVdGlscy5pc05vdEVtcHR5KHN0cikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgw6kgaW52w6FsaWRhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIGZvciBpbnbDoWxpZGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzSW52YWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNWYWxpZChzdHIpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -254,42 +254,21 @@ var AgroStringUtils = /** @class */ (function () {
|
|
|
254
254
|
return matches ? matches.length : AGRO_NUMBERS.ZERO;
|
|
255
255
|
};
|
|
256
256
|
AgroStringUtils.validateCPF = function (cpf) {
|
|
257
|
-
|
|
258
|
-
cpf
|
|
259
|
-
// Verificar se o CPF tem 11 dígitos
|
|
260
|
-
if (cpf.length !== AGRO_NUMBERS.ELEVEN) {
|
|
257
|
+
cpf = cpf.replace(/\D/g, '');
|
|
258
|
+
if (cpf.length !== 11 || /^(\d)\1+$/.test(cpf)) {
|
|
261
259
|
return false;
|
|
262
260
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (remainder === AGRO_NUMBERS.TEN || remainder === AGRO_NUMBERS.ELEVEN) {
|
|
275
|
-
remainder = AGRO_NUMBERS.ZERO;
|
|
276
|
-
}
|
|
277
|
-
if (remainder !== parseInt(cpf[AGRO_NUMBERS.NINE])) {
|
|
278
|
-
return false;
|
|
279
|
-
}
|
|
280
|
-
// Calcular o segundo dígito verificador
|
|
281
|
-
sum = AGRO_NUMBERS.ZERO;
|
|
282
|
-
for (var i = AGRO_NUMBERS.ONE; i <= AGRO_NUMBERS.TEN; i++) {
|
|
283
|
-
sum += parseInt(cpf[i - AGRO_NUMBERS.ONE]) * (AGRO_NUMBERS.TWELVE - i);
|
|
284
|
-
}
|
|
285
|
-
remainder = sum % AGRO_NUMBERS.ELEVEN;
|
|
286
|
-
if (remainder === AGRO_NUMBERS.TEN || remainder === AGRO_NUMBERS.ELEVEN) {
|
|
287
|
-
remainder = AGRO_NUMBERS.ZERO;
|
|
288
|
-
}
|
|
289
|
-
if (remainder !== parseInt(cpf[AGRO_NUMBERS.TEN])) {
|
|
290
|
-
return false;
|
|
291
|
-
}
|
|
292
|
-
return true;
|
|
261
|
+
var calcVerifier = function (cpf, length) {
|
|
262
|
+
var sum = 0;
|
|
263
|
+
for (var i = 0; i < length; i++) {
|
|
264
|
+
sum += parseInt(cpf[i]) * (length + 1 - i);
|
|
265
|
+
}
|
|
266
|
+
var result = sum % 11;
|
|
267
|
+
return result < 2 ? 0 : 11 - result;
|
|
268
|
+
};
|
|
269
|
+
var digit1 = calcVerifier(cpf, 9);
|
|
270
|
+
var digit2 = calcVerifier(cpf, 10);
|
|
271
|
+
return digit1 === parseInt(cpf[9]) && digit2 === parseInt(cpf[10]);
|
|
293
272
|
};
|
|
294
273
|
AgroStringUtils.validateCNPJ = function (cnpj) {
|
|
295
274
|
// Remove todos os caracteres não numéricos
|
|
@@ -380,4 +359,4 @@ var AgroStringUtils = /** @class */ (function () {
|
|
|
380
359
|
return AgroStringUtils;
|
|
381
360
|
}());
|
|
382
361
|
export { AgroStringUtils };
|
|
383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUcxQzs7R0FFRztBQUNIO0lBQUE7SUE2WUEsQ0FBQztJQTVZRzs7OztPQUlHO0lBQ0ksdUJBQU8sR0FBZCxVQUFlLEdBQW1COztRQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLElBQUksRUFBRSwwQ0FBRSxNQUFNLE1BQUssWUFBWSxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDBCQUFVLEdBQWpCLFVBQWtCLEdBQW1CO1FBQ2pDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQU8sR0FBZCxVQUFlLEdBQW1CO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSwwQkFBVSxHQUFqQixVQUFrQixHQUFtQjtRQUNqQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDBCQUFVLEdBQWpCLFVBQWtCLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsSUFB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bXNcIjtcclxuaW1wb3J0IHsgQUdST19SRUdFWCB9IGZyb20gXCIuL2Fncm8tcmVnZXguY29uc3RhbnRcIjtcclxuXHJcbmV4cG9ydCB7IEFncm9TdHJpbmdVdGlscyBhcyBTdHJpbmdVdGlscyB9O1xyXG5cclxuZXhwb3J0IHR5cGUgTnVsbGFibGVTdHJpbmcgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4vKipcclxuICogQ2xhc3NlIHV0aWxpdMOhcmlhIHBhcmEgb3BlcmHDp8O1ZXMgZGUgc3RyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFncm9TdHJpbmdVdGlscyB7XHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgZXN0w6EgdmF6aWEgb3UgY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZXN0aXZlciB2YXppYSBvdSBjb25zaXN0aXIgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzRW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RyIHx8IHN0ci50cmltKCk/Lmxlbmd0aCA9PT0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIG7Do28gZXN0w6EgdmF6aWEgZSBuw6NvIGNvbnNpc3RlIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIG7Do28gZXN0aXZlciB2YXppYSBlIG7Do28gY29uc2lzdGlyIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc05vdEVtcHR5KHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIUFncm9TdHJpbmdVdGlscy5pc0VtcHR5KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIGVzdMOhIHZhemlhLCBjb25zaXN0ZSBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBvdSDDqSBudWxhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIGVzdGl2ZXIgdmF6aWEsIGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBvdSBmb3IgbnVsYSwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNCbGFuayhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgQUdST19SRUdFWC5vbmx5QmxhbmtTcGFjZXMudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyBuw6NvIGVzdMOhIHZhemlhLCBuw6NvIGNvbnNpc3RlIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIGUgbsOjbyDDqSBudWxhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIG7Do28gZXN0aXZlciB2YXppYSwgbsOjbyBjb25zaXN0aXIgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28gZSBuw6NvIGZvciBudWxhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc05vdEJsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIUFncm9TdHJpbmdVdGlscy5pc0JsYW5rKHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgb3MgZXNwYcOnb3MgZW0gYnJhbmNvIGRlIHVtYSBzdHJpbmcgZSByZXRvcm5hIG51bGwgc2UgYSBzdHJpbmcgcmVzdWx0YW50ZSBlc3RpdmVyIHZhemlhLCBjYXNvIGNvbnRyw6FyaW8gcmV0b3JuYSBhIHN0cmluZyBzZW0gZXNwYcOnb3MgZW0gYnJhbmNvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHJlbW92aWRvcyBvcyBlc3Bhw6dvcyBlbSBicmFuY28uXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBzZW0gZXNwYcOnb3MgZW0gYnJhbmNvIG91IG51bGwgc2UgYSBzdHJpbmcgcmVzdWx0YW50ZSBlc3RpdmVyIHZhemlhLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdHJpbVRvTnVsbChzdHI6IE51bGxhYmxlU3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBzdHIudHJpbSgpO1xyXG4gICAgICAgIHJldHVybiB0cmltbWVkID09PSBcIlwiID8gbnVsbCA6IHRyaW1tZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBkdWFzIHN0cmluZ3Mgc8OjbyBpZ3VhaXMsIGlnbm9yYW5kbyBtYWnDunNjdWxhcyBlIG1pbsO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0cjEgLSBBIHByaW1laXJhIHN0cmluZyBhIHNlciBjb21wYXJhZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMiAtIEEgc2VndW5kYSBzdHJpbmcgYSBzZXIgY29tcGFyYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhcyBzdHJpbmdzIGZvcmVtIGlndWFpcywgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFsc0lnbm9yZUNhc2Uoc3RyMTogTnVsbGFibGVTdHJpbmcsIHN0cjI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjE/LnRvTG93ZXJDYXNlKCkgPT09IHN0cjI/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBkdWFzIHN0cmluZ3Mgc8OjbyBpZ3VhaXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlcXVhbHMoc3RyMTogTnVsbGFibGVTdHJpbmcsIHN0cjI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEgPT09IHN0cjI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnRlIG9zIGNhcmFjdGVyZXMgZGUgdW1hIHN0cmluZy5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciBpbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBpbnZlcnRpZGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXZlcnNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gZS1tYWlsLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gZS1tYWlsLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0VtYWlsKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNFbWFpbC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBuw7ptZXJvIGludGVpcm8gcG9zaXRpdm8uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBuw7ptZXJvIGludGVpcm8gcG9zaXRpdm8sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzUG9zaXRpdmVJbnRlZ2VyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVgucG9zaXRpdmVJbnRlZ2VyLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8gZGVjaW1hbCBwb3NpdGl2by5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIG7Dum1lcm8gZGVjaW1hbCBwb3NpdGl2bywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZURlY2ltYWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZURlY2ltYWwudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gQ0VQIChDw7NkaWdvIFBvc3RhbCkuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBDRVAsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzWmlwQ29kZShzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLnppcENvZGUudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gVVVJRC5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIFVVSUQsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzVVVJRChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzVVVJRC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBuw7ptZXJvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gbsO6bWVybywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNOdW1iZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc051bWJlci50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRvcm5hIGEgZGlmZXJlbsOnYSBlbnRyZSBkdWFzIHN0cmluZ3MuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsZW4xID0gc3RyMS5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgbGVuMiA9IHN0cjIubGVuZ3RoO1xyXG4gICAgICAgIGxldCBkaWZmID0gTWF0aC5hYnMobGVuMSAtIGxlbjIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IE1hdGgubWluKGxlbjEsIGxlbjIpOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGRpZmYrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlmZjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgdGVybWluYSBjb20gYSBzdHJpbmcgZm9ybmVjaWRhLlxyXG4gICAgICogQHBhcmFtIHN0cjFcclxuICAgICAqIEBwYXJhbSBzdHIyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZW5kc1dpdGgoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5lbmRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgY29tZcOnYSBjb20gYSBzdHJpbmcgZm9ybmVjaWRhLlxyXG4gICAgICogQHBhcmFtIHN0cjFcclxuICAgICAqIEBwYXJhbSBzdHIyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3RhcnRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnN0YXJ0c1dpdGgoc3RyMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRvcm5hIHNlIGEgc3RyaW5nIGNvbnTDqW0gYSBzdHJpbmcgZm9ybmVjaWRhLlxyXG4gICAgICogQHBhcmFtIHN0cjFcclxuICAgICAqIEBwYXJhbSBzdHIyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY29udGFpbnMoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5pbmNsdWRlcyhzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgY29tZcOnYSBjb20gYSBzdHJpbmcgZm9ybmVjaWRhIGlnbm9yYW5kbyBtYWnDunNjdWxhcyBlIG1pbsO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0cjFcclxuICAgICAqIEBwYXJhbSBzdHIyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3RhcnRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc3RyMi50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgdGVybWluYSBjb20gYSBzdHJpbmcgZm9ybmVjaWRhIGlnbm9yYW5kbyBtYWnDunNjdWxhcyBlIG1pbsO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0cjFcclxuICAgICAqIEBwYXJhbSBzdHIyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZW5kc1dpdGhJZ25vcmVDYXNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydGUgdW1hIHN0cmluZyBwYXJhIGxldHJhcyBtYWnDunNjdWxhcy5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciBjb252ZXJ0aWRhLlxyXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgY29udmVydGlkYSBwYXJhIGxldHJhcyBtYWnDunNjdWxhcy5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvVXBwZXJDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIHBhcmEgbGV0cmFzIG1pbsO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb252ZXJ0aWRhIHBhcmEgbGV0cmFzIG1pbsO6c2N1bGFzLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9Mb3dlckNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydGUgbyBjYXNvIGRhcyBsZXRyYXMgZW0gdW1hIHN0cmluZy5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciBjb252ZXJ0aWRhLlxyXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgY29tIG8gY2FzbyBkYXMgbGV0cmFzIGludmVydGlkby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHN3YXBDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgc3dhcHBlZCA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBzdHJbaV07XHJcbiAgICAgICAgICAgIGlmIChjaGFyID09PSBjaGFyLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHN3YXBwZWQgKz0gY2hhci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN3YXBwZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSBhIHByaW1laXJhIGxldHJhIGRlIHVtYSBzdHJpbmcgcGFyYSBtYWnDunNjdWxhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb20gYSBwcmltZWlyYSBsZXRyYSBlbSBtYWnDunNjdWxhLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoQUdST19OVU1CRVJTLlpFUk8pLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSBhIHByaW1laXJhIGxldHJhIGRlIHVtYSBzdHJpbmcgcGFyYSBtaW7DunNjdWxhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb20gYSBwcmltZWlyYSBsZXRyYSBlbSBtaW7DunNjdWxhLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdW5jYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdChBR1JPX05VTUJFUlMuWkVSTykudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRhIG8gbsO6bWVybyBkZSBvY29ycsOqbmNpYXMgZGUgdW1hIHN1YnN0cmluZyBlbSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIG9uZGUgYSBjb250YWdlbSBzZXLDoSByZWFsaXphZGEuXHJcbiAgICAgKiBAcGFyYW0gc3Vic3RyaW5nIC0gQSBzdWJzdHJpbmcgYSBzZXIgY29udGFkYS5cclxuICAgICAqIEByZXR1cm5zIE8gbsO6bWVybyBkZSBvY29ycsOqbmNpYXMgZGEgc3Vic3RyaW5nIG5hIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNvdW50TWF0Y2hlcyhzdHI6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdWJzdHJpbmcsIFwiZ1wiKTtcclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gW107XHJcbiAgICAgICAgbGV0IG1hdGNoO1xyXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHN0cikpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMucHVzaChtYXRjaFswXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlcy5sZW5ndGggOiBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgdmFsaWRhdGVDUEYoY3BmOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBSZW1vdmVyIGNhcmFjdGVyZXMgbsOjbyBudW3DqXJpY29zXHJcbiAgICAgICAgY3BmID0gY3BmLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2FyIHNlIG8gQ1BGIHRlbSAxMSBkw61naXRvc1xyXG4gICAgICAgIGlmIChjcGYubGVuZ3RoICE9PSBBR1JPX05VTUJFUlMuRUxFVkVOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhciBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpcyAoY2FzbyBjb250csOhcmlvLCDDqSB1bSBzaW5hbCBkZSBDUEYgaW52w6FsaWRvKVxyXG4gICAgICAgIGlmICgvXihcXGQpXFwxezEwfSQvLnRlc3QoY3BmKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhciBvIHByaW1laXJvIGTDrWdpdG8gdmVyaWZpY2Fkb3JcclxuICAgICAgICBsZXQgc3VtID0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICAgICAgbGV0IHJlbWFpbmRlcjogbnVtYmVyO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuT05FOyBpIDw9IEFHUk9fTlVNQkVSUy5OSU5FOyBpKyspIHtcclxuICAgICAgICAgICAgc3VtICs9IHBhcnNlSW50KGNwZltpIC0gQUdST19OVU1CRVJTLk9ORV0pICogKEFHUk9fTlVNQkVSUy5FTEVWRU4gLSBpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVtYWluZGVyID0gc3VtICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICBpZiAocmVtYWluZGVyID09PSBBR1JPX05VTUJFUlMuVEVOIHx8IHJlbWFpbmRlciA9PT0gQUdST19OVU1CRVJTLkVMRVZFTikge1xyXG4gICAgICAgICAgICByZW1haW5kZXIgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbWFpbmRlciAhPT0gcGFyc2VJbnQoY3BmW0FHUk9fTlVNQkVSUy5OSU5FXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXIgbyBzZWd1bmRvIGTDrWdpdG8gdmVyaWZpY2Fkb3JcclxuICAgICAgICBzdW0gPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLk9ORTsgaSA8PSBBR1JPX05VTUJFUlMuVEVOOyBpKyspIHtcclxuICAgICAgICAgICAgc3VtICs9IHBhcnNlSW50KGNwZltpIC0gQUdST19OVU1CRVJTLk9ORV0pICogKEFHUk9fTlVNQkVSUy5UV0VMVkUgLSBpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVtYWluZGVyID0gc3VtICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICBpZiAocmVtYWluZGVyID09PSBBR1JPX05VTUJFUlMuVEVOIHx8IHJlbWFpbmRlciA9PT0gQUdST19OVU1CRVJTLkVMRVZFTikge1xyXG4gICAgICAgICAgICByZW1haW5kZXIgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbWFpbmRlciAhPT0gcGFyc2VJbnQoY3BmW0FHUk9fTlVNQkVSUy5URU5dKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgc3RhdGljIHZhbGlkYXRlQ05QSihjbnBqOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBSZW1vdmUgdG9kb3Mgb3MgY2FyYWN0ZXJlcyBuw6NvIG51bcOpcmljb3NcclxuICAgICAgICBjbnBqID0gY25wai5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIHRlbSAxNCBkw61naXRvc1xyXG4gICAgICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gMTQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2Egc2UgbyBDTlBKIMOpIHVtYSBzZXF1w6puY2lhIHJlcGV0aWRhIChleDogMTExMTExMTExMTExMTEsIDIyMjIyMjIyMjIyMjIyLCBldGMuKVxyXG4gICAgICAgIGlmICgvXihcXGQpXFwxezEzfSQvLnRlc3QoY25waikpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gQ8OhbGN1bG8gZG8gcHJpbWVpcm8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIGxldCBzb21hID0gMDtcclxuICAgICAgICBsZXQgcGVzb3MxID0gWzUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xyXG4gICAgICAgICAgICBzb21hICs9IHBhcnNlSW50KGNucGouY2hhckF0KGkpKSAqIHBlc29zMVtpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3RvID0gc29tYSAlIDExO1xyXG4gICAgICAgIGxldCBkaWdpdG8xID0gcmVzdG8gPCAyID8gMCA6IDExIC0gcmVzdG87XHJcblxyXG4gICAgICAgIC8vIEPDoWxjdWxvIGRvIHNlZ3VuZG8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIHNvbWEgPSAwO1xyXG4gICAgICAgIGxldCBwZXNvczIgPSBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNvbWEgKz0gcGFyc2VJbnQoY25wai5jaGFyQXQoaSkpICogcGVzb3MyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN0byA9IHNvbWEgJSAxMTtcclxuICAgICAgICBsZXQgZGlnaXRvMiA9IHJlc3RvIDwgMiA/IDAgOiAxMSAtIHJlc3RvO1xyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSBvcyBkw61naXRvcyB2ZXJpZmljYWRvcmVzIHPDo28gdsOhbGlkb3NcclxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoY25wai5jaGFyQXQoMTIpKSA9PT0gZGlnaXRvMSAmJiBwYXJzZUludChjbnBqLmNoYXJBdCgxMykpID09PSBkaWdpdG8yO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTcOpdG9kbyBwYXJhIGFwbGljYXIgdW1hIG3DoXNjYXJhIGVtIHVtYSBzdHJpbmcuIENvbnNpZGVyZSBhIG3DoXNjYXJhIGNvbSB2YWxvcmVzIDkgcGFyYSBhcGxpY2HDp8Ojb1xyXG4gICAgICogQGV4YW1wbGUgQWdyb1N0cmluZ1V0aWxzLmFwcGx5TWFzaygnMTIzNDU2Nzg5MDEnLCAnOTk5Ljk5OS45OTktOTknKSA9PiAnMTIzLjQ1Ni43ODktMDEnXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqIEBwYXJhbSBtYXNrXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwbHlNYXNrKHZhbHVlOiBzdHJpbmcsIG1hc2s6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVDaGFycyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCJcIik7XHJcbiAgICAgICAgY29uc3QgbWFza0NoYXJzID0gbWFzay5zcGxpdChcIlwiKTtcclxuICAgICAgICBsZXQgbWFza2VkVmFsdWUgPSBcIlwiO1xyXG5cclxuICAgICAgICBsZXQgaiA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBtYXNrQ2hhciBvZiBtYXNrQ2hhcnMpIHtcclxuICAgICAgICAgICAgaWYgKGogPj0gdmFsdWVDaGFycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXNrQ2hhciA9PT0gXCI5XCIpIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IHZhbHVlQ2hhcnNbaisrXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IG1hc2tDaGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWFza2VkVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIMOpIHbDoWxpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZm9yIHbDoWxpZGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzVmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RyID09PSBcInVuZGVmaW5lZFwiIHx8IHN0ciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQWdyb1N0cmluZ1V0aWxzLmlzTm90RW1wdHkoc3RyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyDDqSBpbnbDoWxpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZm9yIGludsOhbGlkYSwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNJbnZhbGlkKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIUFncm9TdHJpbmdVdGlscy5pc1ZhbGlkKHN0cik7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
362
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUcxQzs7R0FFRztBQUNIO0lBQUE7SUF3WEEsQ0FBQztJQXZYRzs7OztPQUlHO0lBQ0ksdUJBQU8sR0FBZCxVQUFlLEdBQW1COztRQUM5QixPQUFPLENBQUMsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLElBQUksRUFBRSwwQ0FBRSxNQUFNLE1BQUssWUFBWSxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDBCQUFVLEdBQWpCLFVBQWtCLEdBQW1CO1FBQ2pDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQU8sR0FBZCxVQUFlLEdBQW1CO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSwwQkFBVSxHQUFqQixVQUFrQixHQUFtQjtRQUNqQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDBCQUFVLEdBQWpCLFVBQWtCLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsSUFB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LENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFNUMseUNBQXlDO1FBQ3pDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRXpDLHdDQUF3QztRQUN4QyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDtRQUNELEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUV6QyxtREFBbUQ7UUFDbkQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQztJQUMxRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kseUJBQVMsR0FBaEIsVUFBaUIsS0FBYSxFQUFFLElBQVk7O1FBQ3hDLElBQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztZQUNWLEtBQXVCLElBQUEsY0FBQSxTQUFBLFNBQVMsQ0FBQSxvQ0FBQSwyREFBRTtnQkFBN0IsSUFBTSxRQUFRLHNCQUFBO2dCQUNmLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7b0JBQ3hCLE1BQU07aUJBQ1Q7Z0JBQ0QsSUFBSSxRQUFRLEtBQUssR0FBRyxFQUFFO29CQUNsQixXQUFXLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNILFdBQVcsSUFBSSxRQUFRLENBQUM7aUJBQzNCO2FBQ0o7Ozs7Ozs7OztRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQU8sR0FBZCxVQUFlLEdBQW1CO1FBQzlCLElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDNUMsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0kseUJBQVMsR0FBaEIsVUFBaUIsR0FBbUI7UUFDaEMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNMLHNCQUFDO0FBQUQsQ0FBQyxBQXhYRCxJQXdYQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFHUk9fTlVNQkVSUyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbi8qKlxyXG4gKiBDbGFzc2UgdXRpbGl0w6FyaWEgcGFyYSBvcGVyYcOnw7VlcyBkZSBzdHJpbmcuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWdyb1N0cmluZ1V0aWxzIHtcclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyBlc3TDoSB2YXppYSBvdSBjb25zaXN0ZSBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBzZSBhIHN0cmluZyBlc3RpdmVyIHZhemlhIG91IGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgc3RyLnRyaW0oKT8ubGVuZ3RoID09PSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYSBlIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhIGUgbsOjbyBjb25zaXN0aXIgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28sIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzRW1wdHkoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgZXN0w6EgdmF6aWEsIGNvbnNpc3RlIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgZXN0aXZlciB2YXppYSwgY29uc2lzdGlyIGFwZW5hcyBkZSBjYXJhY3RlcmVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIG91IGZvciBudWxhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0JsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ciB8fCBBR1JPX1JFR0VYLm9ubHlCbGFua1NwYWNlcy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSB1bWEgc3RyaW5nIG7Do28gZXN0w6EgdmF6aWEsIG7Do28gY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgZGUgZXNwYcOnbyBlbSBicmFuY28gZSBuw6NvIMOpIG51bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgICAqIEByZXR1cm5zIFRydWUgc2UgYSBzdHJpbmcgbsOjbyBlc3RpdmVyIHZhemlhLCBuw6NvIGNvbnNpc3RpciBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBlIG7Do28gZm9yIG51bGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90Qmxhbmsoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzQmxhbmsoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBvcyBlc3Bhw6dvcyBlbSBicmFuY28gZGUgdW1hIHN0cmluZyBlIHJldG9ybmEgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEsIGNhc28gY29udHLDoXJpbyByZXRvcm5hIGEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgcmVtb3ZpZG9zIG9zIGVzcGHDp29zIGVtIGJyYW5jby5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHNlbSBlc3Bhw6dvcyBlbSBicmFuY28gb3UgbnVsbCBzZSBhIHN0cmluZyByZXN1bHRhbnRlIGVzdGl2ZXIgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0cmltVG9OdWxsKHN0cjogTnVsbGFibGVTdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIHRyaW1tZWQgPT09IFwiXCIgPyBudWxsIDogdHJpbW1lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcywgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMSAtIEEgcHJpbWVpcmEgc3RyaW5nIGEgc2VyIGNvbXBhcmFkYS5cclxuICAgICAqIEBwYXJhbSBzdHIyIC0gQSBzZWd1bmRhIHN0cmluZyBhIHNlciBjb21wYXJhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGFzIHN0cmluZ3MgZm9yZW0gaWd1YWlzLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXF1YWxzSWdub3JlQ2FzZShzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMT8udG9Mb3dlckNhc2UoKSA9PT0gc3RyMj8udG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGR1YXMgc3RyaW5ncyBzw6NvIGlndWFpcy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFscyhzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMSA9PT0gc3RyMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydGUgb3MgY2FyYWN0ZXJlcyBkZSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGludmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGludmVydGlkYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBlLW1haWwuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBlLW1haWwsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2by5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIG7Dum1lcm8gaW50ZWlybyBwb3NpdGl2bywgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gbsO6bWVybyBkZWNpbWFsIHBvc2l0aXZvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1Bvc2l0aXZlRGVjaW1hbChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLnBvc2l0aXZlRGVjaW1hbC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBDRVAgKEPDs2RpZ28gUG9zdGFsKS5cclxuICAgICAqIEBwYXJhbSBzdHIgLSBBIHN0cmluZyBhIHNlciB0ZXN0YWRhXHJcbiAgICAgKiBAcmV0dXJucyAtIFRydWUgc2UgYSBzdHJpbmcgZm9yIHVtIENFUCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNaaXBDb2RlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguemlwQ29kZS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyDDqSB1bSBVVUlELlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHRlc3RhZGFcclxuICAgICAqIEByZXR1cm5zIC0gVHJ1ZSBzZSBhIHN0cmluZyBmb3IgdW0gVVVJRCwgZmFsc2UgY2FzbyBjb250csOhcmlvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIHVtIG7Dum1lcm8uXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgdGVzdGFkYVxyXG4gICAgICogQHJldHVybnMgLSBUcnVlIHNlIGEgc3RyaW5nIGZvciB1bSBuw7ptZXJvLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc051bWJlcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzTnVtYmVyLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncy5cclxuICAgICAqIEBwYXJhbSBzdHIxXHJcbiAgICAgKiBAcGFyYW0gc3RyMlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGRpZmZlcmVuY2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGxlbjEgPSBzdHIxLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBsZW4yID0gc3RyMi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGRpZmYgPSBNYXRoLmFicyhsZW4xIC0gbGVuMik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgTWF0aC5taW4obGVuMSwgbGVuMik7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaWZmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmVuZHNXaXRoKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEuc3RhcnRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgc2UgYSBzdHJpbmcgY29udMOpbSBhIHN0cmluZyBmb3JuZWNpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjb250YWlucyhzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLmluY2x1ZGVzKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyBjb21lw6dhIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoSWdub3JlQ2FzZShzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBzZSBhIHN0cmluZyB0ZXJtaW5hIGNvbSBhIHN0cmluZyBmb3JuZWNpZGEgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyMVxyXG4gICAgICogQHBhcmFtIHN0cjJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb252ZXJ0aWRhIHBhcmEgbGV0cmFzIG1hacO6c2N1bGFzLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9VcHBlckNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnZlcnRpZGEgcGFyYSBsZXRyYXMgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b0xvd2VyQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0ZSBvIGNhc28gZGFzIGxldHJhcyBlbSB1bWEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIGNvbnZlcnRpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyBjb20gbyBjYXNvIGRhcyBsZXRyYXMgaW52ZXJ0aWRvLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IGNoYXIudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzd2FwcGVkICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3dhcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1hacO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1hacO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdChBR1JPX05VTUJFUlMuWkVSTykudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRlIGEgcHJpbWVpcmEgbGV0cmEgZGUgdW1hIHN0cmluZyBwYXJhIG1pbsO6c2N1bGEuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgYSBzZXIgY29udmVydGlkYS5cclxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbSBhIHByaW1laXJhIGxldHJhIGVtIG1pbsO6c2N1bGEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB1bmNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGEgbyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkZSB1bWEgc3Vic3RyaW5nIGVtIHVtYSBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0gc3RyIC0gQSBzdHJpbmcgb25kZSBhIGNvbnRhZ2VtIHNlcsOhIHJlYWxpemFkYS5cclxuICAgICAqIEBwYXJhbSBzdWJzdHJpbmcgLSBBIHN1YnN0cmluZyBhIHNlciBjb250YWRhLlxyXG4gICAgICogQHJldHVybnMgTyBuw7ptZXJvIGRlIG9jb3Jyw6puY2lhcyBkYSBzdWJzdHJpbmcgbmEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY291bnRNYXRjaGVzKHN0cjogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHN1YnN0cmluZywgXCJnXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcclxuICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKG1hdGNoWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzLmxlbmd0aCA6IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNwZiA9IGNwZi5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG5cclxuICAgICAgICBpZiAoY3BmLmxlbmd0aCAhPT0gMTEgfHwgL14oXFxkKVxcMSskLy50ZXN0KGNwZikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2FsY1ZlcmlmaWVyID0gKGNwZjogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2ldKSAqIChsZW5ndGggKyAxIC0gaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHN1bSAlIDExO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IDwgMiA/IDAgOiAxMSAtIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBkaWdpdDEgPSBjYWxjVmVyaWZpZXIoY3BmLCA5KTtcclxuICAgICAgICBjb25zdCBkaWdpdDIgPSBjYWxjVmVyaWZpZXIoY3BmLCAxMCk7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWdpdDEgPT09IHBhcnNlSW50KGNwZls5XSkgJiYgZGlnaXQyID09PSBwYXJzZUludChjcGZbMTBdKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNOUEooY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRvZG9zIG9zIGNhcmFjdGVyZXMgbsOjbyBudW3DqXJpY29zXHJcbiAgICAgICAgY25waiA9IGNucGoucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSB0ZW0gMTQgZMOtZ2l0b3NcclxuICAgICAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIG8gQ05QSiDDqSB1bWEgc2VxdcOqbmNpYSByZXBldGlkYSAoZXg6IDExMTExMTExMTExMTExLCAyMjIyMjIyMjIyMjIyMiwgZXRjLilcclxuICAgICAgICBpZiAoL14oXFxkKVxcMXsxM30kLy50ZXN0KGNucGopKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIEPDoWxjdWxvIGRvIHByaW1laXJvIGTDrWdpdG8gdmVyaWZpY2Fkb3JcclxuICAgICAgICBsZXQgc29tYSA9IDA7XHJcbiAgICAgICAgbGV0IHBlc29zMSA9IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHtcclxuICAgICAgICAgICAgc29tYSArPSBwYXJzZUludChjbnBqLmNoYXJBdChpKSkgKiBwZXNvczFbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN0byA9IHNvbWEgJSAxMTtcclxuICAgICAgICBsZXQgZGlnaXRvMSA9IHJlc3RvIDwgMiA/IDAgOiAxMSAtIHJlc3RvO1xyXG5cclxuICAgICAgICAvLyBDw6FsY3VsbyBkbyBzZWd1bmRvIGTDrWdpdG8gdmVyaWZpY2Fkb3JcclxuICAgICAgICBzb21hID0gMDtcclxuICAgICAgICBsZXQgcGVzb3MyID0gWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTM7IGkrKykge1xyXG4gICAgICAgICAgICBzb21hICs9IHBhcnNlSW50KGNucGouY2hhckF0KGkpKSAqIHBlc29zMltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdG8gPSBzb21hICUgMTE7XHJcbiAgICAgICAgbGV0IGRpZ2l0bzIgPSByZXN0byA8IDIgPyAwIDogMTEgLSByZXN0bztcclxuXHJcbiAgICAgICAgLy8gVmVyaWZpY2Egc2Ugb3MgZMOtZ2l0b3MgdmVyaWZpY2Fkb3JlcyBzw6NvIHbDoWxpZG9zXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGNucGouY2hhckF0KDEyKSkgPT09IGRpZ2l0bzEgJiYgcGFyc2VJbnQoY25wai5jaGFyQXQoMTMpKSA9PT0gZGlnaXRvMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE3DqXRvZG8gcGFyYSBhcGxpY2FyIHVtYSBtw6FzY2FyYSBlbSB1bWEgc3RyaW5nLiBDb25zaWRlcmUgYSBtw6FzY2FyYSBjb20gdmFsb3JlcyA5IHBhcmEgYXBsaWNhw6fDo29cclxuICAgICAqIEBleGFtcGxlIEFncm9TdHJpbmdVdGlscy5hcHBseU1hc2soJzEyMzQ1Njc4OTAxJywgJzk5OS45OTkuOTk5LTk5JykgPT4gJzEyMy40NTYuNzg5LTAxJ1xyXG4gICAgICogQHBhcmFtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gbWFza1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFwcGx5TWFzayh2YWx1ZTogc3RyaW5nLCBtYXNrOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhcnMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hc2tDaGFycyA9IG1hc2suc3BsaXQoXCJcIik7XHJcbiAgICAgICAgbGV0IG1hc2tlZFZhbHVlID0gXCJcIjtcclxuXHJcbiAgICAgICAgbGV0IGogPSAwO1xyXG4gICAgICAgIGZvciAoY29uc3QgbWFza0NoYXIgb2YgbWFza0NoYXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChqID49IHZhbHVlQ2hhcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWFza0NoYXIgPT09IFwiOVwiKSB7XHJcbiAgICAgICAgICAgICAgICBtYXNrZWRWYWx1ZSArPSB2YWx1ZUNoYXJzW2orK107XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXNrZWRWYWx1ZSArPSBtYXNrQ2hhcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hc2tlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgdW1hIHN0cmluZyDDqSB2w6FsaWRhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIGZvciB2w6FsaWRhLCBmYWxzZSBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc1ZhbGlkKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodHlwZW9mIHN0ciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBzdHIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFncm9TdHJpbmdVdGlscy5pc05vdEVtcHR5KHN0cikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBzdHJpbmcgw6kgaW52w6FsaWRhLlxyXG4gICAgICogQHBhcmFtIHN0ciAtIEEgc3RyaW5nIGEgc2VyIHZlcmlmaWNhZGEuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIHNlIGEgc3RyaW5nIGZvciBpbnbDoWxpZGEsIGZhbHNlIGNhc28gY29udHLDoXJpby5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzSW52YWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNWYWxpZChzdHIpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -2255,42 +2255,21 @@ class AgroStringUtils {
|
|
|
2255
2255
|
return matches ? matches.length : AGRO_NUMBERS.ZERO;
|
|
2256
2256
|
}
|
|
2257
2257
|
static validateCPF(cpf) {
|
|
2258
|
-
|
|
2259
|
-
cpf
|
|
2260
|
-
// Verificar se o CPF tem 11 dígitos
|
|
2261
|
-
if (cpf.length !== AGRO_NUMBERS.ELEVEN) {
|
|
2258
|
+
cpf = cpf.replace(/\D/g, '');
|
|
2259
|
+
if (cpf.length !== 11 || /^(\d)\1+$/.test(cpf)) {
|
|
2262
2260
|
return false;
|
|
2263
2261
|
}
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
if (remainder === AGRO_NUMBERS.TEN || remainder === AGRO_NUMBERS.ELEVEN) {
|
|
2276
|
-
remainder = AGRO_NUMBERS.ZERO;
|
|
2277
|
-
}
|
|
2278
|
-
if (remainder !== parseInt(cpf[AGRO_NUMBERS.NINE])) {
|
|
2279
|
-
return false;
|
|
2280
|
-
}
|
|
2281
|
-
// Calcular o segundo dígito verificador
|
|
2282
|
-
sum = AGRO_NUMBERS.ZERO;
|
|
2283
|
-
for (let i = AGRO_NUMBERS.ONE; i <= AGRO_NUMBERS.TEN; i++) {
|
|
2284
|
-
sum += parseInt(cpf[i - AGRO_NUMBERS.ONE]) * (AGRO_NUMBERS.TWELVE - i);
|
|
2285
|
-
}
|
|
2286
|
-
remainder = sum % AGRO_NUMBERS.ELEVEN;
|
|
2287
|
-
if (remainder === AGRO_NUMBERS.TEN || remainder === AGRO_NUMBERS.ELEVEN) {
|
|
2288
|
-
remainder = AGRO_NUMBERS.ZERO;
|
|
2289
|
-
}
|
|
2290
|
-
if (remainder !== parseInt(cpf[AGRO_NUMBERS.TEN])) {
|
|
2291
|
-
return false;
|
|
2292
|
-
}
|
|
2293
|
-
return true;
|
|
2262
|
+
const calcVerifier = (cpf, length) => {
|
|
2263
|
+
let sum = 0;
|
|
2264
|
+
for (let i = 0; i < length; i++) {
|
|
2265
|
+
sum += parseInt(cpf[i]) * (length + 1 - i);
|
|
2266
|
+
}
|
|
2267
|
+
let result = sum % 11;
|
|
2268
|
+
return result < 2 ? 0 : 11 - result;
|
|
2269
|
+
};
|
|
2270
|
+
const digit1 = calcVerifier(cpf, 9);
|
|
2271
|
+
const digit2 = calcVerifier(cpf, 10);
|
|
2272
|
+
return digit1 === parseInt(cpf[9]) && digit2 === parseInt(cpf[10]);
|
|
2294
2273
|
}
|
|
2295
2274
|
static validateCNPJ(cnpj) {
|
|
2296
2275
|
// Remove todos os caracteres não numéricos
|