@bitgo-beta/sdk-coin-sol 7.6.4-beta.613 → 7.6.4-beta.615

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/cjs/src/lib/constants.d.ts +21 -2
  2. package/dist/cjs/src/lib/constants.d.ts.map +1 -1
  3. package/dist/cjs/src/lib/constants.js +22 -2
  4. package/dist/cjs/src/lib/iface.d.ts +59 -2
  5. package/dist/cjs/src/lib/iface.d.ts.map +1 -1
  6. package/dist/cjs/src/lib/iface.js +1 -1
  7. package/dist/cjs/src/lib/index.d.ts +1 -0
  8. package/dist/cjs/src/lib/index.d.ts.map +1 -1
  9. package/dist/cjs/src/lib/index.js +6 -2
  10. package/dist/cjs/src/lib/instructionParamsFactory.d.ts +2 -1
  11. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -1
  12. package/dist/cjs/src/lib/instructionParamsFactory.js +42 -1
  13. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -1
  14. package/dist/cjs/src/lib/solInstructionFactory.js +60 -20
  15. package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
  16. package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
  17. package/dist/cjs/src/lib/token2022Resolve.js +199 -0
  18. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts +27 -1
  19. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -1
  20. package/dist/cjs/src/lib/tokenTransferBuilder.js +44 -3
  21. package/dist/cjs/src/lib/transferBuilderV2.d.ts +27 -1
  22. package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -1
  23. package/dist/cjs/src/lib/transferBuilderV2.js +44 -3
  24. package/dist/cjs/src/lib/utils.d.ts.map +1 -1
  25. package/dist/cjs/src/lib/utils.js +4 -1
  26. package/dist/cjs/src/sol.d.ts +58 -2
  27. package/dist/cjs/src/sol.d.ts.map +1 -1
  28. package/dist/cjs/src/sol.js +90 -1
  29. package/dist/cjs/test/unit/sol.js +248 -1
  30. package/dist/cjs/test/unit/solInstructionFactory.js +127 -17
  31. package/dist/cjs/test/unit/token2022Resolve.d.ts +2 -0
  32. package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
  33. package/dist/cjs/test/unit/token2022Resolve.js +252 -0
  34. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +100 -1
  35. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  36. package/dist/esm/lib/constants.d.ts +21 -2
  37. package/dist/esm/lib/constants.d.ts.map +1 -1
  38. package/dist/esm/lib/constants.js +21 -1
  39. package/dist/esm/lib/iface.d.ts +59 -2
  40. package/dist/esm/lib/iface.d.ts.map +1 -1
  41. package/dist/esm/lib/iface.js +1 -1
  42. package/dist/esm/lib/index.d.ts +1 -0
  43. package/dist/esm/lib/index.d.ts.map +1 -1
  44. package/dist/esm/lib/index.js +2 -1
  45. package/dist/esm/lib/instructionParamsFactory.d.ts +2 -1
  46. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -1
  47. package/dist/esm/lib/instructionParamsFactory.js +41 -1
  48. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -1
  49. package/dist/esm/lib/solInstructionFactory.js +61 -21
  50. package/dist/esm/lib/token2022Resolve.d.ts +106 -0
  51. package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
  52. package/dist/esm/lib/token2022Resolve.js +194 -0
  53. package/dist/esm/lib/tokenTransferBuilder.d.ts +27 -1
  54. package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -1
  55. package/dist/esm/lib/tokenTransferBuilder.js +44 -3
  56. package/dist/esm/lib/transferBuilderV2.d.ts +27 -1
  57. package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -1
  58. package/dist/esm/lib/transferBuilderV2.js +44 -3
  59. package/dist/esm/lib/utils.d.ts.map +1 -1
  60. package/dist/esm/lib/utils.js +5 -2
  61. package/dist/esm/sol.d.ts +58 -2
  62. package/dist/esm/sol.d.ts.map +1 -1
  63. package/dist/esm/sol.js +90 -1
  64. package/package.json +7 -7
  65. package/dist/cjs/src/config/token2022StaticConfig.d.ts +0 -3
  66. package/dist/cjs/src/config/token2022StaticConfig.d.ts.map +0 -1
  67. package/dist/cjs/src/config/token2022StaticConfig.js +0 -50
  68. package/dist/cjs/src/lib/token2022Config.d.ts +0 -44
  69. package/dist/cjs/src/lib/token2022Config.d.ts.map +0 -1
  70. package/dist/cjs/src/lib/token2022Config.js +0 -27
  71. package/dist/esm/config/token2022StaticConfig.d.ts +0 -3
  72. package/dist/esm/config/token2022StaticConfig.d.ts.map +0 -1
  73. package/dist/esm/config/token2022StaticConfig.js +0 -47
  74. package/dist/esm/lib/token2022Config.d.ts +0 -44
  75. package/dist/esm/lib/token2022Config.d.ts.map +0 -1
  76. package/dist/esm/lib/token2022Config.js +0 -23
@@ -40,6 +40,7 @@ const getBuilderFactory_1 = require("../getBuilderFactory");
40
40
  const src_1 = require("../../../src");
41
41
  const should_1 = __importDefault(require("should"));
42
42
  const testData = __importStar(require("../../resources/sol"));
43
+ const spl_token_1 = require("@solana/spl-token");
43
44
  describe('Sol Token Transfer Builder', () => {
44
45
  let ataAddress;
45
46
  const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
@@ -823,5 +824,103 @@ describe('Sol Token Transfer Builder', () => {
823
824
  createAta.params.payerAddress.should.equal(walletPK);
824
825
  });
825
826
  });
827
+ describe('Transfer Hook accounts', () => {
828
+ const t22Name = testData.sol2022TokenTransfers.name;
829
+ const t22Mint = testData.sol2022TokenTransfers.mint;
830
+ const t22Decimals = 6;
831
+ const transferHookAccounts = [
832
+ { pubkey: '98wFF5MpMjMQbfDF2MPzo8LCGX37unZR1ohRA1mU9GmJ', isSigner: false, isWritable: true },
833
+ { pubkey: '48n7YGEww7fKMfJ5gJ3sQC3rM6RWGjpUsghqVfXVkR5A', isSigner: false, isWritable: false },
834
+ { pubkey: '9sQhAH7vV3RKTCK13VY4EiNjs3qBq1srSYxdNufdAAXm', isSigner: false, isWritable: false },
835
+ ];
836
+ const buildToken2022Transfer = () => {
837
+ const txBuilder = factory.getTokenTransferBuilder();
838
+ txBuilder.nonce(recentBlockHash);
839
+ txBuilder.sender(walletPK);
840
+ txBuilder.send({
841
+ address: otherAccount.pub,
842
+ amount,
843
+ tokenName: t22Name,
844
+ tokenAddress: t22Mint,
845
+ programId: spl_token_1.TOKEN_2022_PROGRAM_ID.toString(),
846
+ decimalPlaces: t22Decimals,
847
+ });
848
+ return txBuilder;
849
+ };
850
+ it('threads resolved transfer hook accounts into the built TokenTransfer params', async () => {
851
+ const txBuilder = buildToken2022Transfer();
852
+ txBuilder.transferHookAccounts(transferHookAccounts);
853
+ const tx = await txBuilder.build();
854
+ const tokenTransfer = tx.toJson().instructionsData.find((i) => i.type === 'TokenTransfer');
855
+ should_1.default.exist(tokenTransfer);
856
+ tokenTransfer.params.transferHookAccounts.should.deepEqual(transferHookAccounts);
857
+ });
858
+ it('omits transfer hook accounts and matches the plain transfer when none are set', async () => {
859
+ const withHooks = await buildToken2022Transfer().transferHookAccounts(transferHookAccounts).build();
860
+ const withoutHooks = await buildToken2022Transfer().build();
861
+ const plainTransfer = withoutHooks.toJson().instructionsData.find((i) => i.type === 'TokenTransfer');
862
+ should_1.default.exist(plainTransfer);
863
+ should_1.default.equal(plainTransfer.params.transferHookAccounts, undefined);
864
+ // Appending the resolved hook accounts changes the serialized transaction.
865
+ withHooks.toBroadcastFormat().should.not.equal(withoutHooks.toBroadcastFormat());
866
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(withoutHooks.toBroadcastFormat()), true);
867
+ });
868
+ });
869
+ describe('Permissionless thaw bundling', () => {
870
+ const t22Name = testData.sol2022TokenTransfers.name;
871
+ const t22Mint = testData.sol2022TokenTransfers.mint;
872
+ const t22Decimals = 6;
873
+ // Resolved thaw params (as produced by Sol.resolvePermissionlessThaw). Arbitrary but valid
874
+ // base58 pubkeys used purely as fixtures — the offline builder never fetches them.
875
+ const thawParams = {
876
+ authority: walletPK,
877
+ mint: t22Mint,
878
+ tokenAccount: '98wFF5MpMjMQbfDF2MPzo8LCGX37unZR1ohRA1mU9GmJ',
879
+ tokenAccountOwner: otherAccount.pub,
880
+ gatingProgram: 'GbQ8ZiEFzGGTeYoXwtZtcoxwPcMyUcmZDduMVNdUPKpX',
881
+ flagAccount: '48n7YGEww7fKMfJ5gJ3sQC3rM6RWGjpUsghqVfXVkR5A',
882
+ mintConfig: '9sQhAH7vV3RKTCK13VY4EiNjs3qBq1srSYxdNufdAAXm',
883
+ extraAccounts: [{ pubkey: nonceAccount.pub, isSigner: false, isWritable: false }],
884
+ };
885
+ const buildToken2022TransferWithAta = () => {
886
+ const txBuilder = factory.getTokenTransferBuilder();
887
+ txBuilder.nonce(recentBlockHash);
888
+ txBuilder.sender(walletPK);
889
+ txBuilder.send({
890
+ address: otherAccount.pub,
891
+ amount,
892
+ tokenName: t22Name,
893
+ tokenAddress: t22Mint,
894
+ programId: spl_token_1.TOKEN_2022_PROGRAM_ID.toString(),
895
+ decimalPlaces: t22Decimals,
896
+ });
897
+ txBuilder.createAssociatedTokenAccount({
898
+ ownerAddress: otherAccount.pub,
899
+ tokenName: t22Name,
900
+ tokenAddress: t22Mint,
901
+ programId: spl_token_1.TOKEN_2022_PROGRAM_ID.toString(),
902
+ });
903
+ return txBuilder;
904
+ };
905
+ it('bundles instructions in the order [create, thaw, transfer]', async () => {
906
+ const txBuilder = buildToken2022TransferWithAta();
907
+ txBuilder.permissionlessThaw(thawParams);
908
+ const tx = await txBuilder.build();
909
+ const types = tx.toJson().instructionsData.map((i) => i.type);
910
+ types.should.deepEqual(['CreateAssociatedTokenAccount', 'PermissionlessThawIdempotent', 'TokenTransfer']);
911
+ const thaw = tx.toJson().instructionsData.find((i) => i.type === 'PermissionlessThawIdempotent');
912
+ should_1.default.exist(thaw);
913
+ thaw.params.gatingProgram.should.equal(thawParams.gatingProgram);
914
+ thaw.params.mintConfig.should.equal(thawParams.mintConfig);
915
+ thaw.params.flagAccount.should.equal(thawParams.flagAccount);
916
+ thaw.params.extraAccounts.should.deepEqual(thawParams.extraAccounts);
917
+ });
918
+ it('omits the thaw instruction when permissionlessThaw is not set', async () => {
919
+ const tx = await buildToken2022TransferWithAta().build();
920
+ const types = tx.toJson().instructionsData.map((i) => i.type);
921
+ types.should.deepEqual(['CreateAssociatedTokenAccount', 'TokenTransfer']);
922
+ should_1.default.equal(tx.toJson().instructionsData.find((i) => i.type === 'PermissionlessThawIdempotent'), undefined);
923
+ });
924
+ });
826
925
  });
