@bitgo-beta/sdk-lib-mpc 8.2.0-beta.2 → 8.2.0-beta.3
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/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/tss/ecdsa/pallierproof.d.ts +2 -2
- package/dist/src/tss/ecdsa/pallierproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/pallierproof.js +30 -23
- package/dist/src/tss/ecdsa/primes.d.ts +2 -0
- package/dist/src/tss/ecdsa/primes.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/primes.js +1846 -0
- package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -1
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/rangeproof.js +2 -2
- package/dist/src/tss/ecdsa/types.d.ts +65 -13
- package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/types.js +76 -14
- package/dist/src/util.d.ts +2 -1
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +4 -3
- package/dist/tsconfig.tsbuildinfo +19 -10
- package/package.json +2 -2
|
@@ -8,7 +8,7 @@ export declare function generateSafePrimes(bitLengths: number[]): Promise<bigint
|
|
|
8
8
|
* be the same as the bit length of the paillier public keys used for MtA.
|
|
9
9
|
* @returns {DeserializedNtilde} The generated Ntilde values.
|
|
10
10
|
*/
|
|
11
|
-
export declare function generateNtilde(bitlength
|
|
11
|
+
export declare function generateNtilde(bitlength?: number): Promise<DeserializedNtildeWithProofs>;
|
|
12
12
|
/**
|
|
13
13
|
* Generate iterations of Ntilde, h1, h2 discrete log proofs.
|
|
14
14
|
* @param {DeserializedNtilde} ntilde Ntilde, h1, h2 to generate the proofs for.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rangeproof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/rangeproof.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAEvB,UAAU,EACV,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAQjB,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOhF;AAwBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"rangeproof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/rangeproof.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAEvB,UAAU,EACV,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAQjB,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOhF;AAwBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,SAAS,SAAsB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA2C3G;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,uBAAuB,CAAC,CAsBlC;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,uBAAuB,GACnC,OAAO,CAAC,OAAO,CAAC,CA0ClB;AACD;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,UAAU,EACjB,CAAC,EAAE,MAAM,GACR,OAAO,CAgCT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,mBAAmB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,GACR,OAAO,CAiET"}
|
|
@@ -47,7 +47,7 @@ async function generateModulus(bitlength = index_1.minModulusBitLength, retry =
|
|
|
47
47
|
* be the same as the bit length of the paillier public keys used for MtA.
|
|
48
48
|
* @returns {DeserializedNtilde} The generated Ntilde values.
|
|
49
49
|
*/
|
|
50
|
-
async function generateNtilde(bitlength) {
|
|
50
|
+
async function generateNtilde(bitlength = index_1.minModulusBitLength) {
|
|
51
51
|
const { n: ntilde, q1, q2 } = await generateModulus(bitlength);
|
|
52
52
|
const [f1, f2] = await Promise.all([util_1.randomPositiveCoPrimeTo(ntilde), util_1.randomPositiveCoPrimeTo(ntilde)]);
|
|
53
53
|
const h1 = bigint_mod_arith_1.modPow(f1, BigInt(2), ntilde);
|
|
@@ -398,4 +398,4 @@ function verifyWithCheck(curve, modulusBits, pk, ntilde, proof, c1, c2, X) {
|
|
|
398
398
|
return left === right;
|
|
399
399
|
}
|
|
400
400
|
exports.verifyWithCheck = verifyWithCheck;
|
|
401
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Vwcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EvcmFuZ2Vwcm9vZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxtQ0FBb0M7QUFHcEMsNkRBQTZEO0FBQzdELHVEQUFrRDtBQVNsRCxxQ0FBMkY7QUFDM0YsMkNBQXdDO0FBQ3hDLG1DQUE4QztBQUU5QywyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRWhCLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxVQUFvQjtJQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztJQUM5QixNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBc0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtRQUN2RSxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFQRCxnREFPQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsU0FBUyxHQUFHLDJCQUFtQixFQUFFLEtBQUssR0FBRyxFQUFFO0lBQ3hFLElBQUksU0FBUyxHQUFHLDJCQUFtQixFQUFFO1FBQ25DLGtDQUFrQztRQUNsQyxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO0tBQzlFO0lBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFVBQVUsQ0FBQztJQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsd0dBQXdHO1FBQ3hHLElBQUksK0JBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDOUIsU0FBUztTQUNWO1FBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNoRjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsaURBQWlELFNBQVMsVUFBVSxLQUFLLDREQUE0RCxDQUN0SSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLGNBQWMsQ0FBQyxTQUFpQjtJQUNwRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyw4QkFBdUIsQ0FBQyxNQUFNLENBQUMsRUFBRSw4QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkcsTUFBTSxFQUFFLEdBQUcseUJBQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLHlCQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyx5QkFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDakMsTUFBTSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDdkQsbUJBQW1CLENBQ2pCO1lBQ0UsRUFBRSxFQUFFLEVBQUU7WUFDTixFQUFFLEVBQUUsRUFBRTtZQUNOLE1BQU0sRUFBRSxNQUFNO1NBQ2YsRUFDRCxFQUFFLEVBQ0YsRUFBRSxFQUNGLEVBQUUsQ0FDSDtRQUNELG1CQUFtQixDQUNqQjtZQUNFLEVBQUUsRUFBRSxFQUFFO1lBQ04sRUFBRSxFQUFFLEVBQUU7WUFDTixNQUFNLEVBQUUsTUFBTTtTQUNmLEVBQ0QsSUFBSSxFQUNKLEVBQUUsRUFDRixFQUFFLENBQ0g7S0FDRixDQUFDLENBQUM7SUFDSCxPQUFPO1FBQ0wsTUFBTTtRQUNOLEVBQUU7UUFDRixFQUFFO1FBQ0YsV0FBVyxFQUFFO1lBQ1gsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztnQkFDMUIsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ25CO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztnQkFDMUIsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTNDRCx3Q0EyQ0M7QUFFRDs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsTUFBMEIsRUFDMUIsQ0FBUyxFQUNULEVBQVUsRUFDVixFQUFVO0lBRVYsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN4QixNQUFNLENBQUMsR0FBYSxFQUFFLENBQUM7SUFDdkIsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLElBQUksU0FBUyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEMsdUJBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQix1QkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNCLHVCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7S0FDaEMsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlDQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsdUJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0c7SUFDRCxNQUFNLGlCQUFpQixHQUFHLG1CQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFFLE1BQU0sQ0FBQyxHQUFhLEVBQUUsQ0FBQztJQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLDBDQUEwQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztLQUM3RDtJQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEIsQ0FBQztBQTNCRCxrREEyQkM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsTUFBMEIsRUFDMUIsV0FBb0M7SUFFcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxJQUFJLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMxRCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFBSSxXQUFXLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDMUQsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtRQUMvQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFDRSxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHO1FBQzlCLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVU7UUFDdkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUNuQztRQUNBLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxJQUFJLFNBQVMsR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3BDLHVCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0IsdUJBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQix1QkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBQ2hDLENBQUMsQ0FBQztJQUNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqRCxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN4QixTQUFTO1lBQ1QsdUJBQWdCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hGLENBQUMsQ0FBQztLQUNKO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxtQkFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakQsMENBQTBDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLE9BQU8sR0FBRyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxNQUFNLGVBQWUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN6RSxJQUFJLE9BQU8sS0FBSyxlQUFlLEVBQUU7WUFDL0IsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBN0NELDhDQTZDQztBQUNEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxLQUFLLFVBQVUsS0FBSyxDQUN6QixLQUFnQixFQUNoQixXQUFtQixFQUNuQixFQUFhLEVBQ2IsTUFBMEIsRUFDMUIsQ0FBUyxFQUNULENBQVMsRUFDVCxDQUFTO0lBRVQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxpQ0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQU0sOEJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sS0FBSyxHQUFHLGlDQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxHQUFHLEdBQUcsaUNBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4RyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHlCQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM5RSxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLHlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RyxNQUFNLElBQUksR0FBRyxtQkFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcseUJBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzNCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUF4Q0Qsc0JBd0NDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsTUFBTSxDQUNwQixLQUFnQixFQUNoQixXQUFtQixFQUNuQixFQUFhLEVBQ2IsTUFBMEIsRUFDMUIsS0FBaUIsRUFDakIsQ0FBUztJQUVULE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNqQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxJQUFJLEdBQUcsbUJBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sQ0FBQyxHQUFHLHlCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFJLFFBQWdCLENBQUM7SUFDckIsUUFBUSxHQUFHLENBQUMseUJBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHlCQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyx5QkFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzdHLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDeEIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELFFBQVE7UUFDTixDQUFDLENBQUMsQ0FBQyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUMxRyx5QkFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsT0FBTyxLQUFLLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQztBQUM5QixDQUFDO0FBdkNELHdCQXVDQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSSxLQUFLLFVBQVUsY0FBYyxDQUNsQyxLQUFnQixFQUNoQixXQUFtQixFQUNuQixFQUFhLEVBQ2IsTUFBMEIsRUFDMUIsRUFBVSxFQUNWLEVBQVUsRUFDVixDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxDQUFTO0lBRVQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLGlDQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsTUFBTSxHQUFHLEdBQUcsaUNBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxNQUFNLEtBQUssR0FBRyxpQ0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxHQUFHLGlDQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsaUNBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLDhCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBRyxpQ0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hHLE1BQU0sSUFBSSxHQUFHLENBQUMseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xILE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcseUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzFHLE1BQU0sQ0FBQyxHQUNMLENBQUMsQ0FBQyxDQUFDLHlCQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcseUJBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcseUJBQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQy9HLE1BQU0s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SyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsR0FBRyx5QkFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyx5QkFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNwQyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7QUFDeEIsQ0FBQztBQTFFRCwwQ0EwRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFplcm8gS25vd2xlZGdlIFJhbmdlIFByb29mcyBhcyBkZXNjcmliZWQgaW4gKFR3by1wYXJ0eSBnZW5lcmF0aW9uIG9mIERTQSBzaWduYXR1cmVzKVsxXS5cbiAqIFsxXTogaHR0cHM6Ly9yZWl0ZXJtay5naXRodWIuaW8vcGFwZXJzLzIwMDQvSUpJUy5wZGZcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBCYXNlQ3VydmUgfSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgUHVibGljS2V5IH0gZnJvbSAncGFpbGxpZXItYmlnaW50JztcbmltcG9ydCB7IGJpdExlbmd0aCwgcmFuZEJldHdlZW4gfSBmcm9tICdiaWdpbnQtY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IG1vZEludiwgbW9kUG93IH0gZnJvbSAnYmlnaW50LW1vZC1hcml0aCc7XG5pbXBvcnQge1xuICBEZXNlcmlhbGl6ZWROdGlsZGUsXG4gIERlc2VyaWFsaXplZE50aWxkZVByb29mLFxuICBSU0FNb2R1bHVzLFxuICBSYW5nZVByb29mLFxuICBSYW5nZVByb29mV2l0aENoZWNrLFxuICBEZXNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50VG9CdWZmZXJCRSwgcmFuZG9tUG9zaXRpdmVDb1ByaW1lVG8gfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IE9wZW5TU0wgfSBmcm9tICcuLi8uLi9vcGVuc3NsJztcbmltcG9ydCB7IG1pbk1vZHVsdXNCaXRMZW5ndGggfSBmcm9tICcuL2luZGV4JztcblxuLy8gMTI4IGFzIHJlY29tbWVuZCBieSBodHRwczovL2Jsb2cudmVyaWNoYWlucy5pby9wL3ZzYS0yMDIyLTEyMC1tdWx0aWNoYWluLWtleS1leHRyYWN0aW9uLlxuY29uc3QgSVRFUkFUSU9OUyA9IDEyODtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU2FmZVByaW1lcyhiaXRMZW5ndGhzOiBudW1iZXJbXSk6IFByb21pc2U8YmlnaW50W10+IHtcbiAgY29uc3Qgb3BlblNTTCA9IG5ldyBPcGVuU1NMKCk7XG4gIGF3YWl0IG9wZW5TU0wuaW5pdCgpO1xuICBjb25zdCBwcm9taXNlczogUHJvbWlzZTxiaWdpbnQ+W10gPSBiaXRMZW5ndGhzLm1hcCgoYml0bGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gb3BlblNTTC5nZW5lcmF0ZVNhZmVQcmltZShiaXRsZW5ndGgpO1xuICB9KTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNb2R1bHVzKGJpdGxlbmd0aCA9IG1pbk1vZHVsdXNCaXRMZW5ndGgsIHJldHJ5ID0gMTApOiBQcm9taXNlPFJTQU1vZHVsdXM+IHtcbiAgaWYgKGJpdGxlbmd0aCA8IG1pbk1vZHVsdXNCaXRMZW5ndGgpIHtcbiAgICAvLyBodHRwczovL3d3dy5rZXlsZW5ndGguY29tL2VuLzYvXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oJ0dlbmVyYXRpbmcgYSBtb2R1bHVzIHdpdGggbGVzcyB0aGFuIDMwNzIgaXMgbm90IHJlY29tbWVuZGVkIScpO1xuICB9XG4gIGNvbnN0IGJpdGxlbmd0aFAgPSBNYXRoLmZsb29yKGJpdGxlbmd0aCAvIDIpO1xuICBjb25zdCBiaXRsZW5ndGhRID0gYml0bGVuZ3RoIC0gYml0bGVuZ3RoUDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeTsgaSsrKSB7XG4gICAgY29uc3QgW3AsIHFdID0gYXdhaXQgZ2VuZXJhdGVTYWZlUHJpbWVzKFtiaXRsZW5ndGhQLCBiaXRsZW5ndGhRXSk7XG4gICAgY29uc3QgbiA9IHAgKiBxO1xuICAgIC8vIEZvciBsYXJnZSBiaXQgbGVuZ3RocywgdGhlIHByb2JhYmlsaXR5IG9mIGdlbmVyYXRpbmcgYSBtb2R1bHVzIHdpdGggdGhlIHdyb25nIGJpdCBsZW5ndGggaXMgdmVyeSBsb3cuXG4gICAgaWYgKGJpdExlbmd0aChuKSAhPT0gYml0bGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbiwgcTE6IChwIC0gQmlnSW50KDEpKSAvIEJpZ0ludCgyKSwgcTI6IChxIC0gQmlnSW50KDEpKSAvIEJpZ0ludCgyKSB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgVW5hYmxlIHRvIGdlbmVyYXRlIG1vZHVsdXMgd2l0aCBiaXQgbGVuZ3RoIG9mICR7Yml0bGVuZ3RofSBhZnRlciAke3JldHJ5fSB0cmllcy4gUGxlYXNlIHRyeSBhZ2FpbiBvciByZWFjaCBvdXQgdG8gc3VwcG9ydEBiaXRnby5jb21gXG4gICk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgXCJjaGFsbGVuZ2VcIiB2YWx1ZXMgZm9yIHJhbmdlIHByb29mcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRsZW5ndGggVGhlIGJpdCBsZW5ndGggb2YgdGhlIG1vZHVsdXMgdG8gZ2VuZXJhdGUuIFRoaXMgc2hvdWxkXG4gKiBiZSB0aGUgc2FtZSBhcyB0aGUgYml0IGxlbmd0aCBvZiB0aGUgcGFpbGxpZXIgcHVibGljIGtleXMgdXNlZCBmb3IgTXRBLlxuICogQHJldHVybnMge0Rlc2VyaWFsaXplZE50aWxkZX0gVGhlIGdlbmVyYXRlZCBOdGlsZGUgdmFsdWVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVOdGlsZGUoYml0bGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPERlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnM+IHtcbiAgY29uc3QgeyBuOiBudGlsZGUsIHExLCBxMiB9ID0gYXdhaXQgZ2VuZXJhdGVNb2R1bHVzKGJpdGxlbmd0aCk7XG4gIGNvbnN0IFtmMSwgZjJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3JhbmRvbVBvc2l0aXZlQ29QcmltZVRvKG50aWxkZSksIHJhbmRvbVBvc2l0aXZlQ29QcmltZVRvKG50aWxkZSldKTtcbiAgY29uc3QgaDEgPSBtb2RQb3coZjEsIEJpZ0ludCgyKSwgbnRpbGRlKTtcbiAgY29uc3QgaDIgPSBtb2RQb3coaDEsIGYyLCBudGlsZGUpO1xuICBjb25zdCBiZXRhID0gbW9kSW52KGYyLCBxMSAqIHEyKTtcbiAgY29uc3QgW2gxd3J0SDJQcm9vZnMsIGgyd3J0SDFQcm9vZnNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdlbmVyYXRlTnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIGgxOiBoMSxcbiAgICAgICAgaDI6IGgyLFxuICAgICAgICBudGlsZGU6IG50aWxkZSxcbiAgICAgIH0sXG4gICAgICBmMixcbiAgICAgIHExLFxuICAgICAgcTJcbiAgICApLFxuICAgIGdlbmVyYXRlTnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIGgxOiBoMixcbiAgICAgICAgaDI6IGgxLFxuICAgICAgICBudGlsZGU6IG50aWxkZSxcbiAgICAgIH0sXG4gICAgICBiZXRhLFxuICAgICAgcTEsXG4gICAgICBxMlxuICAgICksXG4gIF0pO1xuICByZXR1cm4ge1xuICAgIG50aWxkZSxcbiAgICBoMSxcbiAgICBoMixcbiAgICBudGlsZGVQcm9vZjoge1xuICAgICAgaDFXcnRIMjoge1xuICAgICAgICBhbHBoYTogaDF3cnRIMlByb29mcy5hbHBoYSxcbiAgICAgICAgdDogaDF3cnRIMlByb29mcy50LFxuICAgICAgfSxcbiAgICAgIGgyV3J0SDE6IHtcbiAgICAgICAgYWxwaGE6IGgyd3J0SDFQcm9vZnMuYWxwaGEsXG4gICAgICAgIHQ6IGgyd3J0SDFQcm9vZnMudCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBpdGVyYXRpb25zIG9mIE50aWxkZSwgaDEsIGgyIGRpc2NyZXRlIGxvZyBwcm9vZnMuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZE50aWxkZX0gbnRpbGRlIE50aWxkZSwgaDEsIGgyIHRvIGdlbmVyYXRlIHRoZSBwcm9vZnMgZm9yLlxuICogQHBhcmFtIHtiaWdpbnR9IHggRWl0aGVyIGFscGhhIG9yIGJldGEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgYSBkaXNjcmV0ZSBsb2cgcHJvb2Ygb2ZcbiAqIGgxIHcuci50IGgyIG9yIGgyIHcuci50IGgxLlxuICogQHBhcmFtIHtiaWdpbnR9IHExIFRoZSBTb3BoaWUgR2VybWFpbiBwcmltZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpcnN0IHNhZmUgcHJpbWUgcDEgdXNlZCB0byBnZW5lcmF0ZSBOdGlsZGUuXG4gKiBAcGFyYW0ge2JpZ2ludH0gcTIgVGhlIFNvcGhpZSBHZXJtYWluIHByaW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIHNhZmUgcHJpbWUgcDIgdXNlZCB0byBnZW5lcmF0ZSBOdGlsZGUuXG4gKiBAcmV0dXJucyB7TnRpbGRlUHJvb2Z9IFRoZSBnZW5lcmF0ZWQgTnRpbGRlIFByb29mcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTnRpbGRlUHJvb2YoXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICB4OiBiaWdpbnQsXG4gIHExOiBiaWdpbnQsXG4gIHEyOiBiaWdpbnRcbik6IFByb21pc2U8RGVzZXJpYWxpemVkTnRpbGRlUHJvb2Y+IHtcbiAgY29uc3QgcTFNdWxRMiA9IHExICogcTI7XG4gIGNvbnN0IGE6IGJpZ2ludFtdID0gW107XG4gIGNvbnN0IGFscGhhOiBiaWdpbnRbXSA9IFtdO1xuICBsZXQgbXNnVG9IYXNoOiBCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFtcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5oMSksXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUuaDIpLFxuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLm50aWxkZSksXG4gIF0pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykge1xuICAgIGEucHVzaChyYW5kQmV0d2VlbihxMU11bFEyKSk7XG4gICAgYWxwaGEucHVzaChtb2RQb3cobnRpbGRlLmgxLCBhW2ldLCBudGlsZGUubnRpbGRlKSk7XG4gICAgbXNnVG9IYXNoID0gQnVmZmVyLmNvbmNhdChbbXNnVG9IYXNoLCBiaWdJbnRUb0J1ZmZlckJFKGFscGhhW2ldLCBNYXRoLmNlaWwoYml0TGVuZ3RoKG50aWxkZS5udGlsZGUpIC8gOCkpXSk7XG4gIH1cbiAgY29uc3Qgc2ltdWxhdGVkUmVzcG9uc2UgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUobXNnVG9IYXNoKS5kaWdlc3QoKTtcbiAgY29uc3QgdDogYmlnaW50W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHtcbiAgICAvLyBHZXQgdGhlIGl0aCBiaXQgZnJvbSBhIGJ1ZmZlciBvZiBieXRlcy5cbiAgICBjb25zdCBpdGhCaXQgPSAoc2ltdWxhdGVkUmVzcG9uc2VbTWF0aC5mbG9vcihpIC8gOCldID4+ICg3IC0gKGkgJSA4KSkpICYgMTtcbiAgICB0LnB1c2goKGFbaV0gKyAoKEJpZ0ludChpdGhCaXQpICogeCkgJSBxMU11bFEyKSkgJSBxMU11bFEyKTtcbiAgfVxuICByZXR1cm4geyBhbHBoYSwgdCB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSBkaXNjcmV0ZSBsb2cgcHJvb2ZzIG9mIGgxIGFuZCBoMiBtb2QgTnRpbGRlLlxuICogQHBhcmFtIHtEZXNlcmlhbGl6ZWROdGlsZGV9IG50aWxkZSBOdGlsZGUsIGgxLCBoMiB0byBnZW5lcmF0ZSB0aGUgcHJvb2ZzIGZvci5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlUHJvb2Z9IG50aWxkZVByb29mIE50aWxkZSBQcm9vZnNcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHByb29mIGlzIHZlcmlmaWVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlOdGlsZGVQcm9vZihcbiAgbnRpbGRlOiBEZXNlcmlhbGl6ZWROdGlsZGUsXG4gIG50aWxkZVByb29mOiBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZlxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGgxTW9kTnRpbGRlID0gbnRpbGRlLmgxICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgaDJNb2ROdGlsZGUgPSBudGlsZGUuaDIgJSBudGlsZGUubnRpbGRlO1xuICBpZiAoaDFNb2ROdGlsZGUgPT09IEJpZ0ludCgwKSB8fCBoMk1vZE50aWxkZSA9PT0gQmlnSW50KDApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChoMU1vZE50aWxkZSA9PT0gQmlnSW50KDEpIHx8IGgyTW9kTnRpbGRlID09PSBCaWdJbnQoMSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGgxTW9kTnRpbGRlID09PSBoMk1vZE50aWxkZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgbnRpbGRlUHJvb2YuYWxwaGEubGVuZ3RoID4gMjU2IHx8XG4gICAgbnRpbGRlUHJvb2YuYWxwaGEubGVuZ3RoICE9PSBJVEVSQVRJT05TIHx8XG4gICAgbnRpbGRlUHJvb2YudC5sZW5ndGggIT09IElURVJBVElPTlNcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGxldCBtc2dUb0hhc2g6IEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLmgxKSxcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5oMiksXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUubnRpbGRlKSxcbiAgXSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnRpbGRlUHJvb2YuYWxwaGEubGVuZ3RoOyBpKyspIHtcbiAgICBtc2dUb0hhc2ggPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIG1zZ1RvSGFzaCxcbiAgICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlUHJvb2YuYWxwaGFbaV0sIE1hdGguY2VpbChiaXRMZW5ndGgobnRpbGRlLm50aWxkZSkgLyA4KSksXG4gICAgXSk7XG4gIH1cbiAgY29uc3Qgc2ltdWxhdGVkUmVzcG9uc2UgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUobXNnVG9IYXNoKS5kaWdlc3QoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudGlsZGVQcm9vZi5hbHBoYS5sZW5ndGg7IGkrKykge1xuICAgIC8vIEdldCB0aGUgaXRoIGJpdCBmcm9tIGEgYnVmZmVyIG9mIGJ5dGVzLlxuICAgIGNvbnN0IGl0aEJpdCA9IChzaW11bGF0ZWRSZXNwb25zZVtNYXRoLmZsb29yKGkgLyA4KV0gPj4gKDcgLSAoaSAlIDgpKSkgJiAxO1xuICAgIGNvbnN0IGgxUG93VGkgPSBtb2RQb3cobnRpbGRlLmgxLCBudGlsZGVQcm9vZi50W2ldLCBudGlsZGUubnRpbGRlKTtcbiAgICBjb25zdCBoMlBvd0NpID0gbW9kUG93KG50aWxkZS5oMiwgQmlnSW50KGl0aEJpdCksIG50aWxkZS5udGlsZGUpO1xuICAgIGNvbnN0IGFscGhhTXVsaDJQb3dDaSA9IChudGlsZGVQcm9vZi5hbHBoYVtpXSAqIGgyUG93Q2kpICUgbnRpbGRlLm50aWxkZTtcbiAgICBpZiAoaDFQb3dUaSAhPT0gYWxwaGFNdWxoMlBvd0NpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIHplcm8ta25vd2xlZGdlIHJhbmdlIHByb29mIHRoYXQgYW4gZW5jcnlwdGVkIHZhbHVlIGlzIFwic21hbGxcIi5cbiAqIEBwYXJhbSB7QmFzZUN1cnZlfSBjdXJ2ZSBBbiBlbGxpcHRpYyBjdXJ2ZSB0byB1c2UgZm9yIGdyb3VwIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW9kdWx1c0JpdHMgVGhlIGJpdCBjb3VudCBvZiB0aGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7UHVibGljS2V5fSBwayBUaGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlfSBudGlsZGUgVGhlIHZlcmlmaWVyJ3MgTnRpbGRlIHZhbHVlcy5cbiAqIEBwYXJhbSB7YmlnaW50fSBjIFRoZSBjaXBoZXJ0ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IG0gVGhlIHBsYWludGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSByIFRoZSBvYmZ1c2NhdGlvbiB2YWx1ZSB1c2VkIHRvIGVuY3J5cHQgbS5cbiAqIEByZXR1cm5zIHtSYW5nZVByb29mfSBUaGUgZ2VuZXJhdGVkIHByb29mLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmUoXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBjOiBiaWdpbnQsXG4gIG06IGJpZ2ludCxcbiAgcjogYmlnaW50XG4pOiBQcm9taXNlPFJhbmdlUHJvb2Y+IHtcbiAgY29uc3QgbW9kdWx1c0J5dGVzID0gTWF0aC5mbG9vcigobW9kdWx1c0JpdHMgKyA3KSAvIDgpO1xuICBjb25zdCBxID0gY3VydmUub3JkZXIoKTtcbiAgY29uc3QgcTMgPSBxICoqIEJpZ0ludCgzKTtcbiAgY29uc3QgcW50aWxkZSA9IHEgKiBudGlsZGUubnRpbGRlO1xuICBjb25zdCBxM250aWxkZSA9IHEzICogbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgYWxwaGEgPSByYW5kQmV0d2VlbihxMyk7XG4gIGNvbnN0IGJldGEgPSBhd2FpdCByYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyhway5uKTtcbiAgY29uc3QgZ2FtbWEgPSByYW5kQmV0d2VlbihxM250aWxkZSk7XG4gIGNvbnN0IHJobyA9IHJhbmRCZXR3ZWVuKHFudGlsZGUpO1xuICBjb25zdCB6ID0gKG1vZFBvdyhudGlsZGUuaDEsIG0sIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgcmhvLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCB1ID0gKG1vZFBvdyhway5nLCBhbHBoYSwgcGsuX24yKSAqIG1vZFBvdyhiZXRhLCBway5uLCBway5fbjIpKSAlIHBrLl9uMjtcbiAgY29uc3QgdyA9IChtb2RQb3cobnRpbGRlLmgxLCBhbHBoYSwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCBnYW1tYSwgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZSgnXFx4MDZcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLm4sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLmcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh6LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh1LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBjb25zdCBzID0gKG1vZFBvdyhyLCBlLCBway5uKSAqIGJldGEpICUgcGsubjtcbiAgY29uc3QgczEgPSBlICogbSArIGFscGhhO1xuICBjb25zdCBzMiA9IGUgKiByaG8gKyBnYW1tYTtcbiAgcmV0dXJuIHsgeiwgdSwgdywgcywgczEsIHMyIH07XG59XG5cbi8qKlxuICogVmVyaWZ5IGEgemVyby1rbm93bGVkZ2UgcmFuZ2UgcHJvb2YgdGhhdCBhbiBlbmNyeXB0ZWQgdmFsdWUgaXMgXCJzbWFsbFwiLlxuICogQHBhcmFtIHtCYXNlQ3VydmV9IGN1cnZlIEFuIGVsbGlwdGljIGN1cnZlIHRvIHVzZSBmb3IgZ3JvdXAgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtb2R1bHVzQml0cyBUaGUgYml0IGNvdW50IG9mIHRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtQdWJsaWNLZXl9IHBrIFRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtEZXNlcmlhbGl6ZWROdGlsZGV9IG50aWxkZSBUaGUgdmVyaWZpZXIncyBOdGlsZGUgdmFsdWVzLlxuICogQHBhcmFtIHtSYW5nZVByb29mfSBwcm9vZiBUaGUgcmFuZ2UgcHJvb2YuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYyBUaGUgY2lwaGVydGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBzdWNjZWVkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeShcbiAgY3VydmU6IEJhc2VDdXJ2ZSxcbiAgbW9kdWx1c0JpdHM6IG51bWJlcixcbiAgcGs6IFB1YmxpY0tleSxcbiAgbnRpbGRlOiBEZXNlcmlhbGl6ZWROdGlsZGUsXG4gIHByb29mOiBSYW5nZVByb29mLFxuICBjOiBiaWdpbnRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBpZiAocHJvb2YuczEgPiBxMykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gIGhhc2gudXBkYXRlKCdcXHgwNlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsubiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsuZywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoYywgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLnosIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLnUsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi53LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgY29uc3QgZSA9IGJpZ0ludEZyb21CdWZmZXJCRShoYXNoLmRpZ2VzdCgpKSAlIHE7XG4gIGxldCBwcm9kdWN0czogYmlnaW50O1xuICBwcm9kdWN0cyA9IChtb2RQb3cocGsuZywgcHJvb2YuczEsIHBrLl9uMikgKiBtb2RQb3cocHJvb2YucywgcGsubiwgcGsuX24yKSAqIG1vZFBvdyhjLCAtZSwgcGsuX24yKSkgJSBway5fbjI7XG4gIGlmIChwcm9vZi51ICE9PSBwcm9kdWN0cykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm9kdWN0cyA9XG4gICAgKCgobW9kUG93KG50aWxkZS5oMSwgcHJvb2YuczEsIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgcHJvb2YuczIsIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGUpICpcbiAgICAgIG1vZFBvdyhwcm9vZi56LCAtZSwgbnRpbGRlLm50aWxkZSkpICVcbiAgICBudGlsZGUubnRpbGRlO1xuICByZXR1cm4gcHJvb2YudyA9PT0gcHJvZHVjdHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB6ZXJvLWtub3dsZWRnZSByYW5nZSBwcm9vZiB0aGF0IGEgaG9tb21vcnBoaWNhbGx5IG1hbmlwdWxhdGVkIHZhbHVlIGlzIFwic21hbGxcIi5cbiAqIEBwYXJhbSB7QmFzZUN1cnZlfSBjdXJ2ZSBBbiBlbGxpcHRpYyBjdXJ2ZSB0byB1c2UgZm9yIGdyb3VwIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW9kdWx1c0JpdHMgVGhlIGJpdCBjb3VudCBvZiB0aGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7UHVibGljS2V5fSBwayBUaGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlfSBudGlsZGUgVGhlIHZlcmlmaWVyJ3MgTnRpbGRlIHZhbHVlcy5cbiAqIEBwYXJhbSB7YmlnaW50fSBjMSBUaGUgb3JpZ2luYWwgY2lwaGVydGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSBjMiBUaGUgbWFuaXB1bGF0ZWQgY2lwaGVydGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSB4IFRoZSBwbGFpbnRleHQgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgb3JpZ2luYWwgcGxhaW50ZXh0LlxuICogQHBhcmFtIHtiaWdpbnR9IHkgVGhlIHBsYWludGV4dCB2YWx1ZSB0aGF0IGlzIGFkZGVkIHRvIHguXG4gKiBAcGFyYW0ge2JpZ2ludH0gciBUaGUgb2JmdXNjYXRpb24gdmFsdWUgdXNlZCB0byBlbmNyeXB0IHguXG4gKiBAcGFyYW0ge2JpZ2ludH0gWCBUaGUgY3VydmUncyBiYXNlIHBvaW50IHJhaXNlZCB0byB4LlxuICogQHJldHVybnMge1JhbmdlUHJvb2ZXaXRoQ2hlY2t9IFRoZSBnZW5lcmF0ZWQgcHJvb2YuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92ZVdpdGhDaGVjayhcbiAgY3VydmU6IEJhc2VDdXJ2ZSxcbiAgbW9kdWx1c0JpdHM6IG51bWJlcixcbiAgcGs6IFB1YmxpY0tleSxcbiAgbnRpbGRlOiBEZXNlcmlhbGl6ZWROdGlsZGUsXG4gIGMxOiBiaWdpbnQsXG4gIGMyOiBiaWdpbnQsXG4gIHg6IGJpZ2ludCxcbiAgeTogYmlnaW50LFxuICByOiBiaWdpbnQsXG4gIFg6IGJpZ2ludFxuKTogUHJvbWlzZTxSYW5nZVByb29mV2l0aENoZWNrPiB7XG4gIGNvbnN0IG1vZHVsdXNCeXRlcyA9IE1hdGguZmxvb3IoKG1vZHVsdXNCaXRzICsgNykgLyA4KTtcbiAgY29uc3QgcSA9IGN1cnZlLm9yZGVyKCk7XG4gIGNvbnN0IHEzID0gcSAqKiBCaWdJbnQoMyk7XG4gIGNvbnN0IHE3ID0gcSAqKiBCaWdJbnQoNyk7XG4gIGNvbnN0IHFudGlsZGUgPSBxICogbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgcTNudGlsZGUgPSBxMyAqIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IGFscGhhID0gcmFuZEJldHdlZW4ocTMpO1xuICBjb25zdCByaG8gPSByYW5kQmV0d2VlbihxbnRpbGRlKTtcbiAgY29uc3Qgc2lnbWEgPSByYW5kQmV0d2VlbihxbnRpbGRlKTtcbiAgY29uc3QgdGF1ID0gcmFuZEJldHdlZW4ocTNudGlsZGUpO1xuICBjb25zdCByaG9wcm0gPSByYW5kQmV0d2VlbihxM250aWxkZSk7XG4gIGNvbnN0IGJldGEgPSBhd2FpdCByYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyhway5uKTtcbiAgY29uc3QgZ2FtbWEgPSByYW5kQmV0d2VlbihxNyk7XG4gIGNvbnN0IHUgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KGN1cnZlLnNjYWxhclJlZHVjZShhbHBoYSkpO1xuICBjb25zdCB6ID0gKG1vZFBvdyhudGlsZGUuaDEsIHgsIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgcmhvLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCB6cHJtID0gKG1vZFBvdyhudGlsZGUuaDEsIGFscGhhLCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHJob3BybSwgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgdCA9IChtb2RQb3cobnRpbGRlLmgxLCB5LCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHNpZ21hLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCB2ID1cbiAgICAoKChtb2RQb3coYzEsIGFscGhhLCBway5fbjIpICogbW9kUG93KHBrLmcsIGdhbW1hLCBway5fbjIpKSAlIHBrLl9uMikgKiBtb2RQb3coYmV0YSwgcGsubiwgcGsuX24yKSkgJSBway5fbjI7XG4gIGNvbnN0IHcgPSAobW9kUG93KG50aWxkZS5oMSwgZ2FtbWEsIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgdGF1LCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gIGhhc2gudXBkYXRlKCdcXHgwZFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsubiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocGsuZywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoWCwgMzMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShjMSwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMyLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodSwgMzMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh6LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh6cHJtLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh0LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRSh2LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBjb25zdCBzID0gKG1vZFBvdyhyLCBlLCBway5uKSAqIGJldGEpICUgcGsubjtcbiAgY29uc3QgczEgPSBlICogeCArIGFscGhhO1xuICBjb25zdCBzMiA9IGUgKiByaG8gKyByaG9wcm07XG4gIGNvbnN0IHQxID0gZSAqIHkgKyBnYW1tYTtcbiAgY29uc3QgdDIgPSBlICogc2lnbWEgKyB0YXU7XG4gIHJldHVybiB7IHosIHpwcm0sIHQsIHYsIHcsIHMsIHMxLCBzMiwgdDEsIHQyLCB1IH07XG59XG5cbi8qKlxuICogVmVyaWZ5IGEgemVyby1rbm93bGVkZ2UgcmFuZ2UgcHJvb2YgdGhhdCBhIGhvbW9tb3JwaGljYWxseSBtYW5pcHVsYXRlZCB2YWx1ZSBpcyBcInNtYWxsXCIuXG4gKiBAcGFyYW0ge0Jhc2VDdXJ2ZX0gY3VydmUgQW4gZWxsaXB0aWMgY3VydmUgdG8gdXNlIGZvciBncm91cCBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtudW1iZXJ9IG1vZHVsdXNCaXRzIFRoZSBiaXQgY291bnQgb2YgdGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge1B1YmxpY0tleX0gcGsgVGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZE50aWxkZX0gbnRpbGRlIFRoZSB2ZXJpZmllcidzIE50aWxkZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge1JhbmdlUHJvb2ZXaXRoQ2hlY2t9IHByb29mIFRoZSByYW5nZSBwcm9vZi5cbiAqIEBwYXJhbSB7YmlnaW50fSBjMSBUaGUgb3JpZ2luYWwgY2lwaGVydGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSBjMiBUaGUgbWFuaXB1bGF0ZWQgY2lwaGVydGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSBYIFRoZSBjdXJ2ZSdzIGJhc2UgcG9pbnQgcmFpc2VkIHRvIHguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2ZXJpZmljYXRpb24gc3VjY2VlZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlXaXRoQ2hlY2soXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBwcm9vZjogUmFuZ2VQcm9vZldpdGhDaGVjayxcbiAgYzE6IGJpZ2ludCxcbiAgYzI6IGJpZ2ludCxcbiAgWDogYmlnaW50XG4pOiBib29sZWFuIHtcbiAgY29uc3QgbW9kdWx1c0J5dGVzID0gTWF0aC5mbG9vcigobW9kdWx1c0JpdHMgKyA3KSAvIDgpO1xuICBjb25zdCBxID0gY3VydmUub3JkZXIoKTtcbiAgY29uc3QgcTMgPSBxICoqIEJpZ0ludCgzKTtcbiAgY29uc3QgcTcgPSBxICoqIEJpZ0ludCg3KTtcbiAgaWYgKHByb29mLnMxID4gcTMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHByb29mLnQxID4gcTcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZSgnXFx4MGRcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLm4sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLmcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKFgsIDMzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoYzEsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShjMiwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLnUsIDMzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YueiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YuenBybSwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudCwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudiwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLncsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBjb25zdCBlID0gYmlnSW50RnJvbUJ1ZmZlckJFKGhhc2guZGlnZXN0KCkpICUgcTtcbiAgY29uc3QgZ1MxID0gY3VydmUuYmFzZVBvaW50TXVsdChjdXJ2ZS5zY2FsYXJSZWR1Y2UocHJvb2YuczEpKTtcbiAgY29uc3QgeEVVID0gY3VydmUucG9pbnRBZGQoY3VydmUucG9pbnRNdWx0aXBseShYLCBlKSwgcHJvb2YudSk7XG4gIGlmIChnUzEgIT09IHhFVSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgbGVmdCwgcmlnaHQ7XG4gIGNvbnN0IGgxRXhwUzEgPSBtb2RQb3cobnRpbGRlLmgxLCBwcm9vZi5zMSwgbnRpbGRlLm50aWxkZSk7XG4gIGNvbnN0IGgyRXhwUzIgPSBtb2RQb3cobnRpbGRlLmgyLCBwcm9vZi5zMiwgbnRpbGRlLm50aWxkZSk7XG4gIGxlZnQgPSAoaDFFeHBTMSAqIGgyRXhwUzIpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgekV4cEUgPSBtb2RQb3cocHJvb2YueiwgZSwgbnRpbGRlLm50aWxkZSk7XG4gIHJpZ2h0ID0gKHpFeHBFICogcHJvb2YuenBybSkgJSBudGlsZGUubnRpbGRlO1xuICBpZiAobGVmdCAhPT0gcmlnaHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaDFFeHBUMSA9IG1vZFBvdyhudGlsZGUuaDEsIHByb29mLnQxLCBudGlsZGUubnRpbGRlKTtcbiAgY29uc3QgaDJFeHBUMiA9IG1vZFBvdyhudGlsZGUuaDIsIHByb29mLnQyLCBudGlsZGUubnRpbGRlKTtcbiAgbGVmdCA9IChoMUV4cFQxICogaDJFeHBUMikgJSBudGlsZGUubnRpbGRlO1xuICBjb25zdCB0RXhwRSA9IG1vZFBvdyhwcm9vZi50LCBlLCBudGlsZGUubnRpbGRlKTtcbiAgcmlnaHQgPSAodEV4cEUgKiBwcm9vZi53KSAlIG50aWxkZS5udGlsZGU7XG4gIGlmIChsZWZ0ICE9PSByaWdodCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjMUV4cFMxID0gbW9kUG93KGMxLCBwcm9vZi5zMSwgcGsuX24yKTtcbiAgY29uc3Qgc0V4cE4gPSBtb2RQb3cocHJvb2YucywgcGsubiwgcGsuX24yKTtcbiAgY29uc3QgZ2FtbWFFeHBUMSA9IG1vZFBvdyhway5nLCBwcm9vZi50MSwgcGsuX24yKTtcbiAgbGVmdCA9ICgoKGMxRXhwUzEgKiBzRXhwTikgJSBway5fbjIpICogZ2FtbWFFeHBUMSkgJSBway5fbjI7XG4gIGNvbnN0IGMyRXhwRSA9IG1vZFBvdyhjMiwgZSwgcGsuX24yKTtcbiAgcmlnaHQgPSAoYzJFeHBFICogcHJvb2YudikgJSBway5fbjI7XG4gIHJldHVybiBsZWZ0ID09PSByaWdodDtcbn1cbiJdfQ==
|
|
401
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Vwcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EvcmFuZ2Vwcm9vZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxtQ0FBb0M7QUFHcEMsNkRBQTZEO0FBQzdELHVEQUFrRDtBQVNsRCxxQ0FBMkY7QUFDM0YsMkNBQXdDO0FBQ3hDLG1DQUE4QztBQUU5QywyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRWhCLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxVQUFvQjtJQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztJQUM5QixNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLFFBQVEsR0FBc0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtRQUN2RSxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFQRCxnREFPQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsU0FBUyxHQUFHLDJCQUFtQixFQUFFLEtBQUssR0FBRyxFQUFFO0lBQ3hFLElBQUksU0FBUyxHQUFHLDJCQUFtQixFQUFFO1FBQ25DLGtDQUFrQztRQUNsQyxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO0tBQzlFO0lBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFVBQVUsQ0FBQztJQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdB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TSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEcsTUFBTSxJQUFJLEdBQUcsQ0FBQyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEgsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyx5QkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUcsTUFBTSxDQUFDLEdBQ0wsQ0FBQyxDQUFDLENBQUMseUJBQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyx5QkFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyx5QkFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7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QU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLHlCQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVELE1BQU0sTUFBTSxHQUFHLHlCQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3BDLE9BQU8sSUFBSSxLQUFLLEtBQUssQ0FBQztBQUN4QixDQUFDO0FBMUVELDBDQTBFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogWmVybyBLbm93bGVkZ2UgUmFuZ2UgUHJvb2ZzIGFzIGRlc2NyaWJlZCBpbiAoVHdvLXBhcnR5IGdlbmVyYXRpb24gb2YgRFNBIHNpZ25hdHVyZXMpWzFdLlxuICogWzFdOiBodHRwczovL3JlaXRlcm1rLmdpdGh1Yi5pby9wYXBlcnMvMjAwNC9JSklTLnBkZlxuICovXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEJhc2VDdXJ2ZSB9IGZyb20gJy4uLy4uL2N1cnZlcyc7XG5pbXBvcnQgeyBQdWJsaWNLZXkgfSBmcm9tICdwYWlsbGllci1iaWdpbnQnO1xuaW1wb3J0IHsgYml0TGVuZ3RoLCByYW5kQmV0d2VlbiB9IGZyb20gJ2JpZ2ludC1jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgbW9kSW52LCBtb2RQb3cgfSBmcm9tICdiaWdpbnQtbW9kLWFyaXRoJztcbmltcG9ydCB7XG4gIERlc2VyaWFsaXplZE50aWxkZSxcbiAgRGVzZXJpYWxpemVkTnRpbGRlUHJvb2YsXG4gIFJTQU1vZHVsdXMsXG4gIFJhbmdlUHJvb2YsXG4gIFJhbmdlUHJvb2ZXaXRoQ2hlY2ssXG4gIERlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRUb0J1ZmZlckJFLCByYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgT3BlblNTTCB9IGZyb20gJy4uLy4uL29wZW5zc2wnO1xuaW1wb3J0IHsgbWluTW9kdWx1c0JpdExlbmd0aCB9IGZyb20gJy4vaW5kZXgnO1xuXG4vLyAxMjggYXMgcmVjb21tZW5kIGJ5IGh0dHBzOi8vYmxvZy52ZXJpY2hhaW5zLmlvL3AvdnNhLTIwMjItMTIwLW11bHRpY2hhaW4ta2V5LWV4dHJhY3Rpb24uXG5jb25zdCBJVEVSQVRJT05TID0gMTI4O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTYWZlUHJpbWVzKGJpdExlbmd0aHM6IG51bWJlcltdKTogUHJvbWlzZTxiaWdpbnRbXT4ge1xuICBjb25zdCBvcGVuU1NMID0gbmV3IE9wZW5TU0woKTtcbiAgYXdhaXQgb3BlblNTTC5pbml0KCk7XG4gIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGJpZ2ludD5bXSA9IGJpdExlbmd0aHMubWFwKChiaXRsZW5ndGg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBvcGVuU1NMLmdlbmVyYXRlU2FmZVByaW1lKGJpdGxlbmd0aCk7XG4gIH0pO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU1vZHVsdXMoYml0bGVuZ3RoID0gbWluTW9kdWx1c0JpdExlbmd0aCwgcmV0cnkgPSAxMCk6IFByb21pc2U8UlNBTW9kdWx1cz4ge1xuICBpZiAoYml0bGVuZ3RoIDwgbWluTW9kdWx1c0JpdExlbmd0aCkge1xuICAgIC8vIGh0dHBzOi8vd3d3LmtleWxlbmd0aC5jb20vZW4vNi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybignR2VuZXJhdGluZyBhIG1vZHVsdXMgd2l0aCBsZXNzIHRoYW4gMzA3MiBpcyBub3QgcmVjb21tZW5kZWQhJyk7XG4gIH1cbiAgY29uc3QgYml0bGVuZ3RoUCA9IE1hdGguZmxvb3IoYml0bGVuZ3RoIC8gMik7XG4gIGNvbnN0IGJpdGxlbmd0aFEgPSBiaXRsZW5ndGggLSBiaXRsZW5ndGhQO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJldHJ5OyBpKyspIHtcbiAgICBjb25zdCBbcCwgcV0gPSBhd2FpdCBnZW5lcmF0ZVNhZmVQcmltZXMoW2JpdGxlbmd0aFAsIGJpdGxlbmd0aFFdKTtcbiAgICBjb25zdCBuID0gcCAqIHE7XG4gICAgLy8gRm9yIGxhcmdlIGJpdCBsZW5ndGhzLCB0aGUgcHJvYmFiaWxpdHkgb2YgZ2VuZXJhdGluZyBhIG1vZHVsdXMgd2l0aCB0aGUgd3JvbmcgYml0IGxlbmd0aCBpcyB2ZXJ5IGxvdy5cbiAgICBpZiAoYml0TGVuZ3RoKG4pICE9PSBiaXRsZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4geyBuLCBxMTogKHAgLSBCaWdJbnQoMSkpIC8gQmlnSW50KDIpLCBxMjogKHEgLSBCaWdJbnQoMSkpIC8gQmlnSW50KDIpIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBVbmFibGUgdG8gZ2VuZXJhdGUgbW9kdWx1cyB3aXRoIGJpdCBsZW5ndGggb2YgJHtiaXRsZW5ndGh9IGFmdGVyICR7cmV0cnl9IHRyaWVzLiBQbGVhc2UgdHJ5IGFnYWluIG9yIHJlYWNoIG91dCB0byBzdXBwb3J0QGJpdGdvLmNvbWBcbiAgKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBcImNoYWxsZW5nZVwiIHZhbHVlcyBmb3IgcmFuZ2UgcHJvb2ZzLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdGxlbmd0aCBUaGUgYml0IGxlbmd0aCBvZiB0aGUgbW9kdWx1cyB0byBnZW5lcmF0ZS4gVGhpcyBzaG91bGRcbiAqIGJlIHRoZSBzYW1lIGFzIHRoZSBiaXQgbGVuZ3RoIG9mIHRoZSBwYWlsbGllciBwdWJsaWMga2V5cyB1c2VkIGZvciBNdEEuXG4gKiBAcmV0dXJucyB7RGVzZXJpYWxpemVkTnRpbGRlfSBUaGUgZ2VuZXJhdGVkIE50aWxkZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU50aWxkZShiaXRsZW5ndGggPSBtaW5Nb2R1bHVzQml0TGVuZ3RoKTogUHJvbWlzZTxEZXNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzPiB7XG4gIGNvbnN0IHsgbjogbnRpbGRlLCBxMSwgcTIgfSA9IGF3YWl0IGdlbmVyYXRlTW9kdWx1cyhiaXRsZW5ndGgpO1xuICBjb25zdCBbZjEsIGYyXSA9IGF3YWl0IFByb21pc2UuYWxsKFtyYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyhudGlsZGUpLCByYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyhudGlsZGUpXSk7XG4gIGNvbnN0IGgxID0gbW9kUG93KGYxLCBCaWdJbnQoMiksIG50aWxkZSk7XG4gIGNvbnN0IGgyID0gbW9kUG93KGgxLCBmMiwgbnRpbGRlKTtcbiAgY29uc3QgYmV0YSA9IG1vZEludihmMiwgcTEgKiBxMik7XG4gIGNvbnN0IFtoMXdydEgyUHJvb2ZzLCBoMndydEgxUHJvb2ZzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZW5lcmF0ZU50aWxkZVByb29mKFxuICAgICAge1xuICAgICAgICBoMTogaDEsXG4gICAgICAgIGgyOiBoMixcbiAgICAgICAgbnRpbGRlOiBudGlsZGUsXG4gICAgICB9LFxuICAgICAgZjIsXG4gICAgICBxMSxcbiAgICAgIHEyXG4gICAgKSxcbiAgICBnZW5lcmF0ZU50aWxkZVByb29mKFxuICAgICAge1xuICAgICAgICBoMTogaDIsXG4gICAgICAgIGgyOiBoMSxcbiAgICAgICAgbnRpbGRlOiBudGlsZGUsXG4gICAgICB9LFxuICAgICAgYmV0YSxcbiAgICAgIHExLFxuICAgICAgcTJcbiAgICApLFxuICBdKTtcbiAgcmV0dXJuIHtcbiAgICBudGlsZGUsXG4gICAgaDEsXG4gICAgaDIsXG4gICAgbnRpbGRlUHJvb2Y6IHtcbiAgICAgIGgxV3J0SDI6IHtcbiAgICAgICAgYWxwaGE6IGgxd3J0SDJQcm9vZnMuYWxwaGEsXG4gICAgICAgIHQ6IGgxd3J0SDJQcm9vZnMudCxcbiAgICAgIH0sXG4gICAgICBoMldydEgxOiB7XG4gICAgICAgIGFscGhhOiBoMndydEgxUHJvb2ZzLmFscGhhLFxuICAgICAgICB0OiBoMndydEgxUHJvb2ZzLnQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogR2VuZXJhdGUgaXRlcmF0aW9ucyBvZiBOdGlsZGUsIGgxLCBoMiBkaXNjcmV0ZSBsb2cgcHJvb2ZzLlxuICogQHBhcmFtIHtEZXNlcmlhbGl6ZWROdGlsZGV9IG50aWxkZSBOdGlsZGUsIGgxLCBoMiB0byBnZW5lcmF0ZSB0aGUgcHJvb2ZzIGZvci5cbiAqIEBwYXJhbSB7YmlnaW50fSB4IEVpdGhlciBhbHBoYSBvciBiZXRhIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGEgZGlzY3JldGUgbG9nIHByb29mIG9mXG4gKiBoMSB3LnIudCBoMiBvciBoMiB3LnIudCBoMS5cbiAqIEBwYXJhbSB7YmlnaW50fSBxMSBUaGUgU29waGllIEdlcm1haW4gcHJpbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdCBzYWZlIHByaW1lIHAxIHVzZWQgdG8gZ2VuZXJhdGUgTnRpbGRlLlxuICogQHBhcmFtIHtiaWdpbnR9IHEyIFRoZSBTb3BoaWUgR2VybWFpbiBwcmltZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlY29uZCBzYWZlIHByaW1lIHAyIHVzZWQgdG8gZ2VuZXJhdGUgTnRpbGRlLlxuICogQHJldHVybnMge050aWxkZVByb29mfSBUaGUgZ2VuZXJhdGVkIE50aWxkZSBQcm9vZnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU50aWxkZVByb29mKFxuICBudGlsZGU6IERlc2VyaWFsaXplZE50aWxkZSxcbiAgeDogYmlnaW50LFxuICBxMTogYmlnaW50LFxuICBxMjogYmlnaW50XG4pOiBQcm9taXNlPERlc2VyaWFsaXplZE50aWxkZVByb29mPiB7XG4gIGNvbnN0IHExTXVsUTIgPSBxMSAqIHEyO1xuICBjb25zdCBhOiBiaWdpbnRbXSA9IFtdO1xuICBjb25zdCBhbHBoYTogYmlnaW50W10gPSBbXTtcbiAgbGV0IG1zZ1RvSGFzaDogQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUuaDEpLFxuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLmgyKSxcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5udGlsZGUpLFxuICBdKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHtcbiAgICBhLnB1c2gocmFuZEJldHdlZW4ocTFNdWxRMikpO1xuICAgIGFscGhhLnB1c2gobW9kUG93KG50aWxkZS5oMSwgYVtpXSwgbnRpbGRlLm50aWxkZSkpO1xuICAgIG1zZ1RvSGFzaCA9IEJ1ZmZlci5jb25jYXQoW21zZ1RvSGFzaCwgYmlnSW50VG9CdWZmZXJCRShhbHBoYVtpXSwgTWF0aC5jZWlsKGJpdExlbmd0aChudGlsZGUubnRpbGRlKSAvIDgpKV0pO1xuICB9XG4gIGNvbnN0IHNpbXVsYXRlZFJlc3BvbnNlID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG1zZ1RvSGFzaCkuZGlnZXN0KCk7XG4gIGNvbnN0IHQ6IGJpZ2ludFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgSVRFUkFUSU9OUzsgaSsrKSB7XG4gICAgLy8gR2V0IHRoZSBpdGggYml0IGZyb20gYSBidWZmZXIgb2YgYnl0ZXMuXG4gICAgY29uc3QgaXRoQml0ID0gKHNpbXVsYXRlZFJlc3BvbnNlW01hdGguZmxvb3IoaSAvIDgpXSA+PiAoNyAtIChpICUgOCkpKSAmIDE7XG4gICAgdC5wdXNoKChhW2ldICsgKChCaWdJbnQoaXRoQml0KSAqIHgpICUgcTFNdWxRMikpICUgcTFNdWxRMik7XG4gIH1cbiAgcmV0dXJuIHsgYWxwaGEsIHQgfTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgZGlzY3JldGUgbG9nIHByb29mcyBvZiBoMSBhbmQgaDIgbW9kIE50aWxkZS5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlfSBudGlsZGUgTnRpbGRlLCBoMSwgaDIgdG8gZ2VuZXJhdGUgdGhlIHByb29mcyBmb3IuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZE50aWxkZVByb29mfSBudGlsZGVQcm9vZiBOdGlsZGUgUHJvb2ZzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBwcm9vZiBpcyB2ZXJpZmllZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TnRpbGRlUHJvb2YoXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBudGlsZGVQcm9vZjogRGVzZXJpYWxpemVkTnRpbGRlUHJvb2Zcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBoMU1vZE50aWxkZSA9IG50aWxkZS5oMSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IGgyTW9kTnRpbGRlID0gbnRpbGRlLmgyICUgbnRpbGRlLm50aWxkZTtcbiAgaWYgKGgxTW9kTnRpbGRlID09PSBCaWdJbnQoMCkgfHwgaDJNb2ROdGlsZGUgPT09IEJpZ0ludCgwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaDFNb2ROdGlsZGUgPT09IEJpZ0ludCgxKSB8fCBoMk1vZE50aWxkZSA9PT0gQmlnSW50KDEpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChoMU1vZE50aWxkZSA9PT0gaDJNb2ROdGlsZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIG50aWxkZVByb29mLmFscGhhLmxlbmd0aCA+IDI1NiB8fFxuICAgIG50aWxkZVByb29mLmFscGhhLmxlbmd0aCAhPT0gSVRFUkFUSU9OUyB8fFxuICAgIG50aWxkZVByb29mLnQubGVuZ3RoICE9PSBJVEVSQVRJT05TXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgbXNnVG9IYXNoOiBCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFtcbiAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZS5oMSksXG4gICAgYmlnSW50VG9CdWZmZXJCRShudGlsZGUuaDIpLFxuICAgIGJpZ0ludFRvQnVmZmVyQkUobnRpbGRlLm50aWxkZSksXG4gIF0pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG50aWxkZVByb29mLmFscGhhLmxlbmd0aDsgaSsrKSB7XG4gICAgbXNnVG9IYXNoID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBtc2dUb0hhc2gsXG4gICAgICBiaWdJbnRUb0J1ZmZlckJFKG50aWxkZVByb29mLmFscGhhW2ldLCBNYXRoLmNlaWwoYml0TGVuZ3RoKG50aWxkZS5udGlsZGUpIC8gOCkpLFxuICAgIF0pO1xuICB9XG4gIGNvbnN0IHNpbXVsYXRlZFJlc3BvbnNlID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG1zZ1RvSGFzaCkuZGlnZXN0KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnRpbGRlUHJvb2YuYWxwaGEubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBHZXQgdGhlIGl0aCBiaXQgZnJvbSBhIGJ1ZmZlciBvZiBieXRlcy5cbiAgICBjb25zdCBpdGhCaXQgPSAoc2ltdWxhdGVkUmVzcG9uc2VbTWF0aC5mbG9vcihpIC8gOCldID4+ICg3IC0gKGkgJSA4KSkpICYgMTtcbiAgICBjb25zdCBoMVBvd1RpID0gbW9kUG93KG50aWxkZS5oMSwgbnRpbGRlUHJvb2YudFtpXSwgbnRpbGRlLm50aWxkZSk7XG4gICAgY29uc3QgaDJQb3dDaSA9IG1vZFBvdyhudGlsZGUuaDIsIEJpZ0ludChpdGhCaXQpLCBudGlsZGUubnRpbGRlKTtcbiAgICBjb25zdCBhbHBoYU11bGgyUG93Q2kgPSAobnRpbGRlUHJvb2YuYWxwaGFbaV0gKiBoMlBvd0NpKSAlIG50aWxkZS5udGlsZGU7XG4gICAgaWYgKGgxUG93VGkgIT09IGFscGhhTXVsaDJQb3dDaSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSB6ZXJvLWtub3dsZWRnZSByYW5nZSBwcm9vZiB0aGF0IGFuIGVuY3J5cHRlZCB2YWx1ZSBpcyBcInNtYWxsXCIuXG4gKiBAcGFyYW0ge0Jhc2VDdXJ2ZX0gY3VydmUgQW4gZWxsaXB0aWMgY3VydmUgdG8gdXNlIGZvciBncm91cCBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtudW1iZXJ9IG1vZHVsdXNCaXRzIFRoZSBiaXQgY291bnQgb2YgdGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge1B1YmxpY0tleX0gcGsgVGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZE50aWxkZX0gbnRpbGRlIFRoZSB2ZXJpZmllcidzIE50aWxkZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYyBUaGUgY2lwaGVydGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSBtIFRoZSBwbGFpbnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0gciBUaGUgb2JmdXNjYXRpb24gdmFsdWUgdXNlZCB0byBlbmNyeXB0IG0uXG4gKiBAcmV0dXJucyB7UmFuZ2VQcm9vZn0gVGhlIGdlbmVyYXRlZCBwcm9vZi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3ZlKFxuICBjdXJ2ZTogQmFzZUN1cnZlLFxuICBtb2R1bHVzQml0czogbnVtYmVyLFxuICBwazogUHVibGljS2V5LFxuICBudGlsZGU6IERlc2VyaWFsaXplZE50aWxkZSxcbiAgYzogYmlnaW50LFxuICBtOiBiaWdpbnQsXG4gIHI6IGJpZ2ludFxuKTogUHJvbWlzZTxSYW5nZVByb29mPiB7XG4gIGNvbnN0IG1vZHVsdXNCeXRlcyA9IE1hdGguZmxvb3IoKG1vZHVsdXNCaXRzICsgNykgLyA4KTtcbiAgY29uc3QgcSA9IGN1cnZlLm9yZGVyKCk7XG4gIGNvbnN0IHEzID0gcSAqKiBCaWdJbnQoMyk7XG4gIGNvbnN0IHFudGlsZGUgPSBxICogbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgcTNudGlsZGUgPSBxMyAqIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IGFscGhhID0gcmFuZEJldHdlZW4ocTMpO1xuICBjb25zdCBiZXRhID0gYXdhaXQgcmFuZG9tUG9zaXRpdmVDb1ByaW1lVG8ocGsubik7XG4gIGNvbnN0IGdhbW1hID0gcmFuZEJldHdlZW4ocTNudGlsZGUpO1xuICBjb25zdCByaG8gPSByYW5kQmV0d2VlbihxbnRpbGRlKTtcbiAgY29uc3QgeiA9IChtb2RQb3cobnRpbGRlLmgxLCBtLCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHJobywgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgdSA9IChtb2RQb3cocGsuZywgYWxwaGEsIHBrLl9uMikgKiBtb2RQb3coYmV0YSwgcGsubiwgcGsuX24yKSkgJSBway5fbjI7XG4gIGNvbnN0IHcgPSAobW9kUG93KG50aWxkZS5oMSwgYWxwaGEsIG50aWxkZS5udGlsZGUpICogbW9kUG93KG50aWxkZS5oMiwgZ2FtbWEsIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoJ1xceDA2XFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDAnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5uLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5nLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShjLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoeiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodSwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBjb25zdCBlID0gYmlnSW50RnJvbUJ1ZmZlckJFKGhhc2guZGlnZXN0KCkpICUgcTtcbiAgY29uc3QgcyA9IChtb2RQb3cociwgZSwgcGsubikgKiBiZXRhKSAlIHBrLm47XG4gIGNvbnN0IHMxID0gZSAqIG0gKyBhbHBoYTtcbiAgY29uc3QgczIgPSBlICogcmhvICsgZ2FtbWE7XG4gIHJldHVybiB7IHosIHUsIHcsIHMsIHMxLCBzMiB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSBhIHplcm8ta25vd2xlZGdlIHJhbmdlIHByb29mIHRoYXQgYW4gZW5jcnlwdGVkIHZhbHVlIGlzIFwic21hbGxcIi5cbiAqIEBwYXJhbSB7QmFzZUN1cnZlfSBjdXJ2ZSBBbiBlbGxpcHRpYyBjdXJ2ZSB0byB1c2UgZm9yIGdyb3VwIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW9kdWx1c0JpdHMgVGhlIGJpdCBjb3VudCBvZiB0aGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7UHVibGljS2V5fSBwayBUaGUgcHJvdmVyJ3MgcHVibGljIGtleS5cbiAqIEBwYXJhbSB7RGVzZXJpYWxpemVkTnRpbGRlfSBudGlsZGUgVGhlIHZlcmlmaWVyJ3MgTnRpbGRlIHZhbHVlcy5cbiAqIEBwYXJhbSB7UmFuZ2VQcm9vZn0gcHJvb2YgVGhlIHJhbmdlIHByb29mLlxuICogQHBhcmFtIHtiaWdpbnR9IGMgVGhlIGNpcGhlcnRleHQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2ZXJpZmljYXRpb24gc3VjY2VlZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnkoXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBwcm9vZjogUmFuZ2VQcm9vZixcbiAgYzogYmlnaW50XG4pOiBib29sZWFuIHtcbiAgY29uc3QgbW9kdWx1c0J5dGVzID0gTWF0aC5mbG9vcigobW9kdWx1c0JpdHMgKyA3KSAvIDgpO1xuICBjb25zdCBxID0gY3VydmUub3JkZXIoKTtcbiAgY29uc3QgcTMgPSBxICoqIEJpZ0ludCgzKTtcbiAgaWYgKHByb29mLnMxID4gcTMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZSgnXFx4MDZcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLm4sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLmcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi56LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi51LCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUocHJvb2YudywgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGNvbnN0IGUgPSBiaWdJbnRGcm9tQnVmZmVyQkUoaGFzaC5kaWdlc3QoKSkgJSBxO1xuICBsZXQgcHJvZHVjdHM6IGJpZ2ludDtcbiAgcHJvZHVjdHMgPSAobW9kUG93KHBrLmcsIHByb29mLnMxLCBway5fbjIpICogbW9kUG93KHByb29mLnMsIHBrLm4sIHBrLl9uMikgKiBtb2RQb3coYywgLWUsIHBrLl9uMikpICUgcGsuX24yO1xuICBpZiAocHJvb2YudSAhPT0gcHJvZHVjdHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvZHVjdHMgPVxuICAgICgoKG1vZFBvdyhudGlsZGUuaDEsIHByb29mLnMxLCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHByb29mLnMyLCBudGlsZGUubnRpbGRlKSkgJSBudGlsZGUubnRpbGRlKSAqXG4gICAgICBtb2RQb3cocHJvb2YueiwgLWUsIG50aWxkZS5udGlsZGUpKSAlXG4gICAgbnRpbGRlLm50aWxkZTtcbiAgcmV0dXJuIHByb29mLncgPT09IHByb2R1Y3RzO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgemVyby1rbm93bGVkZ2UgcmFuZ2UgcHJvb2YgdGhhdCBhIGhvbW9tb3JwaGljYWxseSBtYW5pcHVsYXRlZCB2YWx1ZSBpcyBcInNtYWxsXCIuXG4gKiBAcGFyYW0ge0Jhc2VDdXJ2ZX0gY3VydmUgQW4gZWxsaXB0aWMgY3VydmUgdG8gdXNlIGZvciBncm91cCBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtudW1iZXJ9IG1vZHVsdXNCaXRzIFRoZSBiaXQgY291bnQgb2YgdGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge1B1YmxpY0tleX0gcGsgVGhlIHByb3ZlcidzIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZE50aWxkZX0gbnRpbGRlIFRoZSB2ZXJpZmllcidzIE50aWxkZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzEgVGhlIG9yaWdpbmFsIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzIgVGhlIG1hbmlwdWxhdGVkIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0geCBUaGUgcGxhaW50ZXh0IHZhbHVlIG11bHRpcGxpZWQgYnkgdGhlIG9yaWdpbmFsIHBsYWludGV4dC5cbiAqIEBwYXJhbSB7YmlnaW50fSB5IFRoZSBwbGFpbnRleHQgdmFsdWUgdGhhdCBpcyBhZGRlZCB0byB4LlxuICogQHBhcmFtIHtiaWdpbnR9IHIgVGhlIG9iZnVzY2F0aW9uIHZhbHVlIHVzZWQgdG8gZW5jcnlwdCB4LlxuICogQHBhcmFtIHtiaWdpbnR9IFggVGhlIGN1cnZlJ3MgYmFzZSBwb2ludCByYWlzZWQgdG8geC5cbiAqIEByZXR1cm5zIHtSYW5nZVByb29mV2l0aENoZWNrfSBUaGUgZ2VuZXJhdGVkIHByb29mLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmVXaXRoQ2hlY2soXG4gIGN1cnZlOiBCYXNlQ3VydmUsXG4gIG1vZHVsdXNCaXRzOiBudW1iZXIsXG4gIHBrOiBQdWJsaWNLZXksXG4gIG50aWxkZTogRGVzZXJpYWxpemVkTnRpbGRlLFxuICBjMTogYmlnaW50LFxuICBjMjogYmlnaW50LFxuICB4OiBiaWdpbnQsXG4gIHk6IGJpZ2ludCxcbiAgcjogYmlnaW50LFxuICBYOiBiaWdpbnRcbik6IFByb21pc2U8UmFuZ2VQcm9vZldpdGhDaGVjaz4ge1xuICBjb25zdCBtb2R1bHVzQnl0ZXMgPSBNYXRoLmZsb29yKChtb2R1bHVzQml0cyArIDcpIC8gOCk7XG4gIGNvbnN0IHEgPSBjdXJ2ZS5vcmRlcigpO1xuICBjb25zdCBxMyA9IHEgKiogQmlnSW50KDMpO1xuICBjb25zdCBxNyA9IHEgKiogQmlnSW50KDcpO1xuICBjb25zdCBxbnRpbGRlID0gcSAqIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHEzbnRpbGRlID0gcTMgKiBudGlsZGUubnRpbGRlO1xuICBjb25zdCBhbHBoYSA9IHJhbmRCZXR3ZWVuKHEzKTtcbiAgY29uc3QgcmhvID0gcmFuZEJldHdlZW4ocW50aWxkZSk7XG4gIGNvbnN0IHNpZ21hID0gcmFuZEJldHdlZW4ocW50aWxkZSk7XG4gIGNvbnN0IHRhdSA9IHJhbmRCZXR3ZWVuKHEzbnRpbGRlKTtcbiAgY29uc3QgcmhvcHJtID0gcmFuZEJldHdlZW4ocTNudGlsZGUpO1xuICBjb25zdCBiZXRhID0gYXdhaXQgcmFuZG9tUG9zaXRpdmVDb1ByaW1lVG8ocGsubik7XG4gIGNvbnN0IGdhbW1hID0gcmFuZEJldHdlZW4ocTcpO1xuICBjb25zdCB1ID0gY3VydmUuYmFzZVBvaW50TXVsdChjdXJ2ZS5zY2FsYXJSZWR1Y2UoYWxwaGEpKTtcbiAgY29uc3QgeiA9IChtb2RQb3cobnRpbGRlLmgxLCB4LCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHJobywgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgenBybSA9IChtb2RQb3cobnRpbGRlLmgxLCBhbHBoYSwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCByaG9wcm0sIG50aWxkZS5udGlsZGUpKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHQgPSAobW9kUG93KG50aWxkZS5oMSwgeSwgbnRpbGRlLm50aWxkZSkgKiBtb2RQb3cobnRpbGRlLmgyLCBzaWdtYSwgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgdiA9XG4gICAgKCgobW9kUG93KGMxLCBhbHBoYSwgcGsuX24yKSAqIG1vZFBvdyhway5nLCBnYW1tYSwgcGsuX24yKSkgJSBway5fbjIpICogbW9kUG93KGJldGEsIHBrLm4sIHBrLl9uMikpICUgcGsuX24yO1xuICBjb25zdCB3ID0gKG1vZFBvdyhudGlsZGUuaDEsIGdhbW1hLCBudGlsZGUubnRpbGRlKSAqIG1vZFBvdyhudGlsZGUuaDIsIHRhdSwgbnRpbGRlLm50aWxkZSkpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZSgnXFx4MGRcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLm4sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHBrLmcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKFgsIDMzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoYzEsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShjMiwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHUsIDMzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoeiwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoenBybSwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodCwgbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUodiwgMiAqIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHcsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBjb25zdCBlID0gYmlnSW50RnJvbUJ1ZmZlckJFKGhhc2guZGlnZXN0KCkpICUgcTtcbiAgY29uc3QgcyA9IChtb2RQb3cociwgZSwgcGsubikgKiBiZXRhKSAlIHBrLm47XG4gIGNvbnN0IHMxID0gZSAqIHggKyBhbHBoYTtcbiAgY29uc3QgczIgPSBlICogcmhvICsgcmhvcHJtO1xuICBjb25zdCB0MSA9IGUgKiB5ICsgZ2FtbWE7XG4gIGNvbnN0IHQyID0gZSAqIHNpZ21hICsgdGF1O1xuICByZXR1cm4geyB6LCB6cHJtLCB0LCB2LCB3LCBzLCBzMSwgczIsIHQxLCB0MiwgdSB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSBhIHplcm8ta25vd2xlZGdlIHJhbmdlIHByb29mIHRoYXQgYSBob21vbW9ycGhpY2FsbHkgbWFuaXB1bGF0ZWQgdmFsdWUgaXMgXCJzbWFsbFwiLlxuICogQHBhcmFtIHtCYXNlQ3VydmV9IGN1cnZlIEFuIGVsbGlwdGljIGN1cnZlIHRvIHVzZSBmb3IgZ3JvdXAgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtb2R1bHVzQml0cyBUaGUgYml0IGNvdW50IG9mIHRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtQdWJsaWNLZXl9IHBrIFRoZSBwcm92ZXIncyBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtEZXNlcmlhbGl6ZWROdGlsZGV9IG50aWxkZSBUaGUgdmVyaWZpZXIncyBOdGlsZGUgdmFsdWVzLlxuICogQHBhcmFtIHtSYW5nZVByb29mV2l0aENoZWNrfSBwcm9vZiBUaGUgcmFuZ2UgcHJvb2YuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzEgVGhlIG9yaWdpbmFsIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0gYzIgVGhlIG1hbmlwdWxhdGVkIGNpcGhlcnRleHQuXG4gKiBAcGFyYW0ge2JpZ2ludH0gWCBUaGUgY3VydmUncyBiYXNlIHBvaW50IHJhaXNlZCB0byB4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHN1Y2NlZWRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5V2l0aENoZWNrKFxuICBjdXJ2ZTogQmFzZUN1cnZlLFxuICBtb2R1bHVzQml0czogbnVtYmVyLFxuICBwazogUHVibGljS2V5LFxuICBudGlsZGU6IERlc2VyaWFsaXplZE50aWxkZSxcbiAgcHJvb2Y6IFJhbmdlUHJvb2ZXaXRoQ2hlY2ssXG4gIGMxOiBiaWdpbnQsXG4gIGMyOiBiaWdpbnQsXG4gIFg6IGJpZ2ludFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1vZHVsdXNCeXRlcyA9IE1hdGguZmxvb3IoKG1vZHVsdXNCaXRzICsgNykgLyA4KTtcbiAgY29uc3QgcSA9IGN1cnZlLm9yZGVyKCk7XG4gIGNvbnN0IHEzID0gcSAqKiBCaWdJbnQoMyk7XG4gIGNvbnN0IHE3ID0gcSAqKiBCaWdJbnQoNyk7XG4gIGlmIChwcm9vZi5zMSA+IHEzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChwcm9vZi50MSA+IHE3KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoJ1xceDBkXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDAnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5uLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShway5nLCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShYLCAzMykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKGMxLCAyICogbW9kdWx1c0J5dGVzKSk7XG4gIGhhc2gudXBkYXRlKCckJyk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoYzIsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi51LCAzMykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLnosIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLnpwcm0sIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLnQsIG1vZHVsdXNCeXRlcykpO1xuICBoYXNoLnVwZGF0ZSgnJCcpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHByb29mLnYsIDIgKiBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShwcm9vZi53LCBtb2R1bHVzQnl0ZXMpKTtcbiAgaGFzaC51cGRhdGUoJyQnKTtcbiAgY29uc3QgZSA9IGJpZ0ludEZyb21CdWZmZXJCRShoYXNoLmRpZ2VzdCgpKSAlIHE7XG4gIGNvbnN0IGdTMSA9IGN1cnZlLmJhc2VQb2ludE11bHQoY3VydmUuc2NhbGFyUmVkdWNlKHByb29mLnMxKSk7XG4gIGNvbnN0IHhFVSA9IGN1cnZlLnBvaW50QWRkKGN1cnZlLnBvaW50TXVsdGlwbHkoWCwgZSksIHByb29mLnUpO1xuICBpZiAoZ1MxICE9PSB4RVUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbGV0IGxlZnQsIHJpZ2h0O1xuICBjb25zdCBoMUV4cFMxID0gbW9kUG93KG50aWxkZS5oMSwgcHJvb2YuczEsIG50aWxkZS5udGlsZGUpO1xuICBjb25zdCBoMkV4cFMyID0gbW9kUG93KG50aWxkZS5oMiwgcHJvb2YuczIsIG50aWxkZS5udGlsZGUpO1xuICBsZWZ0ID0gKGgxRXhwUzEgKiBoMkV4cFMyKSAlIG50aWxkZS5udGlsZGU7XG4gIGNvbnN0IHpFeHBFID0gbW9kUG93KHByb29mLnosIGUsIG50aWxkZS5udGlsZGUpO1xuICByaWdodCA9ICh6RXhwRSAqIHByb29mLnpwcm0pICUgbnRpbGRlLm50aWxkZTtcbiAgaWYgKGxlZnQgIT09IHJpZ2h0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGgxRXhwVDEgPSBtb2RQb3cobnRpbGRlLmgxLCBwcm9vZi50MSwgbnRpbGRlLm50aWxkZSk7XG4gIGNvbnN0IGgyRXhwVDIgPSBtb2RQb3cobnRpbGRlLmgyLCBwcm9vZi50MiwgbnRpbGRlLm50aWxkZSk7XG4gIGxlZnQgPSAoaDFFeHBUMSAqIGgyRXhwVDIpICUgbnRpbGRlLm50aWxkZTtcbiAgY29uc3QgdEV4cEUgPSBtb2RQb3cocHJvb2YudCwgZSwgbnRpbGRlLm50aWxkZSk7XG4gIHJpZ2h0ID0gKHRFeHBFICogcHJvb2YudykgJSBudGlsZGUubnRpbGRlO1xuICBpZiAobGVmdCAhPT0gcmlnaHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYzFFeHBTMSA9IG1vZFBvdyhjMSwgcHJvb2YuczEsIHBrLl9uMik7XG4gIGNvbnN0IHNFeHBOID0gbW9kUG93KHByb29mLnMsIHBrLm4sIHBrLl9uMik7XG4gIGNvbnN0IGdhbW1hRXhwVDEgPSBtb2RQb3cocGsuZywgcHJvb2YudDEsIHBrLl9uMik7XG4gIGxlZnQgPSAoKChjMUV4cFMxICogc0V4cE4pICUgcGsuX24yKSAqIGdhbW1hRXhwVDEpICUgcGsuX24yO1xuICBjb25zdCBjMkV4cEUgPSBtb2RQb3coYzIsIGUsIHBrLl9uMik7XG4gIHJpZ2h0ID0gKGMyRXhwRSAqIHByb29mLnYpICUgcGsuX24yO1xuICByZXR1cm4gbGVmdCA9PT0gcmlnaHQ7XG59XG4iXX0=
|
|
@@ -12,37 +12,89 @@ interface Ntilde<T> {
|
|
|
12
12
|
h2: T;
|
|
13
13
|
}
|
|
14
14
|
export declare type DeserializedNtilde = Ntilde<bigint>;
|
|
15
|
-
|
|
16
|
-
* Deserializes a challenge from hex strings to bigint
|
|
17
|
-
* @param challenge
|
|
18
|
-
*/
|
|
19
|
-
export declare function deserializeNtilde(challenge: SerializedNtilde): DeserializedNtilde;
|
|
15
|
+
export declare type SerializedNtilde = Ntilde<string>;
|
|
20
16
|
export declare type DeserializedNtildeProof = NtildeProof<bigint>;
|
|
17
|
+
export declare type SerializedNtildeProof = NtildeProof<string>;
|
|
21
18
|
export declare type DeserializedNtildeProofs = NtildeProofs<bigint>;
|
|
19
|
+
export declare type SerializedNtildeProofs = NtildeProofs<string>;
|
|
20
|
+
/**
|
|
21
|
+
* The ntilde proofs are done non-interactively,
|
|
22
|
+
* therefore a party generates both ntilde, h1, h2 and the proofs without
|
|
23
|
+
* interaction with the other party.
|
|
24
|
+
*/
|
|
22
25
|
export declare type DeserializedNtildeWithProofs = DeserializedNtilde & {
|
|
23
26
|
ntildeProof: DeserializedNtildeProofs;
|
|
24
27
|
};
|
|
28
|
+
export declare type SerializedNtildeWithProofs = SerializedNtilde & {
|
|
29
|
+
ntildeProof: SerializedNtildeProofs;
|
|
30
|
+
};
|
|
25
31
|
/**
|
|
26
|
-
* Deserializes a challenge
|
|
32
|
+
* Deserializes a challenge from hex strings to bigint
|
|
27
33
|
* @param challenge
|
|
28
34
|
*/
|
|
29
|
-
export declare function
|
|
30
|
-
export declare type SerializedNtilde = Ntilde<string>;
|
|
35
|
+
export declare function deserializeNtilde(challenge: SerializedNtilde): DeserializedNtilde;
|
|
31
36
|
/**
|
|
32
37
|
* Serializes a challenge from big int to hex strings.
|
|
33
38
|
* @param challenge
|
|
34
39
|
*/
|
|
35
40
|
export declare function serializeNtilde(challenge: DeserializedNtilde): SerializedNtilde;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Deserializes a challenge and it's proofs from hex strings to bigint
|
|
43
|
+
* @param challenge
|
|
44
|
+
*/
|
|
45
|
+
export declare function deserializeNtildeWithProofs(challenge: SerializedNtildeWithProofs): DeserializedNtildeWithProofs;
|
|
41
46
|
/**
|
|
42
47
|
* Serializes a challenge and it's proofs from big int to hex strings.
|
|
43
48
|
* @param challenge
|
|
44
49
|
*/
|
|
45
50
|
export declare function serializeNtildeWithProofs(challenge: DeserializedNtildeWithProofs): SerializedNtildeWithProofs;
|
|
51
|
+
declare type PallierChallenge<T> = {
|
|
52
|
+
p: T[];
|
|
53
|
+
};
|
|
54
|
+
declare type PallierChallengeProof<T> = {
|
|
55
|
+
sigma: T[];
|
|
56
|
+
};
|
|
57
|
+
export declare type DeserializedPallierChallenge = PallierChallenge<bigint>;
|
|
58
|
+
export declare type SerializedPallierChallenge = PallierChallenge<string>;
|
|
59
|
+
export declare type DeserializedPallierChallengeProofs = PallierChallengeProof<bigint>;
|
|
60
|
+
export declare type SerializedPallierChallengeProofs = PallierChallengeProof<string>;
|
|
61
|
+
/**
|
|
62
|
+
* The pallier proofs are done interactively between two parties.
|
|
63
|
+
* If party A is completing a pallier proof $sigma$ with party B, then $p$ refers to
|
|
64
|
+
* a challenge given to A by B, and $sigma$ represents the proof to the challenge
|
|
65
|
+
*/
|
|
66
|
+
export declare type DeserializedPallierChallengeWithProofs = DeserializedPallierChallenge & DeserializedPallierChallengeProofs;
|
|
67
|
+
export declare type SerializedPallierChallengeWithProofs = SerializedPallierChallenge & SerializedPallierChallengeProofs;
|
|
68
|
+
/**
|
|
69
|
+
* Deserializes a pallier challenge to hex strings.
|
|
70
|
+
* @param challenge
|
|
71
|
+
*/
|
|
72
|
+
export declare function deserializePallierChallenge(challenge: SerializedPallierChallenge): DeserializedPallierChallenge;
|
|
73
|
+
/**
|
|
74
|
+
* Deserializes a pallier challenge proof to hex strings.
|
|
75
|
+
* @param challenge
|
|
76
|
+
*/
|
|
77
|
+
export declare function deserializePallierChallengeProofs(challenge: SerializedPallierChallengeProofs): DeserializedPallierChallengeProofs;
|
|
78
|
+
/**
|
|
79
|
+
* Deserializes a pallier challenge and its proof to hex strings.
|
|
80
|
+
* @param challengeWithProofs
|
|
81
|
+
*/
|
|
82
|
+
export declare function deserializePallierChallengeWithProofs(challengeWithProofs: SerializedPallierChallengeWithProofs): DeserializedPallierChallengeWithProofs;
|
|
83
|
+
/**
|
|
84
|
+
* Serializes a pallier challenge to hex strings.
|
|
85
|
+
* @param challenge
|
|
86
|
+
*/
|
|
87
|
+
export declare function serializePallierChallenge(challenge: DeserializedPallierChallenge): SerializedPallierChallenge;
|
|
88
|
+
/**
|
|
89
|
+
* Serializes a pallier challenge proof to hex strings.
|
|
90
|
+
* @param challenge
|
|
91
|
+
*/
|
|
92
|
+
export declare function serializePallierChallengeProofs(challenge: DeserializedPallierChallengeProofs): SerializedPallierChallengeProofs;
|
|
93
|
+
/**
|
|
94
|
+
* Serializes a pallier challenge and its proof to hex strings.
|
|
95
|
+
* @param challengeWithProofs
|
|
96
|
+
*/
|
|
97
|
+
export declare function serializePallierChallengeWithProofs(challengeWithProofs: DeserializedPallierChallengeWithProofs): SerializedPallierChallengeWithProofs;
|
|
46
98
|
export interface RSAModulus {
|
|
47
99
|
n: bigint;
|
|
48
100
|
q1: bigint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/types.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,CAAC,EAAE,CAAC,EAAE,CAAC;CACR;AAGD,UAAU,YAAY,CAAC,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CACzB;AAGD,UAAU,MAAM,CAAC,CAAC;IAChB,MAAM,EAAE,CAAC,CAAC;IACV,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;CACP;AAED,oBAAY,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAChD
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.serializePallierChallengeWithProofs = exports.serializePallierChallengeProofs = exports.serializePallierChallenge = exports.deserializePallierChallengeWithProofs = exports.deserializePallierChallengeProofs = exports.deserializePallierChallenge = exports.serializeNtildeWithProofs = exports.deserializeNtildeWithProofs = exports.serializeNtilde = exports.deserializeNtilde = void 0;
|
|
4
4
|
// Ntilde Proof where both alpha and t are a set of 128 proofs each.
|
|
5
5
|
const util_1 = require("../../util");
|
|
6
6
|
/**
|
|
@@ -15,6 +15,18 @@ function deserializeNtilde(challenge) {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
exports.deserializeNtilde = deserializeNtilde;
|
|
18
|
+
/**
|
|
19
|
+
* Serializes a challenge from big int to hex strings.
|
|
20
|
+
* @param challenge
|
|
21
|
+
*/
|
|
22
|
+
function serializeNtilde(challenge) {
|
|
23
|
+
return {
|
|
24
|
+
ntilde: util_1.bigIntToHex(challenge.ntilde),
|
|
25
|
+
h1: util_1.bigIntToHex(challenge.h1),
|
|
26
|
+
h2: util_1.bigIntToHex(challenge.h2),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
exports.serializeNtilde = serializeNtilde;
|
|
18
30
|
/**
|
|
19
31
|
* Deserializes a challenge and it's proofs from hex strings to bigint
|
|
20
32
|
* @param challenge
|
|
@@ -35,18 +47,6 @@ function deserializeNtildeWithProofs(challenge) {
|
|
|
35
47
|
};
|
|
36
48
|
}
|
|
37
49
|
exports.deserializeNtildeWithProofs = deserializeNtildeWithProofs;
|
|
38
|
-
/**
|
|
39
|
-
* Serializes a challenge from big int to hex strings.
|
|
40
|
-
* @param challenge
|
|
41
|
-
*/
|
|
42
|
-
function serializeNtilde(challenge) {
|
|
43
|
-
return {
|
|
44
|
-
ntilde: util_1.bigIntToHex(challenge.ntilde),
|
|
45
|
-
h1: util_1.bigIntToHex(challenge.h1),
|
|
46
|
-
h2: util_1.bigIntToHex(challenge.h2),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
exports.serializeNtilde = serializeNtilde;
|
|
50
50
|
/**
|
|
51
51
|
* Serializes a challenge and it's proofs from big int to hex strings.
|
|
52
52
|
* @param challenge
|
|
@@ -67,4 +67,66 @@ function serializeNtildeWithProofs(challenge) {
|
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
exports.serializeNtildeWithProofs = serializeNtildeWithProofs;
|
|
70
|
-
|
|
70
|
+
/**
|
|
71
|
+
* Deserializes a pallier challenge to hex strings.
|
|
72
|
+
* @param challenge
|
|
73
|
+
*/
|
|
74
|
+
function deserializePallierChallenge(challenge) {
|
|
75
|
+
return {
|
|
76
|
+
p: util_1.convertHexArrToBigIntArr(challenge.p),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
exports.deserializePallierChallenge = deserializePallierChallenge;
|
|
80
|
+
/**
|
|
81
|
+
* Deserializes a pallier challenge proof to hex strings.
|
|
82
|
+
* @param challenge
|
|
83
|
+
*/
|
|
84
|
+
function deserializePallierChallengeProofs(challenge) {
|
|
85
|
+
return {
|
|
86
|
+
sigma: util_1.convertHexArrToBigIntArr(challenge.sigma),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
exports.deserializePallierChallengeProofs = deserializePallierChallengeProofs;
|
|
90
|
+
/**
|
|
91
|
+
* Deserializes a pallier challenge and its proof to hex strings.
|
|
92
|
+
* @param challengeWithProofs
|
|
93
|
+
*/
|
|
94
|
+
function deserializePallierChallengeWithProofs(challengeWithProofs) {
|
|
95
|
+
return {
|
|
96
|
+
p: deserializePallierChallenge(challengeWithProofs).p,
|
|
97
|
+
sigma: deserializePallierChallengeProofs(challengeWithProofs).sigma,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
exports.deserializePallierChallengeWithProofs = deserializePallierChallengeWithProofs;
|
|
101
|
+
/**
|
|
102
|
+
* Serializes a pallier challenge to hex strings.
|
|
103
|
+
* @param challenge
|
|
104
|
+
*/
|
|
105
|
+
function serializePallierChallenge(challenge) {
|
|
106
|
+
return {
|
|
107
|
+
p: util_1.convertBigIntArrToHexArr(challenge.p, 384),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
exports.serializePallierChallenge = serializePallierChallenge;
|
|
111
|
+
/**
|
|
112
|
+
* Serializes a pallier challenge proof to hex strings.
|
|
113
|
+
* @param challenge
|
|
114
|
+
*/
|
|
115
|
+
function serializePallierChallengeProofs(challenge) {
|
|
116
|
+
return {
|
|
117
|
+
sigma: util_1.convertBigIntArrToHexArr(challenge.sigma, 384),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
exports.serializePallierChallengeProofs = serializePallierChallengeProofs;
|
|
121
|
+
/**
|
|
122
|
+
* Serializes a pallier challenge and its proof to hex strings.
|
|
123
|
+
* @param challengeWithProofs
|
|
124
|
+
*/
|
|
125
|
+
function serializePallierChallengeWithProofs(challengeWithProofs) {
|
|
126
|
+
return {
|
|
127
|
+
...serializePallierChallenge(challengeWithProofs),
|
|
128
|
+
...serializePallierChallengeProofs(challengeWithProofs),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
exports.serializePallierChallengeWithProofs = serializePallierChallengeWithProofs;
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9FQUFvRTtBQUNwRSxxQ0FBMEc7QUF1QzFHOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFNBQTJCO0lBQzNELE9BQU87UUFDTCxNQUFNLEVBQUUsa0JBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3JDLEVBQUUsRUFBRSxrQkFBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsRUFBRSxFQUFFLGtCQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztLQUM5QixDQUFDO0FBQ0osQ0FBQztBQU5ELDhDQU1DO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFNBQTZCO0lBQzNELE9BQU87UUFDTCxNQUFNLEVBQUUsa0JBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3JDLEVBQUUsRUFBRSxrQkFBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsRUFBRSxFQUFFLGtCQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztLQUM5QixDQUFDO0FBQ0osQ0FBQztBQU5ELDBDQU1DO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQUMsU0FBcUM7SUFDL0UsT0FBTztRQUNMLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1FBQy9CLFdBQVcsRUFBRTtZQUNYLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNwRSxDQUFDLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BFLENBQUMsRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDN0Q7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBZEQsa0VBY0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxTQUF1QztJQUMvRSxPQUFPO1FBQ0wsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQzdCLFdBQVcsRUFBRTtZQUNYLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNwRSxDQUFDLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BFLENBQUMsRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDN0Q7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBZEQsOERBY0M7QUFzQkQ7OztHQUdHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQUMsU0FBcUM7SUFDL0UsT0FBTztRQUNMLENBQUMsRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7QUFDSixDQUFDO0FBSkQsa0VBSUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixpQ0FBaUMsQ0FDL0MsU0FBMkM7SUFFM0MsT0FBTztRQUNMLEtBQUssRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0tBQ2pELENBQUM7QUFDSixDQUFDO0FBTkQsOEVBTUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixxQ0FBcUMsQ0FDbkQsbUJBQXlEO0lBRXpELE9BQU87UUFDTCxDQUFDLEVBQUUsMkJBQTJCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQ3JELEtBQUssRUFBRSxpQ0FBaUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEtBQUs7S0FDcEUsQ0FBQztBQUNKLENBQUM7QUFQRCxzRkFPQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLFNBQXVDO0lBQy9FLE9BQU87UUFDTCxDQUFDLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7S0FDOUMsQ0FBQztBQUNKLENBQUM7QUFKRCw4REFJQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLCtCQUErQixDQUM3QyxTQUE2QztJQUU3QyxPQUFPO1FBQ0wsS0FBSyxFQUFFLCtCQUF3QixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO0tBQ3RELENBQUM7QUFDSixDQUFDO0FBTkQsMEVBTUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixtQ0FBbUMsQ0FDakQsbUJBQTJEO0lBRTNELE9BQU87UUFDTCxHQUFHLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDO1FBQ2pELEdBQUcsK0JBQStCLENBQUMsbUJBQW1CLENBQUM7S0FDeEQsQ0FBQztBQUNKLENBQUM7QUFQRCxrRkFPQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE50aWxkZSBQcm9vZiB3aGVyZSBib3RoIGFscGhhIGFuZCB0IGFyZSBhIHNldCBvZiAxMjggcHJvb2ZzIGVhY2guXG5pbXBvcnQgeyBiaWdJbnRUb0hleCwgY29udmVydEJpZ0ludEFyclRvSGV4QXJyLCBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIsIGhleFRvQmlnSW50IH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmludGVyZmFjZSBOdGlsZGVQcm9vZjxUPiB7XG4gIGFscGhhOiBUW107XG4gIHQ6IFRbXTtcbn1cblxuLy8gTnRpbGRlIFByb29mXG5pbnRlcmZhY2UgTnRpbGRlUHJvb2ZzPFQ+IHtcbiAgaDFXcnRIMjogTnRpbGRlUHJvb2Y8VD47XG4gIGgyV3J0SDE6IE50aWxkZVByb29mPFQ+O1xufVxuXG4vLyBOdGlsZGUgY2hhbGxlbmdlIHZhbHVlc1xuaW50ZXJmYWNlIE50aWxkZTxUPiB7XG4gIG50aWxkZTogVDtcbiAgaDE6IFQ7XG4gIGgyOiBUO1xufVxuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWROdGlsZGUgPSBOdGlsZGU8YmlnaW50PjtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWROdGlsZGUgPSBOdGlsZGU8c3RyaW5nPjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZE50aWxkZVByb29mID0gTnRpbGRlUHJvb2Y8YmlnaW50PjtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWROdGlsZGVQcm9vZiA9IE50aWxkZVByb29mPHN0cmluZz47XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZnMgPSBOdGlsZGVQcm9vZnM8YmlnaW50PjtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWROdGlsZGVQcm9vZnMgPSBOdGlsZGVQcm9vZnM8c3RyaW5nPjtcblxuLyoqXG4gKiBUaGUgbnRpbGRlIHByb29mcyBhcmUgZG9uZSBub24taW50ZXJhY3RpdmVseSxcbiAqIHRoZXJlZm9yZSBhIHBhcnR5IGdlbmVyYXRlcyBib3RoIG50aWxkZSwgaDEsIGgyIGFuZCB0aGUgcHJvb2ZzIHdpdGhvdXRcbiAqIGludGVyYWN0aW9uIHdpdGggdGhlIG90aGVyIHBhcnR5LlxuICovXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzID0gRGVzZXJpYWxpemVkTnRpbGRlICYge1xuICBudGlsZGVQcm9vZjogRGVzZXJpYWxpemVkTnRpbGRlUHJvb2ZzO1xufTtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzID0gU2VyaWFsaXplZE50aWxkZSAmIHtcbiAgbnRpbGRlUHJvb2Y6IFNlcmlhbGl6ZWROdGlsZGVQcm9vZnM7XG59O1xuXG4vKipcbiAqIERlc2VyaWFsaXplcyBhIGNoYWxsZW5nZSBmcm9tIGhleCBzdHJpbmdzIHRvIGJpZ2ludFxuICogQHBhcmFtIGNoYWxsZW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVOdGlsZGUoY2hhbGxlbmdlOiBTZXJpYWxpemVkTnRpbGRlKTogRGVzZXJpYWxpemVkTnRpbGRlIHtcbiAgcmV0dXJuIHtcbiAgICBudGlsZGU6IGhleFRvQmlnSW50KGNoYWxsZW5nZS5udGlsZGUpLFxuICAgIGgxOiBoZXhUb0JpZ0ludChjaGFsbGVuZ2UuaDEpLFxuICAgIGgyOiBoZXhUb0JpZ0ludChjaGFsbGVuZ2UuaDIpLFxuICB9O1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSBjaGFsbGVuZ2UgZnJvbSBiaWcgaW50IHRvIGhleCBzdHJpbmdzLlxuICogQHBhcmFtIGNoYWxsZW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTnRpbGRlKGNoYWxsZW5nZTogRGVzZXJpYWxpemVkTnRpbGRlKTogU2VyaWFsaXplZE50aWxkZSB7XG4gIHJldHVybiB7XG4gICAgbnRpbGRlOiBiaWdJbnRUb0hleChjaGFsbGVuZ2UubnRpbGRlKSxcbiAgICBoMTogYmlnSW50VG9IZXgoY2hhbGxlbmdlLmgxKSxcbiAgICBoMjogYmlnSW50VG9IZXgoY2hhbGxlbmdlLmgyKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYSBjaGFsbGVuZ2UgYW5kIGl0J3MgcHJvb2ZzIGZyb20gaGV4IHN0cmluZ3MgdG8gYmlnaW50XG4gKiBAcGFyYW0gY2hhbGxlbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZU50aWxkZVdpdGhQcm9vZnMoY2hhbGxlbmdlOiBTZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyk6IERlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnMge1xuICByZXR1cm4ge1xuICAgIC4uLmRlc2VyaWFsaXplTnRpbGRlKGNoYWxsZW5nZSksXG4gICAgbnRpbGRlUHJvb2Y6IHtcbiAgICAgIGgxV3J0SDI6IHtcbiAgICAgICAgYWxwaGE6IGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDFXcnRIMi5hbHBoYSksXG4gICAgICAgIHQ6IGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDFXcnRIMi50KSxcbiAgICAgIH0sXG4gICAgICBoMldydEgxOiB7XG4gICAgICAgIGFscGhhOiBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgyV3J0SDEuYWxwaGEpLFxuICAgICAgICB0OiBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgyV3J0SDEudCksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIGNoYWxsZW5nZSBhbmQgaXQncyBwcm9vZnMgZnJvbSBiaWcgaW50IHRvIGhleCBzdHJpbmdzLlxuICogQHBhcmFtIGNoYWxsZW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhjaGFsbGVuZ2U6IERlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnMpOiBTZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyB7XG4gIHJldHVybiB7XG4gICAgLi4uc2VyaWFsaXplTnRpbGRlKGNoYWxsZW5nZSksXG4gICAgbnRpbGRlUHJvb2Y6IHtcbiAgICAgIGgxV3J0SDI6IHtcbiAgICAgICAgYWxwaGE6IGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDFXcnRIMi5hbHBoYSksXG4gICAgICAgIHQ6IGNvbnZlcnRCaWdJbnRBcnJUb0hleEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDFXcnRIMi50KSxcbiAgICAgIH0sXG4gICAgICBoMldydEgxOiB7XG4gICAgICAgIGFscGhhOiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgyV3J0SDEuYWxwaGEpLFxuICAgICAgICB0OiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgyV3J0SDEudCksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbnR5cGUgUGFsbGllckNoYWxsZW5nZTxUPiA9IHtcbiAgcDogVFtdO1xufTtcblxudHlwZSBQYWxsaWVyQ2hhbGxlbmdlUHJvb2Y8VD4gPSB7XG4gIHNpZ21hOiBUW107XG59O1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRQYWxsaWVyQ2hhbGxlbmdlID0gUGFsbGllckNoYWxsZW5nZTxiaWdpbnQ+O1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2UgPSBQYWxsaWVyQ2hhbGxlbmdlPHN0cmluZz47XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRQYWxsaWVyQ2hhbGxlbmdlUHJvb2ZzID0gUGFsbGllckNoYWxsZW5nZVByb29mPGJpZ2ludD47XG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGFsbGllckNoYWxsZW5nZVByb29mcyA9IFBhbGxpZXJDaGFsbGVuZ2VQcm9vZjxzdHJpbmc+O1xuLyoqXG4gKiBUaGUgcGFsbGllciBwcm9vZnMgYXJlIGRvbmUgaW50ZXJhY3RpdmVseSBiZXR3ZWVuIHR3byBwYXJ0aWVzLlxuICogSWYgcGFydHkgQSBpcyBjb21wbGV0aW5nIGEgcGFsbGllciBwcm9vZiAkc2lnbWEkIHdpdGggcGFydHkgQiwgdGhlbiAkcCQgcmVmZXJzIHRvXG4gKiBhIGNoYWxsZW5nZSBnaXZlbiB0byBBIGJ5IEIsIGFuZCAkc2lnbWEkIHJlcHJlc2VudHMgdGhlIHByb29mIHRvIHRoZSBjaGFsbGVuZ2VcbiAqL1xuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkUGFsbGllckNoYWxsZW5nZVdpdGhQcm9vZnMgPSBEZXNlcmlhbGl6ZWRQYWxsaWVyQ2hhbGxlbmdlICYgRGVzZXJpYWxpemVkUGFsbGllckNoYWxsZW5nZVByb29mcztcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQYWxsaWVyQ2hhbGxlbmdlV2l0aFByb29mcyA9IFNlcmlhbGl6ZWRQYWxsaWVyQ2hhbGxlbmdlICYgU2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2VQcm9vZnM7XG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGEgcGFsbGllciBjaGFsbGVuZ2UgdG8gaGV4IHN0cmluZ3MuXG4gKiBAcGFyYW0gY2hhbGxlbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVBhbGxpZXJDaGFsbGVuZ2UoY2hhbGxlbmdlOiBTZXJpYWxpemVkUGFsbGllckNoYWxsZW5nZSk6IERlc2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2Uge1xuICByZXR1cm4ge1xuICAgIHA6IGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycihjaGFsbGVuZ2UucCksXG4gIH07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemVzIGEgcGFsbGllciBjaGFsbGVuZ2UgcHJvb2YgdG8gaGV4IHN0cmluZ3MuXG4gKiBAcGFyYW0gY2hhbGxlbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVBhbGxpZXJDaGFsbGVuZ2VQcm9vZnMoXG4gIGNoYWxsZW5nZTogU2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2VQcm9vZnNcbik6IERlc2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2VQcm9vZnMge1xuICByZXR1cm4ge1xuICAgIHNpZ21hOiBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIoY2hhbGxlbmdlLnNpZ21hKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYSBwYWxsaWVyIGNoYWxsZW5nZSBhbmQgaXRzIHByb29mIHRvIGhleCBzdHJpbmdzLlxuICogQHBhcmFtIGNoYWxsZW5nZVdpdGhQcm9vZnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplUGFsbGllckNoYWxsZW5nZVdpdGhQcm9vZnMoXG4gIGNoYWxsZW5nZVdpdGhQcm9vZnM6IFNlcmlhbGl6ZWRQYWxsaWVyQ2hhbGxlbmdlV2l0aFByb29mc1xuKTogRGVzZXJpYWxpemVkUGFsbGllckNoYWxsZW5nZVdpdGhQcm9vZnMge1xuICByZXR1cm4ge1xuICAgIHA6IGRlc2VyaWFsaXplUGFsbGllckNoYWxsZW5nZShjaGFsbGVuZ2VXaXRoUHJvb2ZzKS5wLFxuICAgIHNpZ21hOiBkZXNlcmlhbGl6ZVBhbGxpZXJDaGFsbGVuZ2VQcm9vZnMoY2hhbGxlbmdlV2l0aFByb29mcykuc2lnbWEsXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIHBhbGxpZXIgY2hhbGxlbmdlIHRvIGhleCBzdHJpbmdzLlxuICogQHBhcmFtIGNoYWxsZW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUGFsbGllckNoYWxsZW5nZShjaGFsbGVuZ2U6IERlc2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2UpOiBTZXJpYWxpemVkUGFsbGllckNoYWxsZW5nZSB7XG4gIHJldHVybiB7XG4gICAgcDogY29udmVydEJpZ0ludEFyclRvSGV4QXJyKGNoYWxsZW5nZS5wLCAzODQpLFxuICB9O1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSBwYWxsaWVyIGNoYWxsZW5nZSBwcm9vZiB0byBoZXggc3RyaW5ncy5cbiAqIEBwYXJhbSBjaGFsbGVuZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVBhbGxpZXJDaGFsbGVuZ2VQcm9vZnMoXG4gIGNoYWxsZW5nZTogRGVzZXJpYWxpemVkUGFsbGllckNoYWxsZW5nZVByb29mc1xuKTogU2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2VQcm9vZnMge1xuICByZXR1cm4ge1xuICAgIHNpZ21hOiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoY2hhbGxlbmdlLnNpZ21hLCAzODQpLFxuICB9O1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSBwYWxsaWVyIGNoYWxsZW5nZSBhbmQgaXRzIHByb29mIHRvIGhleCBzdHJpbmdzLlxuICogQHBhcmFtIGNoYWxsZW5nZVdpdGhQcm9vZnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVBhbGxpZXJDaGFsbGVuZ2VXaXRoUHJvb2ZzKFxuICBjaGFsbGVuZ2VXaXRoUHJvb2ZzOiBEZXNlcmlhbGl6ZWRQYWxsaWVyQ2hhbGxlbmdlV2l0aFByb29mc1xuKTogU2VyaWFsaXplZFBhbGxpZXJDaGFsbGVuZ2VXaXRoUHJvb2ZzIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZXJpYWxpemVQYWxsaWVyQ2hhbGxlbmdlKGNoYWxsZW5nZVdpdGhQcm9vZnMpLFxuICAgIC4uLnNlcmlhbGl6ZVBhbGxpZXJDaGFsbGVuZ2VQcm9vZnMoY2hhbGxlbmdlV2l0aFByb29mcyksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUlNBTW9kdWx1cyB7XG4gIG46IGJpZ2ludDtcbiAgLy8gU29waGllIEdlcm1haW4gcHJpbWVzLlxuICBxMTogYmlnaW50O1xuICBxMjogYmlnaW50O1xufVxuXG4vLyBSYW5nZSBwcm9vZiB2YWx1ZXNcbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VQcm9vZiB7XG4gIHo6IGJpZ2ludDtcbiAgdTogYmlnaW50O1xuICB3OiBiaWdpbnQ7XG4gIHM6IGJpZ2ludDtcbiAgczE6IGJpZ2ludDtcbiAgczI6IGJpZ2ludDtcbn1cblxuLy8gUmFuZ2UgcHJvb2YgdmFsdWVzXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlUHJvb2ZXaXRoQ2hlY2sge1xuICB6OiBiaWdpbnQ7XG4gIHpwcm06IGJpZ2ludDtcbiAgdDogYmlnaW50O1xuICB2OiBiaWdpbnQ7XG4gIHc6IGJpZ2ludDtcbiAgczogYmlnaW50O1xuICBzMTogYmlnaW50O1xuICBzMjogYmlnaW50O1xuICB0MTogYmlnaW50O1xuICB0MjogYmlnaW50O1xuICB1OiBiaWdpbnQ7XG59XG4iXX0=
|
package/dist/src/util.d.ts
CHANGED
|
@@ -8,8 +8,9 @@ export declare function convertHexArrToBigIntArr(values: string[]): bigint[];
|
|
|
8
8
|
/**
|
|
9
9
|
* Returns a hex string array from a bigint array
|
|
10
10
|
* @param values
|
|
11
|
+
* @param hexLength - length to pad each big int number too
|
|
11
12
|
*/
|
|
12
|
-
export declare function convertBigIntArrToHexArr(values: bigint[]): string[];
|
|
13
|
+
export declare function convertBigIntArrToHexArr(values: bigint[], hexLength?: number): string[];
|
|
13
14
|
export declare function hexToBigInt(hex: string): bigint;
|
|
14
15
|
/**
|
|
15
16
|
* Returns an hex string of the given bigint
|
package/dist/src/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE"}
|
package/dist/src/util.js
CHANGED
|
@@ -17,10 +17,11 @@ exports.convertHexArrToBigIntArr = convertHexArrToBigIntArr;
|
|
|
17
17
|
/**
|
|
18
18
|
* Returns a hex string array from a bigint array
|
|
19
19
|
* @param values
|
|
20
|
+
* @param hexLength - length to pad each big int number too
|
|
20
21
|
*/
|
|
21
|
-
function convertBigIntArrToHexArr(values) {
|
|
22
|
+
function convertBigIntArrToHexArr(values, hexLength) {
|
|
22
23
|
return values.map((value) => {
|
|
23
|
-
return bigIntToHex(value);
|
|
24
|
+
return bigIntToHex(value, hexLength);
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
exports.convertBigIntArrToHexArr = convertBigIntArrToHexArr;
|
|
@@ -139,4 +140,4 @@ async function randomBigInt(bitlength) {
|
|
|
139
140
|
return bigIntFromBufferBE(Buffer.from(await bigint_crypto_utils_1.randBits(bitlength, true)));
|
|
140
141
|
}
|
|
141
142
|
exports.randomBigInt = randomBigInt;
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUE0QztBQUM1Qyw2REFBMEQ7QUFDMUQsdURBQXVDO0FBRXZDOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE1BQWdCO0lBQ3ZELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzFCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELDREQUlDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsTUFBZ0I7SUFDdkQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDMUIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBSkQsNERBSUM7QUFFRCxTQUFnQixXQUFXLENBQUMsR0FBVztJQUNyQywrREFBK0Q7SUFDL0QsNERBQTREO0lBQzVELDhEQUE4RDtJQUM5RCxtREFBbUQ7SUFDbkQsbUJBQW1CO0lBQ25CLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQzVCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFWRCxrQ0FVQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUFjLEVBQUUsU0FBa0I7SUFDNUQsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDekMsSUFBSSxTQUFTLEVBQUU7UUFDYixHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDcEM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFQRCxrQ0FPQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLENBQVMsRUFBRSxLQUFjO0lBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzVDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFO1FBQy9CLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsNENBUUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFXO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFGRCxnREFFQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLENBQVMsRUFBRSxLQUFjO0lBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFO1FBQy9CLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUkQsNENBUUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFXO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUZELGdEQUVDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLEdBQWU7SUFDN0MsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUZELDBDQUVDO0FBRUQsU0FBZ0IsS0FBSyxDQUFDLENBQVM7SUFDN0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO0lBQ2xGLENBQUMsSUFBSSxNQUFNLENBQUMsb0VBQW9FLENBQUMsQ0FBQztJQUNsRixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFKRCxzQkFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxDQUFTO0lBQzVDLE9BQU8sSUFBSSwyQkFBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUZELG9EQUVDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxDQUFTO0lBQ3JELE9BQU8sSUFBSSxFQUFFO1FBQ1gsTUFBTSxDQUFDLEdBQUcsTUFBTSxZQUFZLENBQUMsK0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsT0FBTyxDQUFDLENBQUM7U0FDVjtLQUNGO0FBQ0gsQ0FBQztBQVBELDBEQU9DO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FBQyxDQUFTO0lBQzNELElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDNUM7SUFDRCxPQUFPLElBQUksRUFBRTtRQUNYLE1BQU0sQ0FBQyxHQUFHLE1BQU0sWUFBWSxDQUFDLCtCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxzQkFBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckQsT0FBTyxDQUFDLENBQUM7U0FDVjtLQUNGO0FBQ0gsQ0FBQztBQVZELHNFQVVDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQUMsU0FBaUI7SUFDbEQsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sOEJBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFGRCxvQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFB1YmxpY0tleSB9IGZyb20gJ3BhaWxsaWVyLWJpZ2ludCc7XG5pbXBvcnQgeyBiaXRMZW5ndGgsIHJhbmRCaXRzIH0gZnJvbSAnYmlnaW50LWNyeXB0by11dGlscyc7XG5pbXBvcnQgeyBnY2QgfSBmcm9tICdiaWdpbnQtbW9kLWFyaXRoJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgYmlnaW50IGFycmF5IGZyb20gYSBoZXggc3RyaW5nIGFycmF5XG4gKiBAcGFyYW0gdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SGV4QXJyVG9CaWdJbnRBcnIodmFsdWVzOiBzdHJpbmdbXSk6IGJpZ2ludFtdIHtcbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIGhleFRvQmlnSW50KHZhbHVlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGhleCBzdHJpbmcgYXJyYXkgZnJvbSBhIGJpZ2ludCBhcnJheVxuICogQHBhcmFtIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEJpZ0ludEFyclRvSGV4QXJyKHZhbHVlczogYmlnaW50W10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiBiaWdJbnRUb0hleCh2YWx1ZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9CaWdJbnQoaGV4OiBzdHJpbmcpOiBiaWdpbnQge1xuICAvLyBTdHJhbmdlbHkgYmlnaW50LnRvU3RyaW5nKDE2KSBnaXZlcyBhIGhleCBzdHJpbmcgd2l0aG91dCAweCxcbiAgLy8gYnV0IGl0IHdvbid0IGFjY2VwdCB0aGUgc2FtZSBzdHJpbmcgd2l0aG91dCAweCB0byBjb252ZXJ0XG4gIC8vIHRvIGEgYmlnaW50IChCaWdJbnQoaGV4IHN0cmluZykpLiBTbyBoYXZlIHRvIGludHJvZHVjZSB0aGlzXG4gIC8vIGNoZWNrIHRvIGNvbnZlcnQgdG8gYWRkIDB4IGluIGNhc2UgaWYgaGV4IHN0cmluZ1xuICAvLyBkb2Vzbid0IGhhdmUgaXQuXG4gIGlmIChoZXguc2xpY2UoMCwgMikgPT09ICcweCcpIHtcbiAgICByZXR1cm4gQmlnSW50KGhleCk7XG4gIH1cbiAgcmV0dXJuIEJpZ0ludCgnMHgnICsgaGV4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJpZ2ludFxuICpcbiAqIEBwYXJhbSB7YmlnaW50fSBiaWdpbnQgLSB0aGUgYmlnaW50IHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEBwYXJhbSBoZXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9IZXgoYmlnaW50OiBiaWdpbnQsIGhleExlbmd0aD86IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBoZXggPSBiaWdpbnQudG9TdHJpbmcoMTYpO1xuICBoZXggPSAnMCcuc2xpY2UoMCwgaGV4Lmxlbmd0aCAlIDIpICsgaGV4O1xuICBpZiAoaGV4TGVuZ3RoKSB7XG4gICAgaGV4ID0gaGV4LnBhZFN0YXJ0KGhleExlbmd0aCwgJzAnKTtcbiAgfVxuICByZXR1cm4gaGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9CdWZmZXJMRShuOiBiaWdpbnQsIGJ5dGVzPzogbnVtYmVyKTogQnVmZmVyIHtcbiAgbGV0IHYgPSBuLnRvU3RyaW5nKDE2KTtcbiAgdiA9ICcwJy5zbGljZSgwLCB2Lmxlbmd0aCAlIDIpICsgdjtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20odiwgJ2hleCcpLnJldmVyc2UoKTtcbiAgaWYgKGJ5dGVzICYmIGJ1Zi5sZW5ndGggPCBieXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIEJ1ZmZlci5hbGxvYyhieXRlcyAtIGJ1Zi5sZW5ndGgpXSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21CdWZmZXJMRShidWY6IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoJzB4JyArIEJ1ZmZlci5mcm9tKGJ1ZikucmV2ZXJzZSgpLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRUb0J1ZmZlckJFKG46IGJpZ2ludCwgYnl0ZXM/OiBudW1iZXIpOiBCdWZmZXIge1xuICBsZXQgdiA9IG4udG9TdHJpbmcoMTYpO1xuICB2ID0gJzAnLnNsaWNlKDAsIHYubGVuZ3RoICUgMikgKyB2O1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbSh2LCAnaGV4Jyk7XG4gIGlmIChieXRlcyAmJiBidWYubGVuZ3RoIDwgYnl0ZXMpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmFsbG9jKGJ5dGVzIC0gYnVmLmxlbmd0aCksIGJ1Zl0pO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRGcm9tQnVmZmVyQkUoYnVmOiBCdWZmZXIpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KCcweCcgKyBidWYudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21VOEFCRShidWY6IFVpbnQ4QXJyYXkpOiBiaWdpbnQge1xuICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJ1ZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodTogYmlnaW50KTogYmlnaW50IHtcbiAgdSAmPSBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOCcpO1xuICB1IHw9IEJpZ0ludCgnMHg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gIHJldHVybiB1O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGdldCBwYWxsaWVyIHB1YmxpYyBrZXkgc2ltcGxlIHZhcmllbnRcbiAqIEBwYXJhbSB7YmlnaW50fSBuXG4gKiBAcmV0dXJucyB7YmlnaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFpbGxpZXJQdWJsaWNLZXkobjogYmlnaW50KTogUHVibGljS2V5IHtcbiAgcmV0dXJuIG5ldyBQdWJsaWNLZXkobiwgbiArIEJpZ0ludCgxKSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gcG9zaXRpdmUgaW50ZWdlciBjby1wcmltZSB0byB4XG4gKiBAcGFyYW0geFxuICogQHJldHVybnMge1Byb21pc2U8YmlnaW50Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbVBvc2l0aXZlQ29QcmltZVRvKHg6IGJpZ2ludCk6IFByb21pc2U8YmlnaW50PiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeSA9IGF3YWl0IHJhbmRvbUJpZ0ludChiaXRMZW5ndGgoeCkpO1xuICAgIGlmICh5ID4gQmlnSW50KDApICYmIGdjZCh4LCB5KSA9PT0gQmlnSW50KDEpKSB7XG4gICAgICByZXR1cm4geTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBwb3NpdGl2ZSBpbnRlZ2VyIGNvcHJpbWUgbGVzcyB0aGFuIHggd2l0aCB0aGUgc2FtZSBiaXQgZGVwdGguXG4gKiBAcGFyYW0geFxuICogQHJldHVybnMge1Byb21pc2U8YmlnaW50Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbVBvc2l0aXZlQ29QcmltZUxlc3NUaGFuKHg6IGJpZ2ludCk6IFByb21pc2U8YmlnaW50PiB7XG4gIGlmICh4IDw9IEJpZ0ludCgyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigneCBtdXN0IGJlIGxhcmdlciB0aGFuIDInKTtcbiAgfVxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBhd2FpdCByYW5kb21CaWdJbnQoYml0TGVuZ3RoKHgpKTtcbiAgICBpZiAoeSA+IEJpZ0ludCgwKSAmJiB5IDwgeCAmJiBnY2QoeCwgeSkgPT09IEJpZ0ludCgxKSkge1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIG9mIGEgZ2l2ZW4gYml0bGVuZ3RoXG4gKiBAcGFyYW0gYml0bGVuZ3RoXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxiaWdpbnQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmFuZG9tQmlnSW50KGJpdGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxiaWdpbnQ+IHtcbiAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShhd2FpdCByYW5kQml0cyhiaXRsZW5ndGgsIHRydWUpKSk7XG59XG4iXX0=
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUE0QztBQUM1Qyw2REFBMEQ7QUFDMUQsdURBQXVDO0FBRXZDOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE1BQWdCO0lBQ3ZELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzFCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELDREQUlDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE1BQWdCLEVBQUUsU0FBa0I7SUFDM0UsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDMUIsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELDREQUlDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLEdBQVc7SUFDckMsK0RBQStEO0lBQy9ELDREQUE0RDtJQUM1RCw4REFBOEQ7SUFDOUQsbURBQW1EO0lBQ25ELG1CQUFtQjtJQUNuQixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUM1QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQjtJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBVkQsa0NBVUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQUMsTUFBYyxFQUFFLFNBQWtCO0lBQzVELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxHQUFHLEdBQUcs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cnQgeyBQdWJsaWNLZXkgfSBmcm9tICdwYWlsbGllci1iaWdpbnQnO1xuaW1wb3J0IHsgYml0TGVuZ3RoLCByYW5kQml0cyB9IGZyb20gJ2JpZ2ludC1jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgZ2NkIH0gZnJvbSAnYmlnaW50LW1vZC1hcml0aCc7XG5cbi8qKlxuICogUmV0dXJucyBhIGJpZ2ludCBhcnJheSBmcm9tIGEgaGV4IHN0cmluZyBhcnJheVxuICogQHBhcmFtIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEhleEFyclRvQmlnSW50QXJyKHZhbHVlczogc3RyaW5nW10pOiBiaWdpbnRbXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiBoZXhUb0JpZ0ludCh2YWx1ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBoZXggc3RyaW5nIGFycmF5IGZyb20gYSBiaWdpbnQgYXJyYXlcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBoZXhMZW5ndGggLSBsZW5ndGggdG8gcGFkIGVhY2ggYmlnIGludCBudW1iZXIgdG9vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIodmFsdWVzOiBiaWdpbnRbXSwgaGV4TGVuZ3RoPzogbnVtYmVyKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICByZXR1cm4gYmlnSW50VG9IZXgodmFsdWUsIGhleExlbmd0aCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9CaWdJbnQoaGV4OiBzdHJpbmcpOiBiaWdpbnQge1xuICAvLyBTdHJhbmdlbHkgYmlnaW50LnRvU3RyaW5nKDE2KSBnaXZlcyBhIGhleCBzdHJpbmcgd2l0aG91dCAweCxcbiAgLy8gYnV0IGl0IHdvbid0IGFjY2VwdCB0aGUgc2FtZSBzdHJpbmcgd2l0aG91dCAweCB0byBjb252ZXJ0XG4gIC8vIHRvIGEgYmlnaW50IChCaWdJbnQoaGV4IHN0cmluZykpLiBTbyBoYXZlIHRvIGludHJvZHVjZSB0aGlzXG4gIC8vIGNoZWNrIHRvIGNvbnZlcnQgdG8gYWRkIDB4IGluIGNhc2UgaWYgaGV4IHN0cmluZ1xuICAvLyBkb2Vzbid0IGhhdmUgaXQuXG4gIGlmIChoZXguc2xpY2UoMCwgMikgPT09ICcweCcpIHtcbiAgICByZXR1cm4gQmlnSW50KGhleCk7XG4gIH1cbiAgcmV0dXJuIEJpZ0ludCgnMHgnICsgaGV4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJpZ2ludFxuICpcbiAqIEBwYXJhbSB7YmlnaW50fSBiaWdpbnQgLSB0aGUgYmlnaW50IHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEBwYXJhbSBoZXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9IZXgoYmlnaW50OiBiaWdpbnQsIGhleExlbmd0aD86IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBoZXggPSBiaWdpbnQudG9TdHJpbmcoMTYpO1xuICBoZXggPSAnMCcuc2xpY2UoMCwgaGV4Lmxlbmd0aCAlIDIpICsgaGV4O1xuICBpZiAoaGV4TGVuZ3RoKSB7XG4gICAgaGV4ID0gaGV4LnBhZFN0YXJ0KGhleExlbmd0aCwgJzAnKTtcbiAgfVxuICByZXR1cm4gaGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9CdWZmZXJMRShuOiBiaWdpbnQsIGJ5dGVzPzogbnVtYmVyKTogQnVmZmVyIHtcbiAgbGV0IHYgPSBuLnRvU3RyaW5nKDE2KTtcbiAgdiA9ICcwJy5zbGljZSgwLCB2Lmxlbmd0aCAlIDIpICsgdjtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20odiwgJ2hleCcpLnJldmVyc2UoKTtcbiAgaWYgKGJ5dGVzICYmIGJ1Zi5sZW5ndGggPCBieXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIEJ1ZmZlci5hbGxvYyhieXRlcyAtIGJ1Zi5sZW5ndGgpXSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21CdWZmZXJMRShidWY6IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoJzB4JyArIEJ1ZmZlci5mcm9tKGJ1ZikucmV2ZXJzZSgpLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRUb0J1ZmZlckJFKG46IGJpZ2ludCwgYnl0ZXM/OiBudW1iZXIpOiBCdWZmZXIge1xuICBsZXQgdiA9IG4udG9TdHJpbmcoMTYpO1xuICB2ID0gJzAnLnNsaWNlKDAsIHYubGVuZ3RoICUgMikgKyB2O1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbSh2LCAnaGV4Jyk7XG4gIGlmIChieXRlcyAmJiBidWYubGVuZ3RoIDwgYnl0ZXMpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmFsbG9jKGJ5dGVzIC0gYnVmLmxlbmd0aCksIGJ1Zl0pO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRGcm9tQnVmZmVyQkUoYnVmOiBCdWZmZXIpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KCcweCcgKyBidWYudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21VOEFCRShidWY6IFVpbnQ4QXJyYXkpOiBiaWdpbnQge1xuICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJ1ZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodTogYmlnaW50KTogYmlnaW50IHtcbiAgdSAmPSBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOCcpO1xuICB1IHw9IEJpZ0ludCgnMHg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gIHJldHVybiB1O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGdldCBwYWxsaWVyIHB1YmxpYyBrZXkgc2ltcGxlIHZhcmllbnRcbiAqIEBwYXJhbSB7YmlnaW50fSBuXG4gKiBAcmV0dXJucyB7YmlnaW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFpbGxpZXJQdWJsaWNLZXkobjogYmlnaW50KTogUHVibGljS2V5IHtcbiAgcmV0dXJuIG5ldyBQdWJsaWNLZXkobiwgbiArIEJpZ0ludCgxKSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gcG9zaXRpdmUgaW50ZWdlciBjby1wcmltZSB0byB4XG4gKiBAcGFyYW0geFxuICogQHJldHVybnMge1Byb21pc2U8YmlnaW50Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbVBvc2l0aXZlQ29QcmltZVRvKHg6IGJpZ2ludCk6IFByb21pc2U8YmlnaW50PiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeSA9IGF3YWl0IHJhbmRvbUJpZ0ludChiaXRMZW5ndGgoeCkpO1xuICAgIGlmICh5ID4gQmlnSW50KDApICYmIGdjZCh4LCB5KSA9PT0gQmlnSW50KDEpKSB7XG4gICAgICByZXR1cm4geTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBwb3NpdGl2ZSBpbnRlZ2VyIGNvcHJpbWUgbGVzcyB0aGFuIHggd2l0aCB0aGUgc2FtZSBiaXQgZGVwdGguXG4gKiBAcGFyYW0geFxuICogQHJldHVybnMge1Byb21pc2U8YmlnaW50Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbVBvc2l0aXZlQ29QcmltZUxlc3NUaGFuKHg6IGJpZ2ludCk6IFByb21pc2U8YmlnaW50PiB7XG4gIGlmICh4IDw9IEJpZ0ludCgyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigneCBtdXN0IGJlIGxhcmdlciB0aGFuIDInKTtcbiAgfVxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBhd2FpdCByYW5kb21CaWdJbnQoYml0TGVuZ3RoKHgpKTtcbiAgICBpZiAoeSA+IEJpZ0ludCgwKSAmJiB5IDwgeCAmJiBnY2QoeCwgeSkgPT09IEJpZ0ludCgxKSkge1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIG9mIGEgZ2l2ZW4gYml0bGVuZ3RoXG4gKiBAcGFyYW0gYml0bGVuZ3RoXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxiaWdpbnQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmFuZG9tQmlnSW50KGJpdGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxiaWdpbnQ+IHtcbiAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShhd2FpdCByYW5kQml0cyhiaXRsZW5ndGgsIHRydWUpKSk7XG59XG4iXX0=
|