827
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3Rva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNERBQXlEO0FBQ3pELHNDQUE4QztBQUM5QyxvREFBNEI7QUFDNUIsOERBQWdEO0FBR2hELFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDMUMsSUFBSSxVQUFVLENBQUM7SUFDZixNQUFNLE9BQU8sR0FBRyxJQUFBLHFDQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3BELFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hFLE1BQU0sWUFBWSxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRSxNQUFNLFlBQVksR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JGLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMs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QUNiLElBQUksRUFBRSxRQUFRO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRztnQkFDekIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDckIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDckIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDckIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDckIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0s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U0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzRSxTQUFTLENBQUMsNEJBQTRCLENBQUM7Z0JBQ3JDLFlBQVksRUFBRSxZQUFZLENBQUMsR0FBRztnQkFDOUIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLFVBQVU7YUFDWCxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssOEJBQThCLENBQUMsQ0FBQztZQUN0RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4QixTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgS2V5UGFpciwgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3NvbCc7XG5pbXBvcnQgeyBGZWVPcHRpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5kZXNjcmliZSgnU29sIFRva2VuIFRyYW5zZmVyIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGxldCBhdGFBZGRyZXNzO1xuICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3Rzb2wnKTtcblxuICBjb25zdCB0b2tlblRyYW5zZmVyQnVpbGRlciA9ICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcihhdXRoQWNjb3VudC5wdWIpO1xuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgY29uc3QgYXV0aEFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hdXRoQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBub25jZUFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5ub25jZUFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3Qgb3RoZXJBY2NvdW50ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTggfSkuZ2V0S2V5cygpO1xuICBjb25zdCBpbnZhbGlkUHViS2V5ID0gdGVzdERhdGEucHViS2V5cy5pbnZhbGlkUHViS2V5c1swXTtcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcbiAgY29uc3QgYW1vdW50ID0gdGVzdERhdGEudG9rZW5UcmFuc2ZlcnMuYW1vdW50LnRvU3RyaW5nKCk7XG4gIGNvbnN0IG1lbW8gPSB0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5tZW1vO1xuICBjb25zdCBuYW1lVVNEQyA9IHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLm5hbWVVU0RDO1xuICBjb25zdCBtaW50VVNEQyA9IHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLm1pbnRVU0RDO1xuICBjb25zdCBvd25lciA9IHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLm93bmVyO1xuICBjb25zdCBuYW1lQU1TID0gdGVzdERhdGEuYW1zVG9rZW5UcmFuc2ZlcnMubmFtZUFNU1Rva2VuO1xuICBjb25zdCBtaW50QU1TID0gdGVzdERhdGEuYW1zVG9rZW5UcmFuc2ZlcnMubWludEFNUztcbiAgY29uc3QgYW1zUHJvZ3JhbUlEID0gdGVzdERhdGEuYW1zVG9rZW5UcmFuc2ZlcnMucHJvZ3JhbUlEO1xuICBjb25zdCB3YWxsZXRQSyA9IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLnB1YjtcbiAgY29uc3Qgd2FsbGV0U0sgPSB0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXS5wcnY7XG4gIGNvbnN0IHByaW9GZWVNaWNyb0xhbXBvcnRzID0gJzEwMDAwMDAwJztcbiAgY29uc3QgcHJpb3JpdHlGZWU6IEZlZU9wdGlvbnMgPSB7XG4gICAgYW1vdW50OiBwcmlvRmVlTWljcm9MYW1wb3J0cyxcbiAgfTtcbiAgZGVzY3JpYmUoJ1N1Y2NlZWQnLCAoKSA9PiB7XG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGF0YUFkZHJlc3MgPSBhd2FpdCBVdGlscy5nZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcyhtaW50VVNEQywgb3RoZXJBY2NvdW50LnB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0b2tlbiB0cmFuc2ZlciB0eCB1bnNpZ25lZCB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhtZW1vKTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuVE9LRU5fVFJBTlNGRVJfVU5TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRva2VuIHRyYW5zZmVyIHR4IHVuc2lnbmVkIHdpdGggZHVyYWJsZSBub25jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHsgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLCBhdXRoV2FsbGV0QWRkcmVzczogd2FsbGV0UEsgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9UWF9XSVRIX0RVUkFCTEVfTk9OQ0UpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZHVyYWJsZU5vbmNlLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgdG9rZW4gdHJhbnNmZXIgdHggdW5zaWduZWQgd2l0aCBtZW1vIGFuZCBkdXJhYmxlIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgeyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiB3YWxsZXRQSyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhtZW1vKTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuVE9LRU5fVFJBTlNGRVJfVU5TSUdORURfVFhfV0lUSF9NRU1PX0FORF9EVVJBQkxFX05PTkNFKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRva2VuIHRyYW5zZmVyIHR4IHVuc2lnbmVkIHdpdGhvdXQgbWVtbyBvciBkdXJhYmxlIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9UWF9XSVRIT1VUX01FTU8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgdG9rZW4gdHJhbnNmZXIgdHggc2lnbmVkIHdpdGggbWVtbyBhbmQgZHVyYWJsZSBub25jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHtcbiAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLFxuICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogd2FsbGV0UEssXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhtZW1vKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB3YWxsZXRTSyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHguaWQuc2hvdWxkLm5vdC5lcXVhbCh1bmRlZmluZWQpO1xuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuVE9LRU5fVFJBTlNGRVJfU0lHTkVEX1RYX1dJVEhfTUVNT19BTkRfRFVSQUJMRV9OT05DRSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0b2tlbiBtdWx0aSB0cmFuc2ZlciB0eCBzaWduZWQgd2l0aCBtZW1vIGFuZCBkdXJhYmxlIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWNjb3VudDEgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnYxIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IGFjY291bnQyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2MiB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBhY2NvdW50MyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5leHRyYUFjY291bnRzLnBydjMgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgYWNjb3VudDQgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnY0IH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IGFjY291bnQ1ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2NSB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHsgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLCBhdXRoV2FsbGV0QWRkcmVzczogYXV0aEFjY291bnQucHViIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcihvd25lcik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDEucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGFjY291bnQyLnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBhY2NvdW50My5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGFjY291bnQ1LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYXV0aEFjY291bnQucHJ2IH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCg2KTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3duZXIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbMV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG93bmVyLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHguaW5wdXRzWzJdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvd25lcixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1szXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3duZXIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbNF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG93bmVyLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHguaW5wdXRzWzVdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvd25lcixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCg2KTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzFdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50MS5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzJdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50Mi5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzNdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50My5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzRdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50NC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzVdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50NS5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX1RPS0VOX1RSQU5TRkVSX1NJR05FRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0b2tlbiBtdWx0aSBhc3NldCB0cmFuc2ZlciB0eCB1bnNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFjY291bnQxID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2MSB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBhY2NvdW50MiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5leHRyYUFjY291bnRzLnBydjIgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgYWNjb3VudDMgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnYzIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IG5hbWVTUk0gPSAndHNvbDpzcm0nO1xuICAgICAgY29uc3QgbmFtZVJBWSA9ICd0c29sOnJheSc7XG5cbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcihvd25lcik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDEucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGFjY291bnQyLnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVTUk0gfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGFjY291bnQzLnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVSQVkgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvd25lcixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1sxXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3duZXIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbMl0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG93bmVyLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lU1JNLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbM10uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG93bmVyLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lUkFZLFxuICAgICAgfSk7XG5cbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCg0KTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzFdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50MS5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzJdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50Mi5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVTUk0sXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbM10uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQzLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVJBWSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVswXS50eXBlLnNob3VsZC5lcXVhbCgnU2V0UHJpb3JpdHlGZWUnKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzFdLnBhcmFtcy5zb3VyY2VBZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5zb3VyY2VVU0RDKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnBhcmFtcy5zb3VyY2VBZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5zb3VyY2VVU0RDKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzNdLnBhcmFtcy5zb3VyY2VBZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5zb3VyY2VTUk0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbNF0ucGFyYW1zLnNvdXJjZUFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLnNvdXJjZVJBWSk7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfQVNTRVRfVE9LRU5fVFJBTlNGRVJfVU5TSUdORUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgdHJhbnNmZXIgd2l0aCBsYXJnZSBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMTg0NDY3NDQwNzM3MDk1NTE2MTUnO1xuICAgICAgY29uc3QgYWNjb3VudDEgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnYxIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKG93bmVyKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDEucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgdHgub3V0cHV0cy5zaG91bGQuZGVlcEVxdWFsKFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGFjY291bnQxLnB1YixcbiAgICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0b2tlbiB0cmFuc2ZlciB0eCB1bnNpZ25lZCB3aXRoIGNyZWF0ZSBBVEEsIG1lbW8gYW5kIGR1cmFibGUgbm9uY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IHdhbGxldFBLIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXRQSyk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByaW9GZWVNaWNyb0xhbXBvcnRzID0gJzAnO1xuICAgICAgY29uc3QgcHJpb3JpdHlGZWU6IEZlZU9wdGlvbnMgPSB7XG4gICAgICAgIGFtb3VudDogcHJpb0ZlZU1pY3JvTGFtcG9ydHMsXG4gICAgICB9O1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAvLyBTaW5jZSBwcmlvIGZlZSBpcyAwLCB3ZSBhcmUgbm90IGFkZGluZyBjb21wdXRlIHVuaXQgcHJpY2UgaW5zdHJ1Y3Rpb25cbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVswXS50eXBlLnNob3VsZC5lcXVhbCgnQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMF0ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBtaW50QWRkcmVzczogbWludFVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgcGF5ZXJBZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnQVRva2VuR1B2YmRHVnhyMWIyaHZaYnNpcVc1eFdIMjVlZlROc0xKQThrbkwnLFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsxXS50eXBlLnNob3VsZC5lcXVhbCgnVG9rZW5UcmFuc2ZlcicpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMV0ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBmcm9tQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRvQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHNvdXJjZUFkZHJlc3M6ICdCNXJKanVWaTdFbjYzaUs2bzNpaktkSndBb1RlMmd3Q1ltSnNWZEhRMmFLVicsXG4gICAgICAgIHRva2VuQWRkcmVzczogJ0Y0dUxlWEpvRnozaHcxM01wb3N1d2FRYk1jWmJDanF2RUdQUGVSUkIxQnlmJyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnVG9rZW5rZWdRZmVaeWlOd0FKYk5iR0tQRlhDV3VCdmY5U3M2MjNWUTVEQScsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDksXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnR5cGUuc2hvdWxkLmVxdWFsKCdNZW1vJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsyXS5wYXJhbXMubWVtby5zaG91bGQuZXF1YWwobWVtbyk7XG5cbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuVE9LRU5fVFJBTlNGRVJfVU5TSUdORURfV0lUSF9DUkVBVEVfQVRBX0FORF9NRU1PX0FORF9EVVJBQkxFX05PTkNFKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRva2VuIHRyYW5zZmVyIHR4IHVuc2lnbmVkIHdpdGggY3JlYXRlIEFUQSwgbWVtbyBhbmQgZHVyYWJsZSBub25jZSB3aXRoIG9wdGlvbmFsIHBhcmFtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgeyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiB3YWxsZXRQSyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZUFNUyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiBtaW50QU1TLFxuICAgICAgICBwcm9ncmFtSWQ6IGFtc1Byb2dyYW1JRCxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogOSxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lQU1TLFxuICAgICAgICB0b2tlbkFkZHJlc3M6IG1pbnRBTVMsXG4gICAgICAgIHByb2dyYW1JZDogYW1zUHJvZ3JhbUlELFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcmlvRmVlTWljcm9MYW1wb3J0cyA9ICcwJztcbiAgICAgIGNvbnN0IHByaW9yaXR5RmVlOiBGZWVPcHRpb25zID0ge1xuICAgICAgICBhbW91bnQ6IHByaW9GZWVNaWNyb0xhbXBvcnRzLFxuICAgICAgfTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lQU1TLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lQU1TLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIC8vIFNpbmNlIHByaW8gZmVlIGlzIDAsIHdlIGFyZSBub3QgYWRkaW5nIGNvbXB1dGUgdW5pdCBwcmljZSBpbnN0cnVjdGlvblxuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVswXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIG1pbnRBZGRyZXNzOiBtaW50QU1TLFxuICAgICAgICBhdGFBZGRyZXNzOiAnOEtMbnJvUDZoSGtyMVpzUUw0azZBM2kyeWhobnYya3IyVGVlZHg3YTI2RWcnLFxuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHBheWVyQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRva2VuTmFtZTogbmFtZUFNUyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnQVRva2VuR1B2YmRHVnhyMWIyaHZaYnNpcVc1eFdIMjVlZlROc0xKQThrbkwnLFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsxXS50eXBlLnNob3VsZC5lcXVhbCgnVG9rZW5UcmFuc2ZlcicpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMV0ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBmcm9tQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRvQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZUFNUyxcbiAgICAgICAgc291cmNlQWRkcmVzczogJ0V5dEhtM2dXU21hVGt1RjFkYXRlcGdEeng3Z3JHdURHN3dzNVFBN3RDbVU0JyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnRjR1TGVYaW9GejNodzEzTXBvc3V3YVFiTWNaYkNqcXZFR1BQZVJSQjFCeWYnLFxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbmtlZ1FmZVp5aU53QUpiTmJHS1BGWENXdUJ2ZjlTczYyM1ZRNURBJyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogOSxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0udHlwZS5zaG91bGQuZXF1YWwoJ01lbW8nKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnBhcmFtcy5tZW1vLnNob3VsZC5lcXVhbChtZW1vKTtcblxuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICByYXdUeCxcbiAgICAgICAgdGVzdERhdGEuVE9LRU5fVFJBTlNGRVJfVU5TSUdORURfV0lUSF9DUkVBVEVfQVRBX0FORF9NRU1PX0FORF9EVVJBQkxFX05PTkNFX1dJVEhfT1BUSU9OQUxfUEFSQU1TXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgbXVsdGkgdG9rZW4gdHJhbnNmZXIgdHggdW5zaWduZWQgd2l0aCBtdWx0aSBjcmVhdGUgQVRBLCBtZW1vIGFuZCBkdXJhYmxlIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWNjb3VudDEgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnYxIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IGFjY291bnQyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2MiB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBhdGFBZGRyZXNzMSA9IGF3YWl0IFV0aWxzLmdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKG1pbnRVU0RDLCBhY2NvdW50MS5wdWIpO1xuICAgICAgY29uc3QgYXRhQWRkcmVzczIgPSBhd2FpdCBVdGlscy5nZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcyhtaW50VVNEQywgYWNjb3VudDIucHViKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXRQSyk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IHdhbGxldFBLIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGFjY291bnQxLnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBhY2NvdW50Mi5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50KHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBhY2NvdW50MS5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MxLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogYWNjb3VudDIucHViLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzMixcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbMV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHguaW5wdXRzWzJdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzFdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50MS5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzJdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBhY2NvdW50Mi5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoOCk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVswXS50eXBlLnNob3VsZC5lcXVhbCgnU2V0UHJpb3JpdHlGZWUnKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzFdLnR5cGUuc2hvdWxkLmVxdWFsKCdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsxXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIG1pbnRBZGRyZXNzOiBtaW50VVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBwYXllckFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBwcm9ncmFtSWQ6ICdBVG9rZW5HUHZiZEdWeHIxYjJodlpic2lxVzV4V0gyNWVmVE5zTEpBOGtuTCcsXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnR5cGUuc2hvdWxkLmVxdWFsKCdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsyXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIG1pbnRBZGRyZXNzOiBtaW50VVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzczEsXG4gICAgICAgIG93bmVyQWRkcmVzczogYWNjb3VudDEucHViLFxuICAgICAgICBwYXllckFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBwcm9ncmFtSWQ6ICdBVG9rZW5HUHZiZEdWeHIxYjJodlpic2lxVzV4V0gyNWVmVE5zTEpBOGtuTCcsXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnR5cGUuc2hvdWxkLmVxdWFsKCdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVszXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIG1pbnRBZGRyZXNzOiBtaW50VVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzczIsXG4gICAgICAgIG93bmVyQWRkcmVzczogYWNjb3VudDIucHViLFxuICAgICAgICBwYXllckFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBwcm9ncmFtSWQ6ICdBVG9rZW5HUHZiZEdWeHIxYjJodlpic2lxVzV4V0gyNWVmVE5zTEpBOGtuTCcsXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoOCk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs0XS50eXBlLnNob3VsZC5lcXVhbCgnVG9rZW5UcmFuc2ZlcicpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbNF0ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBmcm9tQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRvQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHNvdXJjZUFkZHJlc3M6ICdCNXJKanVWaTdFbjYzaUs2bzNpaktkSndBb1RlMmd3Q1ltSnNWZEhRMmFLVicsXG4gICAgICAgIHRva2VuQWRkcmVzczogJ0Y0dUxlWEpvRnozaHcxM01wb3N1d2FRYk1jWmJDanF2RUdQUGVSUkIxQnlmJyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnVG9rZW5rZWdRZmVaeWlOd0FKYk5iR0tQRlhDV3VCdmY5U3M2MjNWUTVEQScsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDksXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzVdLnR5cGUuc2hvdWxkLmVxdWFsKCdUb2tlblRyYW5zZmVyJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs1XS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9BZGRyZXNzOiBhY2NvdW50MS5wdWIsXG4gICAgICAgIGFtb3VudDogYW1vdW50LFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBzb3VyY2VBZGRyZXNzOiAnQjVySmp1Vmk3RW42M2lLNm8zaWpLZEp3QW9UZTJnd0NZbUpzVmRIUTJhS1YnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICdGNHVMZVhKb0Z6M2h3MTNNcG9zdXdhUWJNY1piQ2pxdkVHUFBlUlJCMUJ5ZicsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2Vua2VnUWZlWnlpTndBSmJOYkdLUEZYQ1d1QnZmOVNzNjIzVlE1REEnLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiA5LFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs2XS50eXBlLnNob3VsZC5lcXVhbCgnVG9rZW5UcmFuc2ZlcicpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbNl0ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBmcm9tQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRvQWRkcmVzczogYWNjb3VudDIucHViLFxuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgc291cmNlQWRkcmVzczogJ0I1ckpqdVZpN0VuNjNpSzZvM2lqS2RKd0FvVGUyZ3dDWW1Kc1ZkSFEyYUtWJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnRjR1TGVYSm9GejNodzEzTXBvc3V3YVFiTWNaYkNqcXZFR1BQZVJSQjFCeWYnLFxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbmtlZ1FmZVp5aU53QUpiTmJHS1BGWENXdUJ2ZjlTczYyM1ZRNURBJyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogOSxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbN10udHlwZS5zaG91bGQuZXF1YWwoJ01lbW8nKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzddLnBhcmFtcy5tZW1vLnNob3VsZC5lcXVhbChtZW1vKTtcblxuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9XSVRIX01VTFRJX0NSRUFURV9BVEFfQU5EX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgbXVsdGkgdG9rZW4gdHJhbnNmZXIgdHggdW5zaWduZWQgd2l0aCB1bmlxdWUgY3JlYXRlIEFUQSwgbWVtbyBhbmQgZHVyYWJsZSBub25jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgeyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiB3YWxsZXRQSyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50KHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzcyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbMV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHguaW5wdXRzWzJdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzFdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0c1syXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCg2KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdTZXRQcmlvcml0eUZlZScpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMV0udHlwZS5zaG91bGQuZXF1YWwoJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzFdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgbWludEFkZHJlc3M6IG1pbnRVU0RDLFxuICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzLFxuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHBheWVyQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHByb2dyYW1JZDogJ0FUb2tlbkdQdmJkR1Z4cjFiMmh2WmJzaXFXNXhXSDI1ZWZUTnNMSkE4a25MJyxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0udHlwZS5zaG91bGQuZXF1YWwoJ1Rva2VuVHJhbnNmZXInKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZnJvbUFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB0b0FkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIGFtb3VudDogYW1vdW50LFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBzb3VyY2VBZGRyZXNzOiAnQjVySmp1Vmk3RW42M2lLNm8zaWpLZEp3QW9UZTJnd0NZbUpzVmRIUTJhS1YnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICdGNHVMZVhKb0Z6M2h3MTNNcG9zdXdhUWJNY1piQ2pxdkVHUFBlUlJCMUJ5ZicsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2Vua2VnUWZlWnlpTndBSmJOYkdLUEZYQ1d1QnZmOVNzNjIzVlE1REEnLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiA5LFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVszXS50eXBlLnNob3VsZC5lcXVhbCgnVG9rZW5UcmFuc2ZlcicpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbM10ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBmcm9tQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRvQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHNvdXJjZUFkZHJlc3M6ICdCNXJKanVWaTdFbjYzaUs2bzNpaktkSndBb1RlMmd3Q1ltSnNWZEhRMmFLVicsXG4gICAgICAgIHRva2VuQWRkcmVzczogJ0Y0dUxlWEpvRnozaHcxM01wb3N1d2FRYk1jWmJDanF2RUdQUGVSUkIxQnlmJyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnVG9rZW5rZWdRZmVaeWlOd0FKYk5iR0tQRlhDV3VCdmY5U3M2MjNWUTVEQScsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDksXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzRdLnR5cGUuc2hvdWxkLmVxdWFsKCdUb2tlblRyYW5zZmVyJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs0XS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9BZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgc291cmNlQWRkcmVzczogJ0I1ckpqdVZpN0VuNjNpSzZvM2lqS2RKd0FvVGUyZ3dDWW1Kc1ZkSFEyYUtWJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnRjR1TGVYSm9GejNodzEzTXBvc3V3YVFiTWNaYkNqcXZFR1BQZVJSQjFCeWYnLFxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbmtlZ1FmZVp5aU53QUpiTmJHS1BGWENXdUJ2ZjlTczYyM1ZRNURBJyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogOSxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbNV0udHlwZS5zaG91bGQuZXF1YWwoJ01lbW8nKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzVdLnBhcmFtcy5tZW1vLnNob3VsZC5lcXVhbChtZW1vKTtcblxuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9XSVRIX1VOSVFVRV9DUkVBVEVfQVRBX0FORF9NRU1PX0FORF9EVVJBQkxFX05PTkNFKTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdGYWlsJywgKCkgPT4ge1xuICAgIGl0KCdmb3IgaW52YWxpZCBzZW5kZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0b2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5zZW5kZXIoaW52YWxpZFB1YktleSkpLnRocm93RXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBzZW5kZXIsIGdvdDogJyArIGludmFsaWRQdWJLZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvciBpbnZhbGlkIHRvQWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBpbnZhbGlkUHViS2V5LCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSkpLnRocm93RXJyb3IoXG4gICAgICAgICdJbnZhbGlkIG9yIG1pc3NpbmcgYWRkcmVzcywgZ290OiAnICsgaW52YWxpZFB1YktleVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdmb3IgaW52YWxpZCBhbW91bnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnZhbGlkQW1vdW50ID0gJ3JhbmRvbXN0cmluZyc7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0b2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgIHR4QnVpbGRlci5zZW5kKHtcbiAgICAgICAgICBhZGRyZXNzOiBub25jZUFjY291bnQucHViLFxuICAgICAgICAgIGFtb3VudDogaW52YWxpZEFtb3VudCxcbiAgICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICB9KVxuICAgICAgKS50aHJvd0Vycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgYW1vdW50LCBnb3Q6ICcgKyBpbnZhbGlkQW1vdW50KTtcblxuICAgICAgY29uc3QgZXhjZXNzaXZlQW1vdW50ID0gJzE4NDQ2NzQ0MDczNzA5NTUxNjE2JztcbiAgICAgIHNob3VsZCgoKSA9PlxuICAgICAgICB0eEJ1aWxkZXIuc2VuZCh7XG4gICAgICAgICAgYWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgICAgICBhbW91bnQ6IGV4Y2Vzc2l2ZUFtb3VudCxcbiAgICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICB9KVxuICAgICAgKS50aHJvd0Vycm9yKGBpbnB1dCBhbW91bnQgJHtleGNlc3NpdmVBbW91bnR9IGV4Y2VlZHMgYmlnIGludCBsaW1pdCAxODQ0Njc0NDA3MzcwOTU1MTYxNWApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvciBpbnZhbGlkIHJlbnQgYW1vdW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZEFtb3VudCA9ICdyYW5kb21zdHJpbmcnO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYXNzb2NpYXRlZFRva2VuQWNjb3VudFJlbnQoaW52YWxpZEFtb3VudCkpLnRocm93RXJyb3IoXG4gICAgICAgICdJbnZhbGlkIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsIGdvdDogJyArIGludmFsaWRBbW91bnRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG5lZ2F0aXZlQW1vdW50ID0gJy0xMTEnO1xuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudChuZWdhdGl2ZUFtb3VudCkpLnRocm93RXJyb3IoXG4gICAgICAgICdJbnZhbGlkIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsIGdvdDogJyArIG5lZ2F0aXZlQW1vdW50XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvciBpbnZhbGlkIG93bmVyQWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT5cbiAgICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICAgIG93bmVyQWRkcmVzczogaW52YWxpZFB1YktleSxcbiAgICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICAgIH0pXG4gICAgICApLnRocm93RXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBvd25lckFkZHJlc3MsIGdvdDogJyArIGludmFsaWRQdWJLZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvciBpbnZhbGlkIHRva2VuTmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRUb2tlbk5hbWUgPSAndHNvbDpyYW5kb20nO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PlxuICAgICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiBub25jZUFjY291bnQucHViLFxuICAgICAgICAgIHRva2VuTmFtZTogaW52YWxpZFRva2VuTmFtZSxcbiAgICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzLFxuICAgICAgICB9KVxuICAgICAgKS50aHJvd0Vycm9yKCdJbnZhbGlkIHRva2VuIG5hbWUsIGdvdDogJyArIGludmFsaWRUb2tlbk5hbWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ3JlYXRlIEFUQSByZW50IHBheWVyIHNlbGVjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBmZWVQYXllckFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5mZWVQYXllckFjY291bnQpLmdldEtleXMoKTtcblxuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICBhdGFBZGRyZXNzID0gYXdhaXQgVXRpbHMuZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MobWludFVTREMsIG90aGVyQWNjb3VudC5wdWIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VzZXMgZmVlUGF5ZXIgYXMgQ3JlYXRlLUFUQSByZW50IHBheWVyIHdoZW4gZmVlUGF5ZXIgaXMgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlUGF5ZXIoZmVlUGF5ZXJBY2NvdW50LnB1Yik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3MsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgY3JlYXRlQXRhID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YS5maW5kKChpKSA9PiBpLnR5cGUgPT09ICdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgICBzaG91bGQuZXhpc3QoY3JlYXRlQXRhKTtcbiAgICAgIGNyZWF0ZUF0YS5wYXJhbXMucGF5ZXJBZGRyZXNzLnNob3VsZC5lcXVhbChmZWVQYXllckFjY291bnQucHViKTtcbiAgICAgIGNyZWF0ZUF0YS5wYXJhbXMucGF5ZXJBZGRyZXNzLnNob3VsZC5ub3QuZXF1YWwod2FsbGV0UEspO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gc2VuZGVyIGFzIENyZWF0ZS1BVEEgcmVudCBwYXllciB3aGVuIGZlZVBheWVyIGlzIHVuc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3MsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgY3JlYXRlQXRhID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YS5maW5kKChpKSA9PiBpLnR5cGUgPT09ICdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgICBzaG91bGQuZXhpc3QoY3JlYXRlQXRhKTtcbiAgICAgIGNyZWF0ZUF0YS5wYXJhbXMucGF5ZXJBZGRyZXNzLnNob3VsZC5lcXVhbCh3YWxsZXRQSyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
926
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3Rva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNERBQXlEO0FBQ3pELHNDQUE4QztBQUM5QyxvREFBNEI7QUFDNUIsOERBQWdEO0FBRWhELGlEQUEwRDtBQUcxRCxRQUFRLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO0lBQzFDLElBQUksVUFBVSxDQUFDO0lBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUUxQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtRQUNoQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNwRCxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyRixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGNB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RUFBRTtZQUM3RSxNQUFNLEVBQUUsR0FBRyxNQUFNLDZCQUE2QixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsOEJBQThCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUMxRSxnQkFBTSxDQUFDLEtBQUssQ0FDVixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDhCQUE4QixDQUFDLEVBQ25GLFNBQVMsQ0FDVixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi9nZXRCdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBLZXlQYWlyLCBVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IEZlZU9wdGlvbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUT0tFTl8yMDIyX1BST0dSQU1fSUQgfSBmcm9tICdAc29sYW5hL3NwbC10b2tlbic7XG5pbXBvcnQgeyBFeHRyYUFjY291bnRNZXRhIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmRlc2NyaWJlKCdTb2wgVG9rZW4gVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgbGV0IGF0YUFkZHJlc3M7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgndHNvbCcpO1xuXG4gIGNvbnN0IHRva2VuVHJhbnNmZXJCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGF1dGhBY2NvdW50LnB1Yik7XG4gICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgfTtcblxuICBjb25zdCBhdXRoQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmF1dGhBY2NvdW50KS5nZXRLZXlzKCk7XG4gIGNvbnN0IG5vbmNlQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLm5vbmNlQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBvdGhlckFjY291bnQgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEucHJ2S2V5cy5wcnZLZXkxLmJhc2U1OCB9KS5nZXRLZXlzKCk7XG4gIGNvbnN0IGludmFsaWRQdWJLZXkgPSB0ZXN0RGF0YS5wdWJLZXlzLmludmFsaWRQdWJLZXlzWzBdO1xuICBjb25zdCByZWNlbnRCbG9ja0hhc2ggPSAnR0h0WFFCc29aSFZuTkZhOVlldkF6RnIxN0RKamdIWGszeWNUS0Q1eEQzWmknO1xuICBjb25zdCBhbW91bnQgPSB0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5hbW91bnQudG9TdHJpbmcoKTtcbiAgY29uc3QgbWVtbyA9IHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLm1lbW87XG4gIGNvbnN0IG5hbWVVU0RDID0gdGVzdERhdGEudG9rZW5UcmFuc2ZlcnMubmFtZVVTREM7XG4gIGNvbnN0IG1pbnRVU0RDID0gdGVzdERhdGEudG9rZW5UcmFuc2ZlcnMubWludFVTREM7XG4gIGNvbnN0IG93bmVyID0gdGVzdERhdGEudG9rZW5UcmFuc2ZlcnMub3duZXI7XG4gIGNvbnN0IG5hbWVBTVMgPSB0ZXN0RGF0YS5hbXNUb2tlblRyYW5zZmVycy5uYW1lQU1TVG9rZW47XG4gIGNvbnN0IG1pbnRBTVMgPSB0ZXN0RGF0YS5hbXNUb2tlblRyYW5zZmVycy5taW50QU1TO1xuICBjb25zdCBhbXNQcm9ncmFtSUQgPSB0ZXN0RGF0YS5hbXNUb2tlblRyYW5zZmVycy5wcm9ncmFtSUQ7XG4gIGNvbnN0IHdhbGxldFBLID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0ucHViO1xuICBjb25zdCB3YWxsZXRTSyA9IHRlc3REYXRhLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzLmFjY291bnRzWzBdLnBydjtcbiAgY29uc3QgcHJpb0ZlZU1pY3JvTGFtcG9ydHMgPSAnMTAwMDAwMDAnO1xuICBjb25zdCBwcmlvcml0eUZlZTogRmVlT3B0aW9ucyA9IHtcbiAgICBhbW91bnQ6IHByaW9GZWVNaWNyb0xhbXBvcnRzLFxuICB9O1xuICBkZXNjcmliZSgnU3VjY2VlZCcsICgpID0+IHtcbiAgICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXRhQWRkcmVzcyA9IGF3YWl0IFV0aWxzLmdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKG1pbnRVU0RDLCBvdGhlckFjY291bnQucHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRva2VuIHRyYW5zZmVyIHR4IHVuc2lnbmVkIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXRQSyk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgdG9rZW4gdHJhbnNmZXIgdHggdW5zaWduZWQgd2l0aCBkdXJhYmxlIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgeyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiB3YWxsZXRQSyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLlRPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1RYX1dJVEhfRFVSQUJMRV9OT05DRSk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5kdXJhYmxlTm9uY2Uuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0b2tlbiB0cmFuc2ZlciB0eCB1bnNpZ25lZCB3aXRoIG1lbW8gYW5kIGR1cmFibGUgbm9uY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IHdhbGxldFBLIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXRQSyk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9UWF9XSVRIX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgdG9rZW4gdHJhbnNmZXIgdHggdW5zaWduZWQgd2l0aG91dCBtZW1vIG9yIGR1cmFibGUgbm9uY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLlRPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1RYX1dJVEhPVVRfTUVNTyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0b2tlbiB0cmFuc2ZlciB0eCBzaWduZWQgd2l0aCBtZW1vIGFuZCBkdXJhYmxlIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwge1xuICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXRQSyk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5tZW1vKG1lbW8pO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdhbGxldFNLIH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pZC5zaG91bGQubm90LmVxdWFsKHVuZGVmaW5lZCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9TSUdORURfVFhfV0lUSF9NRU1PX0FORF9EVVJBQkxFX05PTkNFKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRva2VuIG11bHRpIHRyYW5zZmVyIHR4IHNpZ25lZCB3aXRoIG1lbW8gYW5kIGR1cmFibGUgbm9uY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhY2NvdW50MSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5leHRyYUFjY291bnRzLnBydjEgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgYWNjb3VudDIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnYyIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IGFjY291bnQzID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2MyB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBhY2NvdW50NCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5leHRyYUFjY291bnRzLnBydjQgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgYWNjb3VudDUgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnY1IH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgeyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiBhdXRoQWNjb3VudC5wdWIgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKG93bmVyKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBhY2NvdW50MS5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDIucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGFjY291bnQzLnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBhY2NvdW50NC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDUucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhtZW1vKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhdXRoQWNjb3VudC5wcnYgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDYpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvd25lcixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1sxXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3duZXIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbMl0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG93bmVyLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHguaW5wdXRzWzNdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvd25lcixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1s0XS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3duZXIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbNV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG93bmVyLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDYpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbMV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQxLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbMl0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQyLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbM10uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQzLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbNF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQ0LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbNV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQ1LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuTVVMVElfVE9LRU5fVFJBTlNGRVJfU0lHTkVEKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRva2VuIG11bHRpIGFzc2V0IHRyYW5zZmVyIHR4IHVuc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWNjb3VudDEgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnYxIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IGFjY291bnQyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2MiB9KS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBhY2NvdW50MyA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5leHRyYUFjY291bnRzLnBydjMgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgY29uc3QgbmFtZVNSTSA9ICd0c29sOnNybSc7XG4gICAgICBjb25zdCBuYW1lUkFZID0gJ3Rzb2w6cmF5JztcblxuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKG93bmVyKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBhY2NvdW50MS5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDIucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVNSTSB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDMucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVJBWSB9KTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoNCk7XG4gICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG93bmVyLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHguaW5wdXRzWzFdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvd25lcixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1syXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3duZXIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVTUk0sXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1szXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3duZXIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVSQVksXG4gICAgICB9KTtcblxuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbMV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQxLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbMl0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQyLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVNSTSxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0c1szXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogYWNjb3VudDMucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lUkFZLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdTZXRQcmlvcml0eUZlZScpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMV0ucGFyYW1zLnNvdXJjZUFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLnNvdXJjZVVTREMpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0ucGFyYW1zLnNvdXJjZUFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLnNvdXJjZVVTREMpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbM10ucGFyYW1zLnNvdXJjZUFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRva2VuVHJhbnNmZXJzLnNvdXJjZVNSTSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs0XS5wYXJhbXMuc291cmNlQWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEudG9rZW5UcmFuc2ZlcnMuc291cmNlUkFZKTtcblxuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5NVUxUSV9BU1NFVF9UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0cmFuc2ZlciB3aXRoIGxhcmdlIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxODQ0Njc0NDA3MzcwOTU1MTYxNSc7XG4gICAgICBjb25zdCBhY2NvdW50MSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5leHRyYUFjY291bnRzLnBydjEgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuXG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIob3duZXIpO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBhY2NvdW50MS5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICB0eC5vdXRwdXRzLnNob3VsZC5kZWVwRXF1YWwoW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogYWNjb3VudDEucHViLFxuICAgICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRva2VuIHRyYW5zZmVyIHR4IHVuc2lnbmVkIHdpdGggY3JlYXRlIEFUQSwgbWVtbyBhbmQgZHVyYWJsZSBub25jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHsgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLCBhdXRoV2FsbGV0QWRkcmVzczogd2FsbGV0UEsgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzcyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJpb0ZlZU1pY3JvTGFtcG9ydHMgPSAnMCc7XG4gICAgICBjb25zdCBwcmlvcml0eUZlZTogRmVlT3B0aW9ucyA9IHtcbiAgICAgICAgYW1vdW50OiBwcmlvRmVlTWljcm9MYW1wb3J0cyxcbiAgICAgIH07XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIC8vIFNpbmNlIHByaW8gZmVlIGlzIDAsIHdlIGFyZSBub3QgYWRkaW5nIGNvbXB1dGUgdW5pdCBwcmljZSBpbnN0cnVjdGlvblxuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCgzKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVswXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIG1pbnRBZGRyZXNzOiBtaW50VVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBwYXllckFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBwcm9ncmFtSWQ6ICdBVG9rZW5HUHZiZEdWeHIxYjJodlpic2lxVzV4V0gyNWVmVE5zTEpBOGtuTCcsXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzFdLnR5cGUuc2hvdWxkLmVxdWFsKCdUb2tlblRyYW5zZmVyJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsxXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9BZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgc291cmNlQWRkcmVzczogJ0I1ckpqdVZpN0VuNjNpSzZvM2lqS2RKd0FvVGUyZ3dDWW1Kc1ZkSFEyYUtWJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnRjR1TGVYSm9GejNodzEzTXBvc3V3YVFiTWNaYkNqcXZFR1BQZVJSQjFCeWYnLFxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbmtlZ1FmZVp5aU53QUpiTmJHS1BGWENXdUJ2ZjlTczYyM1ZRNURBJyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogOSxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0udHlwZS5zaG91bGQuZXF1YWwoJ01lbW8nKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnBhcmFtcy5tZW1vLnNob3VsZC5lcXVhbChtZW1vKTtcblxuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKFV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUeCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9XSVRIX0NSRUFURV9BVEFfQU5EX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgdG9rZW4gdHJhbnNmZXIgdHggdW5zaWduZWQgd2l0aCBjcmVhdGUgQVRBLCBtZW1vIGFuZCBkdXJhYmxlIG5vbmNlIHdpdGggb3B0aW9uYWwgcGFyYW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IHdhbGxldFBLIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXRQSyk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lQU1TLFxuICAgICAgICB0b2tlbkFkZHJlc3M6IG1pbnRBTVMsXG4gICAgICAgIHByb2dyYW1JZDogYW1zUHJvZ3JhbUlELFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiA5LFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhtZW1vKTtcbiAgICAgIHR4QnVpbGRlci5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50KHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVBTVMsXG4gICAgICAgIHRva2VuQWRkcmVzczogbWludEFNUyxcbiAgICAgICAgcHJvZ3JhbUlkOiBhbXNQcm9ncmFtSUQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByaW9GZWVNaWNyb0xhbXBvcnRzID0gJzAnO1xuICAgICAgY29uc3QgcHJpb3JpdHlGZWU6IEZlZU9wdGlvbnMgPSB7XG4gICAgICAgIGFtb3VudDogcHJpb0ZlZU1pY3JvTGFtcG9ydHMsXG4gICAgICB9O1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVBTVMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVBTVMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgLy8gU2luY2UgcHJpbyBmZWUgaXMgMCwgd2UgYXJlIG5vdCBhZGRpbmcgY29tcHV0ZSB1bml0IHByaWNlIGluc3RydWN0aW9uXG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMF0udHlwZS5zaG91bGQuZXF1YWwoJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzBdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgbWludEFkZHJlc3M6IG1pbnRBTVMsXG4gICAgICAgIGF0YUFkZHJlc3M6ICc4S0xucm9QNmhIa3IxWnNRTDRrNkEzaTJ5aGhudjJrcjJUZWVkeDdhMjZFZycsXG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgcGF5ZXJBZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lQU1TLFxuICAgICAgICBwcm9ncmFtSWQ6ICdBVG9rZW5HUHZiZEdWeHIxYjJodlpic2lxVzV4V0gyNWVmVE5zTEpBOGtuTCcsXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzFdLnR5cGUuc2hvdWxkLmVxdWFsKCdUb2tlblRyYW5zZmVyJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsxXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9BZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lQU1TLFxuICAgICAgICBzb3VyY2VBZGRyZXNzOiAnRXl0SG0zZ1dTbWFUa3VGMWRhdGVwZ0R6eDdnckd1REc3d3M1UUE3dENtVTQnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICdGNHVMZVhpb0Z6M2h3MTNNcG9zdXdhUWJNY1piQ2pxdkVHUFBlUlJCMUJ5ZicsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2Vua2VnUWZlWnlpTndBSmJOYkdLUEZYQ1d1QnZmOVNzNjIzVlE1REEnLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiA5LFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsyXS50eXBlLnNob3VsZC5lcXVhbCgnTWVtbycpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0ucGFyYW1zLm1lbW8uc2hvdWxkLmVxdWFsKG1lbW8pO1xuXG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIHJhd1R4LFxuICAgICAgICB0ZXN0RGF0YS5UT0tFTl9UUkFOU0ZFUl9VTlNJR05FRF9XSVRIX0NSRUFURV9BVEFfQU5EX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0VfV0lUSF9PUFRJT05BTF9QQVJBTVNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSBtdWx0aSB0b2tlbiB0cmFuc2ZlciB0eCB1bnNpZ25lZCB3aXRoIG11bHRpIGNyZWF0ZSBBVEEsIG1lbW8gYW5kIGR1cmFibGUgbm9uY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhY2NvdW50MSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5leHRyYUFjY291bnRzLnBydjEgfSkuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgYWNjb3VudDIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuZXh0cmFBY2NvdW50cy5wcnYyIH0pLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IGF0YUFkZHJlc3MxID0gYXdhaXQgVXRpbHMuZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MobWludFVTREMsIGFjY291bnQxLnB1Yik7XG4gICAgICBjb25zdCBhdGFBZGRyZXNzMiA9IGF3YWl0IFV0aWxzLmdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKG1pbnRVU0RDLCBhY2NvdW50Mi5wdWIpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHsgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLCBhdXRoV2FsbGV0QWRkcmVzczogd2FsbGV0UEsgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogYWNjb3VudDEucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGFjY291bnQyLnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzcyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICBvd25lckFkZHJlc3M6IGFjY291bnQxLnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzczEsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50KHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBhY2NvdW50Mi5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MyLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1sxXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbMl0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbMV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQxLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbMl0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IGFjY291bnQyLnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCg4KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdTZXRQcmlvcml0eUZlZScpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMV0udHlwZS5zaG91bGQuZXF1YWwoJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzFdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgbWludEFkZHJlc3M6IG1pbnRVU0RDLFxuICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzLFxuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHBheWVyQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHByb2dyYW1JZDogJ0FUb2tlbkdQdmJkR1Z4cjFiMmh2WmJzaXFXNXhXSDI1ZWZUTnNMSkE4a25MJyxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0udHlwZS5zaG91bGQuZXF1YWwoJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzJdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgbWludEFkZHJlc3M6IG1pbnRVU0RDLFxuICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzMSxcbiAgICAgICAgb3duZXJBZGRyZXNzOiBhY2NvdW50MS5wdWIsXG4gICAgICAgIHBheWVyQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHByb2dyYW1JZDogJ0FUb2tlbkdQdmJkR1Z4cjFiMmh2WmJzaXFXNXhXSDI1ZWZUTnNMSkE4a25MJyxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0udHlwZS5zaG91bGQuZXF1YWwoJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzNdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgbWludEFkZHJlc3M6IG1pbnRVU0RDLFxuICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzMixcbiAgICAgICAgb3duZXJBZGRyZXNzOiBhY2NvdW50Mi5wdWIsXG4gICAgICAgIHBheWVyQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHByb2dyYW1JZDogJ0FUb2tlbkdQdmJkR1Z4cjFiMmh2WmJzaXFXNXhXSDI1ZWZUTnNMSkE4a25MJyxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCg4KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzRdLnR5cGUuc2hvdWxkLmVxdWFsKCdUb2tlblRyYW5zZmVyJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs0XS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9BZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgc291cmNlQWRkcmVzczogJ0I1ckpqdVZpN0VuNjNpSzZvM2lqS2RKd0FvVGUyZ3dDWW1Kc1ZkSFEyYUtWJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnRjR1TGVYSm9GejNodzEzTXBvc3V3YVFiTWNaYkNqcXZFR1BQZVJSQjFCeWYnLFxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbmtlZ1FmZVp5aU53QUpiTmJHS1BGWENXdUJ2ZjlTczYyM1ZRNURBJyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogOSxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbNV0udHlwZS5zaG91bGQuZXF1YWwoJ1Rva2VuVHJhbnNmZXInKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzVdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZnJvbUFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB0b0FkZHJlc3M6IGFjY291bnQxLnB1YixcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHNvdXJjZUFkZHJlc3M6ICdCNXJKanVWaTdFbjYzaUs2bzNpaktkSndBb1RlMmd3Q1ltSnNWZEhRMmFLVicsXG4gICAgICAgIHRva2VuQWRkcmVzczogJ0Y0dUxlWEpvRnozaHcxM01wb3N1d2FRYk1jWmJDanF2RUdQUGVSUkIxQnlmJyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnVG9rZW5rZWdRZmVaeWlOd0FKYk5iR0tQRlhDV3VCdmY5U3M2MjNWUTVEQScsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDksXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzZdLnR5cGUuc2hvdWxkLmVxdWFsKCdUb2tlblRyYW5zZmVyJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs2XS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9BZGRyZXNzOiBhY2NvdW50Mi5wdWIsXG4gICAgICAgIGFtb3VudDogYW1vdW50LFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBzb3VyY2VBZGRyZXNzOiAnQjVySmp1Vmk3RW42M2lLNm8zaWpLZEp3QW9UZTJnd0NZbUpzVmRIUTJhS1YnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICdGNHVMZVhKb0Z6M2h3MTNNcG9zdXdhUWJNY1piQ2pxdkVHUFBlUlJCMUJ5ZicsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2Vua2VnUWZlWnlpTndBSmJOYkdLUEZYQ1d1QnZmOVNzNjIzVlE1REEnLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiA5LFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs3XS50eXBlLnNob3VsZC5lcXVhbCgnTWVtbycpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbN10ucGFyYW1zLm1lbW8uc2hvdWxkLmVxdWFsKG1lbW8pO1xuXG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX1RPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1dJVEhfTVVMVElfQ1JFQVRFX0FUQV9BTkRfTUVNT19BTkRfRFVSQUJMRV9OT05DRSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSBtdWx0aSB0b2tlbiB0cmFuc2ZlciB0eCB1bnNpZ25lZCB3aXRoIHVuaXF1ZSBjcmVhdGUgQVRBLCBtZW1vIGFuZCBkdXJhYmxlIG5vbmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXRQSyk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IHdhbGxldFBLIH0pO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgdHhCdWlsZGVyLm1lbW8obWVtbyk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzcyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLmNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQoe1xuICAgICAgICBvd25lckFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50KHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBhdGFBZGRyZXNzOiBhdGFBZGRyZXNzLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgdHguaW5wdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4LmlucHV0c1sxXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5pbnB1dHNbMl0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDMpO1xuICAgICAgdHgub3V0cHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdmFsdWU6IGFtb3VudCxcbiAgICAgICAgY29pbjogbmFtZVVTREMsXG4gICAgICB9KTtcbiAgICAgIHR4Lm91dHB1dHNbMV0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIHZhbHVlOiBhbW91bnQsXG4gICAgICAgIGNvaW46IG5hbWVVU0RDLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzWzJdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB2YWx1ZTogYW1vdW50LFxuICAgICAgICBjb2luOiBuYW1lVVNEQyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDYpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMF0udHlwZS5zaG91bGQuZXF1YWwoJ1NldFByaW9yaXR5RmVlJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsxXS50eXBlLnNob3VsZC5lcXVhbCgnQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMV0ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBtaW50QWRkcmVzczogbWludFVTREMsXG4gICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgcGF5ZXJBZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnQVRva2VuR1B2YmRHVnhyMWIyaHZaYnNpcVc1eFdIMjVlZlROc0xKQThrbkwnLFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsyXS50eXBlLnNob3VsZC5lcXVhbCgnVG9rZW5UcmFuc2ZlcicpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbMl0ucGFyYW1zLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBmcm9tQWRkcmVzczogd2FsbGV0UEssXG4gICAgICAgIHRvQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIHNvdXJjZUFkZHJlc3M6ICdCNXJKanVWaTdFbjYzaUs2bzNpaktkSndBb1RlMmd3Q1ltSnNWZEhRMmFLVicsXG4gICAgICAgIHRva2VuQWRkcmVzczogJ0Y0dUxlWEpvRnozaHcxM01wb3N1d2FRYk1jWmJDanF2RUdQUGVSUkIxQnlmJyxcbiAgICAgICAgcHJvZ3JhbUlkOiAnVG9rZW5rZWdRZmVaeWlOd0FKYk5iR0tQRlhDV3VCdmY5U3M2MjNWUTVEQScsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IDksXG4gICAgICB9KTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzNdLnR5cGUuc2hvdWxkLmVxdWFsKCdUb2tlblRyYW5zZmVyJyk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVszXS5wYXJhbXMuc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXRQSyxcbiAgICAgICAgdG9BZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgc291cmNlQWRkcmVzczogJ0I1ckpqdVZpN0VuNjNpSzZvM2lqS2RKd0FvVGUyZ3dDWW1Kc1ZkSFEyYUtWJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnRjR1TGVYSm9GejNodzEzTXBvc3V3YVFiTWNaYkNqcXZFR1BQZVJSQjFCeWYnLFxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbmtlZ1FmZVp5aU53QUpiTmJHS1BGWENXdUJ2ZjlTczYyM1ZRNURBJyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogOSxcbiAgICAgIH0pO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbNF0udHlwZS5zaG91bGQuZXF1YWwoJ1Rva2VuVHJhbnNmZXInKTtcbiAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhWzRdLnBhcmFtcy5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZnJvbUFkZHJlc3M6IHdhbGxldFBLLFxuICAgICAgICB0b0FkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsXG4gICAgICAgIGFtb3VudDogYW1vdW50LFxuICAgICAgICB0b2tlbk5hbWU6IG5hbWVVU0RDLFxuICAgICAgICBzb3VyY2VBZGRyZXNzOiAnQjVySmp1Vmk3RW42M2lLNm8zaWpLZEp3QW9UZTJnd0NZbUpzVmRIUTJhS1YnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICdGNHVMZVhKb0Z6M2h3MTNNcG9zdXdhUWJNY1piQ2pxdkVHUFBlUlJCMUJ5ZicsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2Vua2VnUWZlWnlpTndBSmJOYkdLUEZYQ1d1QnZmOVNzNjIzVlE1REEnLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiA5LFxuICAgICAgfSk7XG4gICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YVs1XS50eXBlLnNob3VsZC5lcXVhbCgnTWVtbycpO1xuICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGFbNV0ucGFyYW1zLm1lbW8uc2hvdWxkLmVxdWFsKG1lbW8pO1xuXG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3REYXRhLk1VTFRJX1RPS0VOX1RSQU5TRkVSX1VOU0lHTkVEX1dJVEhfVU5JUVVFX0NSRUFURV9BVEFfQU5EX01FTU9fQU5EX0RVUkFCTEVfTk9OQ0UpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgaXQoJ2ZvciBpbnZhbGlkIHNlbmRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnNlbmRlcihpbnZhbGlkUHViS2V5KSkudGhyb3dFcnJvcignSW52YWxpZCBvciBtaXNzaW5nIHNlbmRlciwgZ290OiAnICsgaW52YWxpZFB1YktleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZm9yIGludmFsaWQgdG9BZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IGludmFsaWRQdWJLZXksIGFtb3VudCwgdG9rZW5OYW1lOiBuYW1lVVNEQyB9KSkudGhyb3dFcnJvcihcbiAgICAgICAgJ0ludmFsaWQgb3IgbWlzc2luZyBhZGRyZXNzLCBnb3Q6ICcgKyBpbnZhbGlkUHViS2V5XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvciBpbnZhbGlkIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRBbW91bnQgPSAncmFuZG9tc3RyaW5nJztcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT5cbiAgICAgICAgdHhCdWlsZGVyLnNlbmQoe1xuICAgICAgICAgIGFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICAgICAgYW1vdW50OiBpbnZhbGlkQW1vdW50LFxuICAgICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIH0pXG4gICAgICApLnRocm93RXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBhbW91bnQsIGdvdDogJyArIGludmFsaWRBbW91bnQpO1xuXG4gICAgICBjb25zdCBleGNlc3NpdmVBbW91bnQgPSAnMTg0NDY3NDQwNzM3MDk1NTE2MTYnO1xuICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgIHR4QnVpbGRlci5zZW5kKHtcbiAgICAgICAgICBhZGRyZXNzOiBub25jZUFjY291bnQucHViLFxuICAgICAgICAgIGFtb3VudDogZXhjZXNzaXZlQW1vdW50LFxuICAgICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgIH0pXG4gICAgICApLnRocm93RXJyb3IoYGlucHV0IGFtb3VudCAke2V4Y2Vzc2l2ZUFtb3VudH0gZXhjZWVkcyBiaWcgaW50IGxpbWl0IDE4NDQ2NzQ0MDczNzA5NTUxNjE1YCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZm9yIGludmFsaWQgcmVudCBhbW91bnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnZhbGlkQW1vdW50ID0gJ3JhbmRvbXN0cmluZyc7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0b2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudChpbnZhbGlkQW1vdW50KSkudGhyb3dFcnJvcihcbiAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiAnICsgaW52YWxpZEFtb3VudFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbmVnYXRpdmVBbW91bnQgPSAnLTExMSc7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmFzc29jaWF0ZWRUb2tlbkFjY291bnRSZW50KG5lZ2F0aXZlQW1vdW50KSkudGhyb3dFcnJvcihcbiAgICAgICAgJ0ludmFsaWQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCwgZ290OiAnICsgbmVnYXRpdmVBbW91bnRcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnZm9yIGludmFsaWQgb3duZXJBZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PlxuICAgICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgICAgb3duZXJBZGRyZXNzOiBpbnZhbGlkUHViS2V5LFxuICAgICAgICAgIHRva2VuTmFtZTogbmFtZVVTREMsXG4gICAgICAgICAgYXRhQWRkcmVzczogYXRhQWRkcmVzcyxcbiAgICAgICAgfSlcbiAgICAgICkudGhyb3dFcnJvcignSW52YWxpZCBvciBtaXNzaW5nIG93bmVyQWRkcmVzcywgZ290OiAnICsgaW52YWxpZFB1YktleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZm9yIGludmFsaWQgdG9rZW5OYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFRva2VuTmFtZSA9ICd0c29sOnJhbmRvbSc7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0b2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgIHR4QnVpbGRlci5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50KHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICAgICAgdG9rZW5OYW1lOiBpbnZhbGlkVG9rZW5OYW1lLFxuICAgICAgICAgIGF0YUFkZHJlc3M6IGF0YUFkZHJlc3MsXG4gICAgICAgIH0pXG4gICAgICApLnRocm93RXJyb3IoJ0ludmFsaWQgdG9rZW4gbmFtZSwgZ290OiAnICsgaW52YWxpZFRva2VuTmFtZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDcmVhdGUgQVRBIHJlbnQgcGF5ZXIgc2VsZWN0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGZlZVBheWVyQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmZlZVBheWVyQWNjb3VudCkuZ2V0S2V5cygpO1xuXG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGF0YUFkZHJlc3MgPSBhd2FpdCBVdGlscy5nZXRBc3NvY2lhdGVkVG9rZW5BY2NvdW50QWRkcmVzcyhtaW50VVNEQywgb3RoZXJBY2NvdW50LnB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBmZWVQYXllciBhcyBDcmVhdGUtQVRBIHJlbnQgcGF5ZXIgd2hlbiBmZWVQYXllciBpcyBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIHR4QnVpbGRlci5mZWVQYXllcihmZWVQYXllckFjY291bnQucHViKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgYXRhQWRkcmVzcyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBjcmVhdGVBdGEgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhLmZpbmQoKGkpID0+IGkudHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKTtcbiAgICAgIHNob3VsZC5leGlzdChjcmVhdGVBdGEpO1xuICAgICAgY3JlYXRlQXRhLnBhcmFtcy5wYXllckFkZHJlc3Muc2hvdWxkLmVxdWFsKGZlZVBheWVyQWNjb3VudC5wdWIpO1xuICAgICAgY3JlYXRlQXRhLnBhcmFtcy5wYXllckFkZHJlc3Muc2hvdWxkLm5vdC5lcXVhbCh3YWxsZXRQSyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFsbHMgYmFjayB0byBzZW5kZXIgYXMgQ3JlYXRlLUFUQSByZW50IHBheWVyIHdoZW4gZmVlUGF5ZXIgaXMgdW5zZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0UEspO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQsIHRva2VuTmFtZTogbmFtZVVTREMgfSk7XG4gICAgICB0eEJ1aWxkZXIuY3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiBuYW1lVVNEQyxcbiAgICAgICAgYXRhQWRkcmVzcyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBjcmVhdGVBdGEgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhLmZpbmQoKGkpID0+IGkudHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKTtcbiAgICAgIHNob3VsZC5leGlzdChjcmVhdGVBdGEpO1xuICAgICAgY3JlYXRlQXRhLnBhcmFtcy5wYXllckFkZHJlc3Muc2hvdWxkLmVxdWFsKHdhbGxldFBLKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zZmVyIEhvb2sgYWNjb3VudHMnLCAoKSA9PiB7XG4gICAgY29uc3QgdDIyTmFtZSA9IHRlc3REYXRhLnNvbDIwMjJUb2tlblRyYW5zZmVycy5uYW1lO1xuICAgIGNvbnN0IHQyMk1pbnQgPSB0ZXN0RGF0YS5zb2wyMDIyVG9rZW5UcmFuc2ZlcnMubWludDtcbiAgICBjb25zdCB0MjJEZWNpbWFscyA9IDY7XG4gICAgY29uc3QgdHJhbnNmZXJIb29rQWNjb3VudHM6IEV4dHJhQWNjb3VudE1ldGFbXSA9IFtcbiAgICAgIHsgcHVia2V5OiAnOTh3RkY1TXBNak1RYmZERjJNUHpvOExDR1gzN3VuWlIxb2hSQTFtVTlHbUonLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgcHVia2V5OiAnNDhuN1lHRXd3N2ZLTWZKNWdKM3NRQzNyTTZSV0dqcFVzZ2hxVmZYVmtSNUEnLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IHB1YmtleTogJzlzUWhBSDd2VjNSS1RDSzEzVlk0RWlOanMzcUJxMXNyU1l4ZE51ZmRBQVhtJywgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIF07XG5cbiAgICBjb25zdCBidWlsZFRva2VuMjAyMlRyYW5zZmVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgYW1vdW50LFxuICAgICAgICB0b2tlbk5hbWU6IHQyMk5hbWUsXG4gICAgICAgIHRva2VuQWRkcmVzczogdDIyTWludCxcbiAgICAgICAgcHJvZ3JhbUlkOiBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogdDIyRGVjaW1hbHMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgfTtcblxuICAgIGl0KCd0aHJlYWRzIHJlc29sdmVkIHRyYW5zZmVyIGhvb2sgYWNjb3VudHMgaW50byB0aGUgYnVpbHQgVG9rZW5UcmFuc2ZlciBwYXJhbXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBidWlsZFRva2VuMjAyMlRyYW5zZmVyKCk7XG4gICAgICB0eEJ1aWxkZXIudHJhbnNmZXJIb29rQWNjb3VudHModHJhbnNmZXJIb29rQWNjb3VudHMpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdG9rZW5UcmFuc2ZlciA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGEuZmluZCgoaSkgPT4gaS50eXBlID09PSAnVG9rZW5UcmFuc2ZlcicpO1xuICAgICAgc2hvdWxkLmV4aXN0KHRva2VuVHJhbnNmZXIpO1xuICAgICAgdG9rZW5UcmFuc2Zlci5wYXJhbXMudHJhbnNmZXJIb29rQWNjb3VudHMuc2hvdWxkLmRlZXBFcXVhbCh0cmFuc2Zlckhvb2tBY2NvdW50cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb21pdHMgdHJhbnNmZXIgaG9vayBhY2NvdW50cyBhbmQgbWF0Y2hlcyB0aGUgcGxhaW4gdHJhbnNmZXIgd2hlbiBub25lIGFyZSBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB3aXRoSG9va3MgPSBhd2FpdCBidWlsZFRva2VuMjAyMlRyYW5zZmVyKCkudHJhbnNmZXJIb29rQWNjb3VudHModHJhbnNmZXJIb29rQWNjb3VudHMpLmJ1aWxkKCk7XG4gICAgICBjb25zdCB3aXRob3V0SG9va3MgPSBhd2FpdCBidWlsZFRva2VuMjAyMlRyYW5zZmVyKCkuYnVpbGQoKTtcblxuICAgICAgY29uc3QgcGxhaW5UcmFuc2ZlciA9IHdpdGhvdXRIb29rcy50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhLmZpbmQoKGkpID0+IGkudHlwZSA9PT0gJ1Rva2VuVHJhbnNmZXInKTtcbiAgICAgIHNob3VsZC5leGlzdChwbGFpblRyYW5zZmVyKTtcbiAgICAgIHNob3VsZC5lcXVhbChwbGFpblRyYW5zZmVyLnBhcmFtcy50cmFuc2Zlckhvb2tBY2NvdW50cywgdW5kZWZpbmVkKTtcblxuICAgICAgLy8gQXBwZW5kaW5nIHRoZSByZXNvbHZlZCBob29rIGFjY291bnRzIGNoYW5nZXMgdGhlIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24uXG4gICAgICB3aXRoSG9va3MudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQubm90LmVxdWFsKHdpdGhvdXRIb29rcy50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24od2l0aG91dEhvb2tzLnRvQnJvYWRjYXN0Rm9ybWF0KCkpLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Blcm1pc3Npb25sZXNzIHRoYXcgYnVuZGxpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgdDIyTmFtZSA9IHRlc3REYXRhLnNvbDIwMjJUb2tlblRyYW5zZmVycy5uYW1lO1xuICAgIGNvbnN0IHQyMk1pbnQgPSB0ZXN0RGF0YS5zb2wyMDIyVG9rZW5UcmFuc2ZlcnMubWludDtcbiAgICBjb25zdCB0MjJEZWNpbWFscyA9IDY7XG4gICAgLy8gUmVzb2x2ZWQgdGhhdyBwYXJhbXMgKGFzIHByb2R1Y2VkIGJ5IFNvbC5yZXNvbHZlUGVybWlzc2lvbmxlc3NUaGF3KS4gQXJiaXRyYXJ5IGJ1dCB2YWxpZFxuICAgIC8vIGJhc2U1OCBwdWJrZXlzIHVzZWQgcHVyZWx5IGFzIGZpeHR1cmVzIOKAlCB0aGUgb2ZmbGluZSBidWlsZGVyIG5ldmVyIGZldGNoZXMgdGhlbS5cbiAgICBjb25zdCB0aGF3UGFyYW1zID0ge1xuICAgICAgYXV0aG9yaXR5OiB3YWxsZXRQSyxcbiAgICAgIG1pbnQ6IHQyMk1pbnQsXG4gICAgICB0b2tlbkFjY291bnQ6ICc5OHdGRjVNcE1qTVFiZkRGMk1Qem84TENHWDM3dW5aUjFvaFJBMW1VOUdtSicsXG4gICAgICB0b2tlbkFjY291bnRPd25lcjogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgIGdhdGluZ1Byb2dyYW06ICdHYlE4WmlFRnpHR1RlWW9Yd3RadGNveHdQY015VWNtWkRkdU1WTmRVUEtwWCcsXG4gICAgICBmbGFnQWNjb3VudDogJzQ4bjdZR0V3dzdmS01mSjVnSjNzUUMzck02UldHanBVc2docVZmWFZrUjVBJyxcbiAgICAgIG1pbnRDb25maWc6ICc5c1FoQUg3dlYzUktUQ0sxM1ZZNEVpTmpzM3FCcTFzclNZeGROdWZkQUFYbScsXG4gICAgICBleHRyYUFjY291bnRzOiBbeyBwdWJrZXk6IG5vbmNlQWNjb3VudC5wdWIsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfV0sXG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkVG9rZW4yMDIyVHJhbnNmZXJXaXRoQXRhID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHtcbiAgICAgICAgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YixcbiAgICAgICAgYW1vdW50LFxuICAgICAgICB0b2tlbk5hbWU6IHQyMk5hbWUsXG4gICAgICAgIHRva2VuQWRkcmVzczogdDIyTWludCxcbiAgICAgICAgcHJvZ3JhbUlkOiBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogdDIyRGVjaW1hbHMsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50KHtcbiAgICAgICAgb3duZXJBZGRyZXNzOiBvdGhlckFjY291bnQucHViLFxuICAgICAgICB0b2tlbk5hbWU6IHQyMk5hbWUsXG4gICAgICAgIHRva2VuQWRkcmVzczogdDIyTWludCxcbiAgICAgICAgcHJvZ3JhbUlkOiBUT0tFTl8yMDIyX1BST0dSQU1fSUQudG9TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICB9O1xuXG4gICAgaXQoJ2J1bmRsZXMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBvcmRlciBbY3JlYXRlLCB0aGF3LCB0cmFuc2Zlcl0nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBidWlsZFRva2VuMjAyMlRyYW5zZmVyV2l0aEF0YSgpO1xuICAgICAgdHhCdWlsZGVyLnBlcm1pc3Npb25sZXNzVGhhdyh0aGF3UGFyYW1zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR5cGVzID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YS5tYXAoKGkpID0+IGkudHlwZSk7XG4gICAgICB0eXBlcy5zaG91bGQuZGVlcEVxdWFsKFsnQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsICdQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50JywgJ1Rva2VuVHJhbnNmZXInXSk7XG5cbiAgICAgIGNvbnN0IHRoYXcgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhLmZpbmQoKGkpID0+IGkudHlwZSA9PT0gJ1Blcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQnKTtcbiAgICAgIHNob3VsZC5leGlzdCh0aGF3KTtcbiAgICAgIHRoYXcucGFyYW1zLmdhdGluZ1Byb2dyYW0uc2hvdWxkLmVxdWFsKHRoYXdQYXJhbXMuZ2F0aW5nUHJvZ3JhbSk7XG4gICAgICB0aGF3LnBhcmFtcy5taW50Q29uZmlnLnNob3VsZC5lcXVhbCh0aGF3UGFyYW1zLm1pbnRDb25maWcpO1xuICAgICAgdGhhdy5wYXJhbXMuZmxhZ0FjY291bnQuc2hvdWxkLmVxdWFsKHRoYXdQYXJhbXMuZmxhZ0FjY291bnQpO1xuICAgICAgdGhhdy5wYXJhbXMuZXh0cmFBY2NvdW50cy5zaG91bGQuZGVlcEVxdWFsKHRoYXdQYXJhbXMuZXh0cmFBY2NvdW50cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb21pdHMgdGhlIHRoYXcgaW5zdHJ1Y3Rpb24gd2hlbiBwZXJtaXNzaW9ubGVzc1RoYXcgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUb2tlbjIwMjJUcmFuc2ZlcldpdGhBdGEoKS5idWlsZCgpO1xuICAgICAgY29uc3QgdHlwZXMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhLm1hcCgoaSkgPT4gaS50eXBlKTtcbiAgICAgIHR5cGVzLnNob3VsZC5kZWVwRXF1YWwoWydDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50JywgJ1Rva2VuVHJhbnNmZXInXSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGEuZmluZCgoaSkgPT4gaS50eXBlID09PSAnUGVybWlzc2lvbmxlc3NUaGF3SWRlbXBvdGVudCcpLFxuICAgICAgICB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=