@bitgo/sdk-coin-ton 4.1.0 → 4.2.0

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.
@@ -645,7 +645,7 @@ describe('TON:', function () {
645
645
  }),
646
646
  };
647
647
  sandbox.stub(tonweb_1.default, 'HttpProvider').returns(mockProvider);
648
- sandbox.stub(basecoin, 'isMpcV2Keycard').resolves({
648
+ sandbox.stub(basecoin, 'getEddsaSigningMaterial').resolves({
649
649
  version: 'v1',
650
650
  userPrv: JSON.stringify({ dummy: 'userSigningMaterial' }),
651
651
  });
@@ -834,7 +834,7 @@ describe('TON:', function () {
834
834
  sandbox.assert.notCalled(getTSSSignatureSpy);
835
835
  });
836
836
  it('should use MPCv1 path when signing material is MPCv1 format', async function () {
837
- sandbox.stub(basecoin, 'isMpcV2Keycard').resolves({
837
+ sandbox.stub(basecoin, 'getEddsaSigningMaterial').resolves({
838
838
  version: 'v1',
839
839
  userPrv: JSON.stringify({ uShare: {}, bitgoYShare: {} }),
840
840
  });
@@ -864,4 +864,4 @@ describe('TON:', function () {
864
864
  });
865
865
  });
866
866
  });
867
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3Rvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QztBQUM1Qyw0Q0FBbUQ7QUFDbkQsbUNBQWtFO0FBQ2xFLDZDQUErQjtBQUMvQixvREFBNEI7QUFDNUIsMkRBQTZDO0FBQzdDLDhDQUFrRztBQUNsRyxvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLG9EQUE0QjtBQUM1QixvREFBNkM7QUFFN0MsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNmLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDM0IsTUFBTSxjQUFjLEdBQUc7UUFDckI7WUFDRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDL0UsTUFBTSxFQUFFLEVBQUU7U0FDWDtRQUNEO1lBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2xHLE1BQU0sRUFBRSxFQUFFO1NBQ1g7S0FDRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsR0FBRztR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b0JBQ3ZCLEdBQUcsa0JBQWtCO29CQUNyQixRQUFRLEVBQUUsa0JBQWtCO2lCQUM3QixDQUFDO2dCQUVGLE1BQU0sUUFBUTtxQkFDWCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7cUJBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDJFQUEyRSxDQUFDLENBQUM7WUFDekcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEksIGVuY3J5cHQgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUb24sIFRvblBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLCBUdG9uIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy90b24nO1xuaW1wb3J0IHsgRUREU0FNZXRob2RzLCBNUENSZWNvdmVyeU9wdGlvbnMsIE1QQ1R4LCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCBUb253ZWIgZnJvbSAndG9ud2ViJztcbmltcG9ydCB7IE1QU1V0aWwgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG5kZXNjcmliZSgnVE9OOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2Vjb2luO1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0b24nLCBUb24uY3JlYXRlSW5zdGFuY2UpO1xuICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3R0b24nLCBUdG9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGNvbnN0IHR4UHJlYnVpbGRMaXN0ID0gW1xuICAgIHtcbiAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gICAge1xuICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdCA9IFtcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnR4Qm91bmNlYWJsZSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgfSxcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eEJvdW5jZWFibGUsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdHhQYXJhbXNMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudF0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCB0eFBhcmFtc0JvdW5jZWFibGVMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZV0sXG4gICAgfSxcbiAgICB7XG4gICAgICByZWNpcGllbnRzOiBbdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlXSxcbiAgICB9LFxuICBdO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRvbiA9IGJpdGdvLmNvaW4oJ3RvbicpO1xuICAgIGNvbnN0IHR0b24gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICB0b24uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnR3JhbScpO1xuICAgIHRvbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOSk7XG5cbiAgICB0dG9uLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0dG9uJyk7XG4gICAgdHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHR0b24uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgR3JhbScpO1xuICAgIHR0b24uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG4gICAgdHhQYXJhbXNMaXN0LmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHR4UGFyYW1zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gdHhQcmVidWlsZExpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHhQYXJhbXNCb3VuY2VhYmxlID0gdHhQYXJhbXNCb3VuY2VhYmxlTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkQm91bmNlYWJsZSA9IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcblxuICAgICAgICBjb25zdCBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc0JvdW5jZWFibGUsXG4gICAgICAgICAgdHhQcmVidWlsZDogdHhQcmVidWlsZEJvdW5jZWFibGUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIG51bWJlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAyMDAwMDAwMDtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIHN0cmluZ3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnMjAwMDAwMDAnO1xuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2hlbiByZWNpcGllbnRzIGFtb3VudHMgYXJlIG51bWJlciBhbmQgYW1vdW50IGlzIHNhbWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZXNvbHZlZFdpdGgodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50cyBhcmUgc3RyaW5nIGFuZCBhbW91bnQgaXMgc2FtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlc29sdmVkV2l0aCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50IGFkZHJlc3MgYXJlIG5vbiBib3VuY2VhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eFBhcmFtcykpO1xuICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9IG5ldyBUb253ZWIuQWRkcmVzcyhcbiAgICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzc1xuICAgICAgICApLnRvU3RyaW5nKHRydWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCByZWNpcGllbnQgaGF2aW5nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbkZvck1lbW9JZC5yZWNpcGllbnRdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb25Gb3JNZW1vSWQudHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICB9IGFzIGFueSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6ICd0dXlPa3lGVU12X25lVl9GZU5CSDI0TmQ0Y01MMmpVZ0RQNHpqR2t1T0ZJPScsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIG5vbi1ib3VuY2VhYmxlIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdG9BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiAndHV5T2t5RlVNdl9uZVZfRmVOQkgyNE5kNGNNTDJqVWdEUDR6akdrdU9GST0nLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgICAgICB3aXRoZHJhd0Ftb3VudDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaW5nbGUgbm9taW5hdG9yIHdpdGhkcmF3IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4SWQsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiAnOTMyMTc4MTEyMzMwMDAwJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgbm9uLWJvdW5jZWFibGUgc2luZ2xlIG5vbWluYXRvciB3aXRoZHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gKGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4LCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0b0FkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgICAgZnJvbUFkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHhJZCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZS5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlLmFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiAnVU5LTk9XTicgfSxcbiAgICAgICAgd2l0aGRyYXdBbW91bnQ6ICc5MzIxNzgxMTIzMzAwMDAnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAncmFuZG9tU3RyaW5nJyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgVHJhbnNhY3Rpb25zOiAnLCAoKSA9PiB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNMaXN0ID0gW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlTGlzdCA9IFtcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdFUUNTQmpSM2ZVT0w5OFdUdzJGX0lUNEJyY3FqWkpXVkxXVVN6NVdRRHBhTDlKcGwnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBYkp1Zy1rLXR1ZldNakVDMVJLU00waWlKVERVY1lrQzd6V0FOSHJrVDU1Rm9sJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMjM0MDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICBdO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGVMaXN0ID0gW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQ1NCalIzZlVPTDk4V1R3MkZfSVQ0QnJjcWpaSldWTFdVU3o1V1FEcGFMOU1lZycsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdVUUFiSnVnLWstdHVmV01qRUMxUktTTTBpaUpURFVjWWtDN3pXQU5IcmtUNTVBZmcnLFxuICAgICAgICAgIGFtb3VudDogJzEyMzQwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYd3RHJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ0VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWHd0RycsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uT3V0cHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnVVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYMWFEJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWDFhRCcsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIHRyYW5zYWN0aW9uc0xpc3QuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlID0gdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUgPSB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UgPSB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlID0gdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcblxuICAgICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICBpbnB1dHM6IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2UsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBub24tYm91bmNlYWJsZSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHRvQWRkcmVzc0JvdW5jZWFibGU6IGZhbHNlLFxuICAgICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIH0gYXMgVG9uUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIGlucHV0czogdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdHViID0gc2lub24uc3R1YihUb24ucHJvdG90eXBlLCAnZXhwbGFpblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4OiB0cmFuc2FjdGlvbiB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGxldCBrZXljaGFpbnM7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbW1vbktleWNoYWluID1cbiAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJztcbiAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTU5NDk4Njg0NjgnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcImNaZDVpN0w0Unh0d3JBTFcycks3VUE9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCI1emdvSDFCZDNGdz1cIixcImN0XCI6XCI5dlZsblhGUnRyTTlGVkVvK2QyY2hiR0hsTTlsRlplbXVlQnVBczNCSWtQbzMzRm83anp3d05LL2tJV2tFeWcrTm1FQmQ1SWFxQVMxNTdudnZ2d3p6c21NV2xRZFV6OXFibVhOdjNwZzk4N2NYRlIwOGV4Uys0dWh3UDFZTk9qSlRSdlJOY085WnFIYjQ2ZDRmbXlKL3lDOS9zdXNDZ2U3ci9Fc2JhTjVDM2FmdjFkenlidXE5MTJGd2FRRWxaTFlZcDVCSUN1ZEZPTVo5azBVRE1mS00vUE1Ea0g3V2V4b0dIcjlHS3EvYmdDSDJCMzlUWlp5SEtVNlV5NDdsWGVwMnM2aDBEck13SE9ybm1pTDNEWmpPajg4WW52cGhsenh1bzRlT2xEMlVIaWEyK252SWFJU1lzMjlQcjBEQXZSRXV0Y2h2Y0JwRXhqMWtXV1B2N2hRWXJ2OEYwTkFkYXRzYldsM3creEt5ZmlNS28xVVNscnd5SnZpeXBHdFF0WE9KeXcwWFBOMHJ2MitMNWxXOEJianB6SGZZWU4xM2ZKVGVkbEdURmhoa3pWdGJiUEFLRTAya3g3ekNKY2pZYWlleGRTVHNyRExTY1lOVDkvSmhkdDI3S3Bzb29laHdWb2hMZlNLejR2YkZmUnUyTVBadzMvK2MvaGZpSk5ndHo2ZXNXYm54R3JjRThVMkl3UFlDYUsrR2hrNERjcVdOSW5pNTlSSTVCNWtBc1FPVG9JSTQwcVBONTEwdVRneEJTUE83cTdNSGdreGRkNENxQnErb2pyOWowUDdvYW84RTVZK0NCREpyb2pEb0NoMW9DQ0RXOXZvMmRYbFZjRDhTSWJ3N1UvOUFmdkViQTR4eUUvNW1kMU03Q0l3TG5XczJZbnYwWXRhS29xaGRTOXg2Rm1IbE1EaE4vREtIaW5yd21vd3RyVFQ4MmZPa3BPNWc5c2FTbWdVN1F5M2dMdDh0K1Z3ZEV5ZUZlUVVLUlN5Y2k4cWdxWFFhWklnNCthWGdhU09ubENGTXRtQjhla1l4RWhUWTV1elJmck5nUzRzMVFlcUZCcE50VUYrWWRpMjk3cGJWWG5Kb1hBTitTVldkODBHQ3greUkyZHBWQzg5azNyT1dLOVdleXFsbnp1TEpXcDJSSU9COWNkVzhHRnYvZk4rUUFKcFllVnhPRTQrblpEc0tuc2o4bktjZzl0NERseDFHNmdMTTEvVnE5WXhOTGJ1enVSQzBhc1VZdmRNbm9NdnN6bXBtKytUeG5kWWlzZ05Zc2NwWlNvejd3dmNhekpORVBmaFBWakVrZDZ0VVV1TjRHTTM1SDBEbUtDVVFOVCthNkI2aG1IbFRadmp4aXlHQWc1Ylk1OWhkanZKKzIyUWR1YXpsRUVDNkxJM0hyQTd1SzBUcHBsV3pTMXRDSUZ2VE1VaGo2NURFWm1OSjIrWlk5YlE0dnNNZitEUlIzT09HNHQrRE1sTmZqT2Qzek52M1FvWTk1QmpmV3ByeUZ3UHpEcTdiQ1A2N0pEc29qN2oyVFk1RlJTclJrRDc3SDBFd2x1eDJjV2ZqUlR3Y01IY2RReHh1VjBPUDBhTmpHRGp5YkZOXCJ9JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTYxMzdkNDQwNGInLFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgICAnMTliZGZlMmE0YjQ5OGEwNTUxMTM4MTIzNWE4ODkyZDU0MjY3ODA3YzRhM2Y2NTRlMzEwYjkzOGI4YjQyNGZmNGFkZWRiZTkyZjRjMTQ2ZGU2NDFjNjc1MDhhOTYxMzI0Yzg1MDRjZGY4ZTBjMGFjYmI2OGQ2MTA0Y2NjY2Q3ODEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwidmkwZFBlZi9SeDdrRy9wUnlTUWk2UT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjllZmhRc2lFdlZzPVwiLFwiY3RcIjpcIkd3NmF0dmY2Z3hLenNqdGwzeHNlaXBPM3JBeHAxbUF6N1l1MWloRnNpNS9sZjJ2TVplZ0FwZ1p4K3B5SUxGUzlLS0xIYk5GM1U2V2dTWWRycjJ0NHZ6ZExzWGtIMVdJeGZIUytjZDJDNU41OXlBRFpEblBKQlQ2cHYvSVJ2YVllbFAwQ2szbklZUTJoU01tOG9wK1ZPV0MvU3pIZWg3c2xZRHF3RUhUR2FuMFdpZ2Z2azF5UmQ3Q0NKVGFFQW9tbmMvNGVGaTJOWTNYM2d0LzNvcHk5SUFna25ud1VGb2huOTZFV3BFUTBGNnBiekgvWjhWRjZnRitEVWNyckJ5QXhFeFVQbkhRWmlGazNZSFUvdlZWNEZ4QlUvbVZBRTh4QnNCbjV1bDVlNVNVTVBmYzdUQnVKV3Y0QkJ5VE5nOXhEU2hGLzkxWXgybmJmVW01ZDlRbU04bHBLZ3p6UXZjSzhQT0FQazg3Z1JDdUtuc0doNXZOUzBVcHBrSGMrb2NmelJRbEdBNmp6ZTdReXlRTzByTWo1THk4a1dqd2sydklTdktZSFlTMU5SN1ZVNTQ5VUlYbzdOWGphdHVuS1NjMytJcmVvUlVISXNoaWFMZzZobCtweENDdWMwcVE0M1YwbWRJZkNqVE44Z2tHV0xOazhSN3RBR1B6OWp5YXBRUGNQRUdIZ0V6MEFUSWk2eU1OV0NzaWJTMmVMaUUxdVZFSk9Ob000bGs2RlBsM1EyQ0hiVzJNZUVicWpZOGhiYXcxOG1OYjJ4U0JIL0Z3cGlpYWwrVHZpMmltcWduQ080WnBPOWJsbEtmdFpQY1F5MHN0TitlR0JsYjV1ZnlmbEtrRFNpQ2hIWXJvR2pFcG1pRmljZGRlNDhjSnN6RjUydUtObmYxcTY3ZkE5L1MyRkFIUWFiM0VYb2p4SDJHYmsra2tWMmgvVFlLRkZaU1dDM3ZpNGU4bU8rdmpNVWNSMEFkc2dQRnlFSXowU0NHdWJhM0NuVExOZEV1WndzYXVBZUhreDJ2VVRuUmdKUFZnTmVldVhtc1ZHNzZTeTJnZ0pIdWFsczBIajhVMlhkYTBxTzFSdUZmb0NXZnNzOXduNkhHUndQUGtoU0IvOG9OZ3VBcW1SVkdLa2Q4Wnd0M0l2clRkOWZrMC9yRkZESktHejdXeU5Ia1lnVW1OaUdjSXREMTJ2MGp4N0ZaNTJFSnpsM0F2MVJ5SlVRSzE4KzhFWVBoM1NHaVU5ZHQ3VlgwYUYwdW82Sm91S2hPZWxkVXZNUCtBdWdRejhmVWNsd1RRc2Jib1ZnMjdZeG8wRHlBVFZ3VGhXNWE1NlI2UWY1WmlRSmx1RnV6czV5OThycTBTNXEwNDZsRTZvM3ZWbUpwRWR3amVTQ0pvRVQ1Q0w0blRna1h5V3ZobTRlQjh1L2U2NmwzbzBxYmFTeDhxOVlZbVQ5RXBSY2w1VFA0VGhMQktFVFlkelZ2ZzRleGpRZmVrdE1hdGs1RXlVcEVJaFpQWGg1dlhwSlplc2RmTzlMSjh6VGFIQnNCakRQVTdjZE5nUU1iZWJwYXRhUmk4QTBlbDIvSUpYbCtFK29sZ0F6NXpDNGkyTzFRPT1cIn0nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2NDI0YzM1M2VhZjc4ZDAwMDc2NmU5NTEwYjEyNWZiYScsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICB2ZXJpZmllZFZzc1Byb29mOiB0cnVlLFxuICAgICAgICAgIGlzQml0R286IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSB3ZWxsIGZvcm1hdHRlZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnd3JvbmdhZGRyZXNzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsaWRhdGluZyBhIG5vbi1ib3VuY2VhYmxlIGFkZHJlc3MgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUEwaTgtQ2RHbkZfRGhVSEhmOTJSMU9OSDZzSUE5dkxaX1dMY0NJaGZCQlgxYUQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYWRkcmVzc2VzIHdpdGggbWVtb0lkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gJ0VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRkw3bj9tZW1vSWQ9MTIzJztcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaT9tZW1vSWQ9MTIzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MxKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzMikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaXNXYWxsZXRBZGRyZXNzIHdpdGggdmFsaWQgYWRkcmVzcyBmb3IgaW5kZXggNCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJztcbiAgICAgIGNvbnN0IGluZGV4ID0gNDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogbmV3QWRkcmVzcywgaW5kZXgsIGtleWNoYWlucyB9O1xuICAgICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzYW5kIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbmV3QWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24/bWVtb0lkPTQnO1xuICAgICAgY29uc3QgaW5kZXggPSA0O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiBuZXdBZGRyZXNzLCBpbmRleCwga2V5Y2hhaW5zIH07XG4gICAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzIGZvciBpbmRleCA1IGFuZCBhZGRyZXNzIGlzIGZvciBhIGRpZmZlcmVudCBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzc0ZvckluZGV4NSA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSA1O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiB3cm9uZ0FkZHJlc3NGb3JJbmRleDUsIGluZGV4LCBrZXljaGFpbnMgfTtcbiAgICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGlzV2FsbGV0QWRkcmVzcyB3aGVuIGtleWNoYWlucyBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaXNXYWxsZXRBZGRyZXNzIHdoZW4gbmV3IGFkZHJlc3MgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICdiYWRBZGRyZXNzJztcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogd3JvbmdBZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyksIHtcbiAgICAgICAgbWVzc2FnZTogYGludmFsaWQgYWRkcmVzczogJHt3cm9uZ0FkZHJlc3N9YCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXRpbCBjbGFzcyAnLCAoKSA9PiB7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuICAgIGxldCBkZXJpdmVkUHVibGljS2V5O1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb21tb25LZXljaGFpbiA9XG4gICAgICAgICcxOWJkZmUyYTRiNDk4YTA1NTExMzgxMjM1YTg4OTJkNTQyNjc4MDdjNGEzZjY1NGUzMTBiOTM4YjhiNDI0ZmY0YWRlZGJlOTJmNGMxNDZkZTY0MWM2NzUwOGE5NjEzMjRjODUwNGNkZjhlMGMwYWNiYjY4ZDYxMDRjY2NjZDc4MSc7XG4gICAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgICAgZGVyaXZlZFB1YmxpY0tleSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCAnbS8nICsgMCkuc2xpY2UoMCwgNjQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3NGcm9tUHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgYm91bmNlYWJsZSBhZGRyZXNzIGJ5IGRlZmF1bHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5KSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCB0cnVlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgbm9uLWJvdW5jZWFibGUgYWRkcmVzcyB3aGVuIHJlcXVlc3RlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKGF3YWl0IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGRlcml2ZWRQdWJsaWNLZXksIGZhbHNlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdVUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmFxbjgnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgcmF3IGFkZHJlc3Mgd2hlbiByZXF1ZXN0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCBmYWxzZSwgZmFsc2UpKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgJzA6ZDU3YjI1MDkzYjFkYzA5ZDkxOTYyZWQxMzQ5N2U1NzFiZmI3M2JiOTM5YzNmMGU1ZWQwODU4NWEzYmU5ZWY2YSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGdldCB2YWxpZCB2ZXN0aW5nIGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlc3RpbmdQYXJhbXMgPSB7XG4gICAgICAgICAgc3ViV2FsbGV0SWQ6IDY5ODk4MzE5MSxcbiAgICAgICAgICBwdWJsaWNLZXlIZXg6ICc3MTAxMzM5NDg2Mjk5NWNmYjUyN2RlYTljYWRjYzg0ZDY2ZDExOTdkMmE0NDU0NTc5YjkzYTA4MjIzZTRiMzA5JyxcbiAgICAgICAgICB2ZXN0aW5nU3RhcnRUaW1lOiAxNzYwOTk5MTY0LFxuICAgICAgICAgIHZlc3RpbmdUb3RhbER1cmF0aW9uOiA2MCAqIDYwICogMjQgKiAzMCxcbiAgICAgICAgICB1bmxvY2tQZXJpb2Q6IDYwICogNjAgKiAyNCxcbiAgICAgICAgICBjbGlmZkR1cmF0aW9uOiA2MCAqIDYwLFxuICAgICAgICAgIHZlc3RpbmdUb3RhbEFtb3VudDogQmlnSW50KCc0MDAwMDAwMDAnKSxcbiAgICAgICAgICB2ZXN0aW5nU2VuZGVyQWRkcmVzczogJzBRRE9FeXpDNktYaVZoMlJjbzJiYXBIOTZWbjZsYjlZV3hna1RWV3RxLTlDWEZ0cCcsXG4gICAgICAgICAgb3duZXJBZGRyZXNzOiAnMFFEQnJPZ2pRVGhiTjdlV0JIRXJSaHJKUUgzQXBlY0dEdHUzSzExTHVqam14NDlaJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdmVzdGluZ0NvbnRyYWN0QWRkcmVzcyA9IGF3YWl0IHV0aWxzLmdldFZlc3RpbmdDb250cmFjdEFkZHJlc3ModmVzdGluZ1BhcmFtcyk7XG4gICAgICAgIHZlc3RpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCdFUUFqbWdNYndVM1dWS19wbjJnajFYQkdfTk12cmtvVDRlYXJ2c19DOVE2ZnMtU0UnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhZGRyZXNzIGFzIHBlciBib3VuY2VhYmxlIGZsYWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknLCBmYWxzZSksXG4gICAgICAgICAgJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaSdcbiAgICAgICAgKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHV0aWxzLmdldEFkZHJlc3MoJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaScsIHRydWUpLFxuICAgICAgICAgICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nXG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nLCB0cnVlKSxcbiAgICAgICAgICAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJ1xuICAgICAgICApO1xuICAgICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgICAgdXRpbHMuZ2V0QWRkcmVzcygnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJywgZmFsc2UpLFxuICAgICAgICAgICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYmxvY2sgaGFzaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnTVB1T3ZIZHUveit0Mmw4MllwWnRpSlFrOCtGVkttV3VLeGQ2dWJuMDlmST0nKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoJ01QdU92SGR1L3ordDJsODJZcFp0aUpRazgrRlZLbVd1S3hkJyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYlZLQll4RHR2cGs9JyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCczc3lreDZSdWp5N1V0QndIUS9YNWtMZ3ZLRTBTS0xBK0FCaUNLaTdzWDhvPScpLCB0cnVlKTsgLy8gTm8gdXJsIGZyaWVuZGx5IHR4aWRcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnM3N5a3g2UnVqeTdVdEJ3SFFfWDVrTGd2S0UwU0tMQS1BQmlDS2k3c1g4bz0nKSwgdHJ1ZSk7IC8vIFVybCBmcmllbmRseSB0eGlkXG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYj0nKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCd3bFRkRE9BWHdKcDhFU1JmUUFFSlFJbjBUY2lfUzVvTGJWS0JZeER0YWZkc2FzZGFkc2Z2cGs9JyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHV0aWxzLmdldE1lc3NhZ2VIYXNoRnJvbURhdGEoXG4gICAgICAgICd0ZTZjY2tFQ0NnRUFBa29BQTdWMms0Vncxbmh4cjdYY0NCaldjRkZIS3FHd0NnbFBTUnVZQWtXaldpVFZBSUFBQVBiTGd2YTBHN3l0S3cveGVFOWEzRkhLMlJNOGZnT3BHdlRwUVJzZWVNZXIzZWZSS3NpUUFBRHhQaG5hUUZaV1lybFFBRFJxYkNVSUFRSURBZ0hnQkFVQWduSUFaMFVJd21rbmtNYVc3UWJvVGNxNDhGZloxTlQ1b01VajJWUE9CcjN6UG94cmlhYjRTZlY2NWk2SGQxSjJzRnN1VGNJV1VvYmNLWE1jSXlzK0pXa25BaE1Nd1N2V0JobVR6d1JBQ0FrQjRZZ0EwbkN1R3M4T05mYTdnUU1hemdvbzVWUTJBVUVwNlNOekFFaTBhMFNhb0JBSEhnblBKQlFRSi9tZW9Dd3pLNS9QYWpCU3h1SksyR2t2YTdObWxBTE5EczJJTUVXaTRaUmZJVjRWZUpwS0JoemhLak5sRmp1ejYwZythZVQ1Y05pNENVMU5HTHNyZXkvNEFBQUFHQUFjQmdFQjN3Y0FhR0lBSzJjWWRZQ3R4dEJhV0o5aGk3TitIVnplTXNQUXhMSFNxWW43YmZwT2NSeWgzTlpRQUFBQUFBQUFBQUFBQUFBQUFBQUFzV2dBMG5DdUdzOE9OZmE3Z1FNYXpnb281VlEyQVVFcDZTTnpBRWkwYTBTYW9CRUFGYk9NT3NCVzQyZ3RMRSt3eGRtL0RxNXZHV0hvWWxqcFZNVDl0djBuT0k1UTdtc29BQVlVV0dBQUFCN1pjRjdXaE1yTVZ5cEFBSjFCbllNVGlBQUFBQUFBQUFBQUVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBRy9KaDZFZ1RCUllRQUFBQUFBQUFnQUFBQUFBQTRFNTJBUC9lQVluVmhKa29JSTRZVXJocExmcERGdDZtUktpa3RiRm5xcytRRkFXREFBYWNRMD1cXFxcJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChpZCwgJ1RzVmdOS1QwNWNkZTRRNTRzQytSRkM3blRvVHJIazlwcEdnRTVNMGpYdEU9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIGEgY2VsbCB0byBnZXQgdGhlIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhMSA9ICd0ZTZjY2tFQkFRRUFKQUFBUTRBYUZVVGdVUS9rMmkrRGRBb29pYjB3TlZSRVpRMnorOFI5V1F2dkZOcFVKQkFSeUFnSyc7XG4gICAgICBjb25zdCByYXdBZGRyZXNzMSA9ICcwOmQwYWEyNzAyODg3ZjI2ZDE3YzFiYTA1MTQ0NGRlOTgxYWFhMjIzMjg2ZDlmZGUyM2VhYzg1Zjc4YTZkMmExMjAnO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmdldFJhd1dhbGxldEFkZHJlc3NGcm9tQ2VsbChkYXRhMSksIHJhd0FkZHJlc3MxKTtcblxuICAgICAgY29uc3QgZGF0YTIgPSAndGU2Y2NrRUJBUUVBSkFBQVE1Lzc1dzAzNHFQOVQwWlhZM211TTVvdXZGbE5vTlBreTJZVXMrSGN4ZDhvdGpEa0lPUHEnO1xuICAgICAgY29uc3QgcmF3QWRkcmVzczIgPSAnLTE6ZGYzODY5YmYxNTFmZWE3YTMyYmIxYmNkNzE5Y2QxNzVlMmNhNmQwNjlmMjY1YjMwYTU5ZjBlZTYyZWY5NDViMSc7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuZ2V0UmF3V2FsbGV0QWRkcmVzc0Zyb21DZWxsKGRhdGEyKSwgcmF3QWRkcmVzczIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QWRkcmVzc0JvYycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBCT0MgZm9yIGEgZnJpZW5kbHkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmdldEFkZHJlc3NCb2ModGVzdERhdGEuZ2V0TWVtYmVyU3RhY2tGaXh0dXJlLmZyaWVuZGx5QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgQk9DIGZvciBhIHJhdyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0JvYyh0ZXN0RGF0YS5nZXRNZW1iZXJTdGFja0ZpeHR1cmUucmF3QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9uIHJlY292ZXIgLSBOb24tQml0R28gYW5kIFVuc2lnbmVkIFN3ZWVwIFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTsgLy8gQ3JlYXRlIGEgbmV3IHNhbmRib3ggZm9yIGVhY2ggdGVzdFxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpOyAvLyBSZXN0b3JlIGFsbCBzdHVicyBhZnRlciBlYWNoIHRlc3RcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJlY292ZXIgZnVuZHMgZm9yIG5vbi1CaXRHbyByZWNvdmVyeScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhZTFiMjgxOGRiZWI1MmE4MjE1ZmQ1NmY1YTVmMmE5Zjk0YzA3OWNlODllNGRjM2IxY2U2ZWQ2ZTg0Y2U3MTg1NycsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdkdW1teVBhc3NwaHJhc2UnLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciBub24tQml0R28gcmVjb3ZlcnlcbiAgICAgIGNvbnN0IG1vY2tSZXN1bHQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgdGhlIHJlY292ZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBtb2NrZWQgcmVzdWx0XG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgc2FuZGJveC5zdHViKGJhc2Vjb2luLCAncmVjb3ZlcicpLnJlc29sdmVzKG1vY2tSZXN1bHQpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PSdcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHJlc3VsdC5jb2luLnNob3VsZC5lcXVhbCgndHRvbicpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7IC8vIFJlc3RvcmUgdGhlIHN0dWJiZWQgbWV0aG9kXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSByZWNvdmVyIGZ1bmRzIHVzaW5nIHNlbmRlckpldHRvbkFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJ2UzMWIxNTgwNDAwZGQ0Zjk2ZThjNjI4MWNmYjgzZTI4YWEyNWZjZjhmYjgzMTk5NmE0MDE3NmEzZTMwODc4YzgwZjM2NmZmNjQ2MzU2N2RiZWI3YWE3ZmFlZWI5ZjBmNmQxZmMwYTA5MWVjOTkxOGU4MWFkMmMzNGMzNDVmNGQwJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICd7XCJpdlwiOlwiLzlDYTE4MG9td0VZS2lNZ1VKOTBKUT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImlwUEZxZzZxSEhZPVwiLFwiY3RcIjpcImVGNlpzdHZxb2JMV0IvVWZqcG1zT2N6NStiZ3ZrTWhxK1poK2Y2VERJYSsrSmtQWVJxNmhyMkxoYmlkQkJDTllIQ2dhaGkzbmQvRmRzRkxRMVVrYU45dDQwbUhiVWRsU1RBNDJUaEg1Rkk5VW0xYUFDbTk2MUV1NWIwTXA3bzZVM3p1VmxhRmF5NlQrL25VV2xPS2p2Ky81TVl3ZnhBL0V6TWQ2eURpZTdxQUlyeUxDUEVJdlJ1dXNIdXB6Y0pXZk4yV0dreHc0RWhHc1NRdnM2MitQQk9DSlVlT0NUaHYySHBzc0pWOWdiNm1qNGxZVlRxdEVheTdHNlZGTmIrVDZPSURVOUhOcmR4Vis1RDF6elY1c0hOV3FEZ2hGMDN3OWFkd3hnVENQU2VaeXdaUERnQnJNL05xSEl0KzhDUGQ4NHdnZXk2MU16NThicjA4emwyaWtrc0RGNVBCOERKekVlbnM2QWJZMGdvc3F6QVBUdU9teTdJUzl2UDlsZkNTYUhEb1M2NmhEL0kweWgxYzZ0aDRnUTFkeml3eCtobkJLTmdxcGVrSno2UDBpc25CM3VyaFpJbnBjMFJ6S2g2UjJqcngraEtOci8yZG9rM2RJd2diWFdHcTdOQW0xbVNSRUVzL0NoVlZlVU1tZVU5VUZtd2hPVGJSSzhDTFlIcUFxeWRSTENleE5tV2hUT1BLeTNXcVM4eUc2V2tIcVNHYjlGR0x5QlJjbVFGSUJwaWhWOFhsNFcyZEI2QVg3SHNJMEYyZFlBQlgwZHJMaXVqMk43bU5yYVJHenhzNWpUMGx6d2pYbXk1Z215YXIyM0RxYTJlQlZPeUdkSzNETDhqWXZnWDBtSjU4L3BLa29ncnh6TXJQa0pvMmErZ1A0T1I3Y0RjTDZUeHJjd25WaVlPT0dQOU9hUVpmY0tLYUFobUpaSkd3enlXemp2eUVJTGtDa3NFU3V5K2M1M3RkTEFrdTUxajJLaVYzMlJnMHRETzNVTmp6ZTBxVGozdCtZZm1UTjFHdWlOanhGeDhkTmJYMnl4ell4QitNemVzdU5aQU11bndWSHJxSnBBaW96UnFwRTc5UjdLUkx3N3FoQmhtNVVlejYwRkJ0bUFmMGtRc0dkaUlsRXdDeVRjQll5QURsWkUrb2pEOCt4MnVpSkJCSXpkMHM3bjlaWTNhQ1l1VFZFWUdmSTlFTUdzOVd6WGNHZVR1Mnh3Mk91YlZIWWt2YUJic3dsckppaElxUkgrY2UvOSt3RGVkY2pic2JvMk1PRHNDSjNzSzlLTDZKak1XUHZoU3dSNmNNYnpEaldyRm1SeXVla21mU1RIdWhRRWRCQUsxMU40My9ab1lZREJNd0J3eGpNd3dBNGhMdUJxamVoWVEyTjBONG82ZnBiR1NBMStnMElKcWtRdmgycW44dGVZU2o2N20xdkdsRUp1ODUyVWpKWjR0ZHQ5clNqUTVUYzIzWUsrWEQya0tyWGJCN3dwcnJhYTlQUWpucnJJVDI1eVgrbDVnN1cwRWNHVGxBY3Y1LzVGQzZmNis3UjhLNVdsTEdycDNZTS8rNTcwZ0JTMnFiSWhsMkp6ZndnVHFqZnloNVpcIn0nLFxuICAgICAgICBiYWNrdXBLZXk6XG4gICAgICAgICAgJ3tcIml2XCI6XCJOWTY1Zm1lMnNNZVlkdTc3U1cvYUx3PT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiMVNFcm1vZm1WN3M9XCIsXCJjdFwiOlwiMjh6UUc3eEEyekZ6QUZ5TkpRZm5JUHZvdTEyUndWUHUzanV6bzJjSURhcmV5Zk1rSVhwMVFEYm82bVNCZnpsSmZPTGdZQW4waVFIOHVDZ25tWUNONENiSzJJZk91a01tUUhHYTRsSE1HVVhyTDFybk5Pc1Vaa2g4WU1jTU12cjdxb0NSamFLTFF2UlVXZXFHdDEvVENvUk9vSHdSODhjdFZoRUt3a2hwUW9JWTBUQmVMZHZsdUdWQjdwRkFUdEVLZ29seVFhaXpaOFlPRnZqUW45QUdoVmxPclJyalJ3ekhYcWl1N3lXOGd1TDZmMEI3WmN6dkZnTGRDVEZWTml5UVFkcjZGbzFNaTRHUy93UktiV2FrRXg3TGt0bDNrdmE4OEJYQVJlOCt1bmRUWjBIMk1ibXpNU3I1ekJZcGZoVlhUTy9heHR0a3RMMkFXcU15OGxSODVZN3RWcDMwN1ZVQThYTlkzbmVUYlR4dVNxbSt4cmxCL1IwbkdGRXZSZmlrR3NrNEtLSE9RNkhGbmVOUmRoai9rNmR4RTJWeUg5SXdRNmorTHhqbXMrcGcxeWI1NmlCbkdXTTFzVTBiZEthSkZUUlpHZGlGLy9sUWFLVVZQY0gyUmVOSnNSSmFVOGdvNWcxSEJ1T0hlTXFkbmxCN3VLMk1RS05QQ1JiM3kwWkZReDh5Z2lkT2FBRjZhaUpwejNMZXduWGhzdEQxeTlsWjB5WTlxWEltQjRsRkNyTXJtQm5IUGpFeW16bXJLK3BjaGQ0ZEJKSHRKaXF3bmd4cXBMNmwrYWE2OXhHZXlXRHNWbU1rbFpWUHdkUzVsKzVTVnlnUUdGNU0xczFJN1JmYlRXYjdXbEhGRkN2MEMxSi90cEtUM0J6aUdFZlA1VmowYXFlcWljZ21UUkZ3dmhSMUhpTm1HdkJBTkhNL1B2U3Y1K2N5Umo4RzdFSG1UZXVIZWdoTzJoOVp3b1piaWhuU215Yi9uY1NNOU1neHJTUjRYejdHMzNobmJ1amZIVjRJcEJHL3ZXVHBKVUtJMTFMZ3dyNzFVMmNWQ245V0ErVFk5Q1hzR2tmZU9RYmJYbmdvUHQ0cE9oaWtKS1FZZzlyT3ZnYVIraFpBT1NJdGs2cFdYb3pBREQ4c1NmczdSNituL3dsa0V2dVBJMWNmY2ltYkhMUTZvSDlrVGtEVS9MYk96bXRERGQ4TVlaVWJxdnB5RVM3YkZ1am13NnRjMVpJQkxEc1NXRDJyNHNpdjBLUGVWcjVXdW9KU1l3NlFSZHVBcnlPMU5EdzRTazFhbHlwZ09YeEphcGNYZ3F3aTF2OUhkUnpHMUEwSVVMRFp0eUVjSGpVQkZXM3ZZcUh4VmMvai96MmhuQUMvU2J0UmNDY1pLZ0RlclROTGJQdzNpVFFRZkxpdytMUGtlWmRPNFVVd3NJbWFQM3l3YjExMmllbGpXSm9VdHVZQVlDRW56NWs5c1AzUGZDRGRnU2I1QlJKWklhRGs3aTN2V05YVzF5ZExOZVh6UllwbXI0dnlNa0dFN2FnTC8rSTVTWmg1RVZLL0NZY0FYZ1kyTXAvVmZaV21lTWJGVlBYUzg5eExBd1duUVE9PVwifScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdHaGdoamZidmRrbW4hMjM0JyxcbiAgICAgICAgc2VuZGVySmV0dG9uQWRkcmVzczogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrUHJvdmlkZXIgPSB7XG4gICAgICAgIGdldEJhbGFuY2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCcxMDAwMDAwMDAwJyksXG4gICAgICAgIGdldEVzdGltYXRlRmVlOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgc291cmNlX2ZlZXM6IHtcbiAgICAgICAgICAgIGluX2Z3ZF9mZWU6IDEwMDAsXG4gICAgICAgICAgICBzdG9yYWdlX2ZlZTogMTAwMCxcbiAgICAgICAgICAgIGdhc19mZWU6IDEwMDAsXG4gICAgICAgICAgICBmd2RfZmVlOiAxMDAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxsOiBzYW5kYm94LnN0dWIoKS5jYWxsc0Zha2UoKGFkZHJlc3MsIG1ldGhvZCwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2dldF93YWxsZXRfZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGFjazogW1xuICAgICAgICAgICAgICAgIFsnbnVtJywgJzUwMDAwMDAwMDAnXSxcbiAgICAgICAgICAgICAgICBbJ251bScsICcwJ10sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YWNrOiBbXSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHNlbmQ6IHNhbmRib3guc3R1YigpLmNhbGxzRmFrZSgobWV0aG9kLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICBpZiAobWV0aG9kID09PSAncnVuR2V0TWV0aG9kJykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgIGdhc191c2VkOiAwLFxuICAgICAgICAgICAgICBzdGFjazogW1snbnVtJywgJzAnXV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3NlbmRCb2MnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb2s6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHNhbmRib3guc3R1YihUb253ZWIsICdIdHRwUHJvdmlkZXInKS5yZXR1cm5zKG1vY2tQcm92aWRlcik7XG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAnaXNNcGNWMktleWNhcmQnKS5yZXNvbHZlcyh7XG4gICAgICAgIHZlcnNpb246ICd2MScsXG4gICAgICAgIHVzZXJQcnY6IEpTT04uc3RyaW5naWZ5KHsgZHVtbXk6ICd1c2VyU2lnbmluZ01hdGVyaWFsJyB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdkZWNyeXB0JykucmVzb2x2ZXMoSlNPTi5zdHJpbmdpZnkoeyBkdW1teTogJ2JhY2t1cFNpZ25pbmdNYXRlcmlhbCcgfSkpO1xuXG4gICAgICBzYW5kYm94XG4gICAgICAgIC5zdHViKEVERFNBTWV0aG9kcywgJ2dldFRTU1NpZ25hdHVyZScpXG4gICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhJyArXG4gICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICdoZXgnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uIGlmIHVzZXJLZXkgYW5kIGJhY2t1cEtleSBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1Vuc2lnbmVkVHggPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgICAgc2lnbmFibGVIZXg6ICdkZDk4ZWI1YTM3MDBjMDIwMzIzNzA5NWNhMWMwZDUyODhiYzBkNjUwYTliNTlmN2I4MWJhYzU1MmY3NjEzN2RmJyxcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICBwYXJzZWRUeDoge1xuICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICc5OTkwMDAwMDAnLFxuICAgICAgICAgICAgICBjb2luTmFtZTogJ3R0b24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNwZW5kQW1vdW50OiA5OTkwMDAwMDAsXG4gICAgICAgICAgdHlwZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6IDEwMDAwMDAsXG4gICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3QgPSB7XG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IG1vY2tVbnNpZ25lZFR4LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXRDb2luOiAndG9uJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3RzID0ge1xuICAgICAgICB0eFJlcXVlc3RzOiBbbW9ja1R4UmVxdWVzdF0sXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIHRoZSByZWNvdmVyIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbW9ja2VkIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4sICdyZWNvdmVyJykucmVzb2x2ZXMobW9ja1R4UmVxdWVzdHMpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFJlcXVlc3RzJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25zJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Vuc2lnbmVkVHgnKTtcbiAgICAgIHJlc3VsdC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNob3VsZC5lcXVhbChtb2NrVW5zaWduZWRUeCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGFrZSBPVkMgb3V0cHV0IGFuZCBnZW5lcmF0ZSBhIHNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSB0aGUgcGFyYW1ldGVycyAobW9jayBPVkMgcmVzcG9uc2UpXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIG92Y1Jlc3BvbnNlOiB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4OlxuICAgICAgICAgICAgJ3RlNmNja0VCQWdFQXFnQUI0WWdBbDdST2hMbzhBSnVvV3RHdGNLMDBQdVVwWTNZa1FEajkvMlNuTXZ1bkxwSUZibDg5NndsTXY3ZnNVT2Mrc01IekVsOHEzdlg1Ym02bm9IZ2luUEpLQlJ6bk9yTzd2ZUlwSElFcGlSTGJINy9lTmRwU3NSaHZMMjYwSlAvZkQwdkFJVTFOR0x0QUJEcUFBQUFBQ0FBY0FRQm9RZ0IvT2VpTmRMZWFMNytPMDRYdXVqdUNoU0dyUmQ3Wm5GbDJmQ2Q5RlhkekF5RE9KWUN3QUFBQUFBQUFBQUFBQUFBQUFGd1hHdDg9JyxcbiAgICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgICAgbGFzdFNjYW5JbmRleDogMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vY2sgdGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgdGhlIHNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1NpZ25lZFN3ZWVwVHhuID0ge1xuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXJpYWxpemVkVHg6XG4gICAgICAgICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PScsXG4gICAgICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbGFzdFNjYW5JbmRleDogMCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgdGhlIGNyZWF0ZUJyb2FkY2FzdGFibGVTd2VlcFRyYW5zYWN0aW9uIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbW9ja2VkIHJlc3VsdFxuICAgICAgc2FuZGJveC5zdHViKGJhc2Vjb2luLCAnY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhtb2NrU2lnbmVkU3dlZXBUeG4pO1xuXG4gICAgICAvLyBDYWxsIHRoZSBjcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbiBmdW5jdGlvblxuICAgICAgY29uc3QgcmVjb3ZlcnlUeG4gPSBhd2FpdCBiYXNlY29pbi5jcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbihwYXJhbXMpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcmVzdWx0XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMF0uc2VyaWFsaXplZFR4LnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3RlNmNja0VCQWdFQXFnQUI0WWdBbDdST2hMbzhBSnVvV3RHdGNLMDBQdVVwWTNZa1FEajkvMlNuTXZ1bkxwSUZibDg5NndsTXY3ZnNVT2Mrc01IekVsOHEzdlg1Ym02bm9IZ2luUEpLQlJ6bk9yTzd2ZUlwSElFcGlSTGJINy9lTmRwU3NSaHZMMjYwSlAvZkQwdkFJVTFOR0x0QUJEcUFBQUFBQ0FBY0FRQm9RZ0IvT2VpTmRMZWFMNytPMDRYdXVqdUNoU0dyUmQ3Wm5GbDJmQ2Q5RlhkekF5RE9KWUN3QUFBQUFBQUFBQUFBQUFBQUFGd1hHdDg9J1xuICAgICAgKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1swXS5zY2FuSW5kZXguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgcmVjb3ZlcnlUeG4ubGFzdFNjYW5JbmRleC5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTVBDdjIgc2lnbmVkIHJlY292ZXJ5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0LXBhc3NwaHJhc2UtbXBjdjInO1xuICAgICAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9ICdVUUJMMmlkQ1hSNEFUZFF0YU5hNFZwb2ZjcFN4dXhJZ0hIN19zbE9aZmRPWFNhZEonO1xuICAgICAgY29uc3QgYXBpS2V5ID0gJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InO1xuXG4gICAgICBsZXQgbXBjVjJVc2VyS2V5OiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJCYWNrdXBLZXk6IHN0cmluZztcbiAgICAgIGxldCBtcGNWMkNvbW1vbktleUNoYWluOiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJXYWxsZXRBZGRyZXNzOiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJSZWNvdmVyUGFyYW1zOiBNUENSZWNvdmVyeU9wdGlvbnMgJiB7IGFwaUtleTogc3RyaW5nIH07XG5cbiAgICAgIGxldCBtb2NrUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0QmFsYW5jZTogc2lub24uU2lub25TdHViO1xuICAgICAgICBnZXRFc3RpbWF0ZUZlZTogc2lub24uU2lub25TdHViO1xuICAgICAgICBjYWxsOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICAgIHNlbmQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgIH07XG5cbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgICAgIG1wY1YyQ29tbW9uS2V5Q2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgICAgIG1wY1YyVXNlcktleSA9IGF3YWl0IGVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICBtcGNWMkJhY2t1cEtleSA9IGF3YWl0IGVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG5cbiAgICAgICAgY29uc3QgbXBjID0gYXdhaXQgRUREU0FNZXRob2RzLmdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UoKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gbXBjLmRlcml2ZVVuaGFyZGVuZWQobXBjVjJDb21tb25LZXlDaGFpbiwgJ20vMCcpLnNsaWNlKDAsIDY0KTtcbiAgICAgICAgbXBjVjJXYWxsZXRBZGRyZXNzID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoYWNjb3VudElkKTtcblxuICAgICAgICBtcGNWMlJlY292ZXJQYXJhbXMgPSB7XG4gICAgICAgICAgdXNlcktleTogbXBjVjJVc2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogbXBjVjJCYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IG1wY1YyQ29tbW9uS2V5Q2hhaW4sXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgICAgIGdldEJhbGFuY2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCcxMDAwMDAwMDAwJyksXG4gICAgICAgICAgZ2V0RXN0aW1hdGVGZWU6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICAgIHNvdXJjZV9mZWVzOiB7IGluX2Z3ZF9mZWU6IDEwMDAsIHN0b3JhZ2VfZmVlOiAxMDAwLCBnYXNfZmVlOiAxMDAwLCBmd2RfZmVlOiAxMDAwIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2FsbDogc2FuZGJveC5zdHViKCksXG4gICAgICAgICAgc2VuZDogc2FuZGJveC5zdHViKCkuY2FsbHNGYWtlKChtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3J1bkdldE1ldGhvZCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGdhc191c2VkOiAwLCBzdGFjazogW1snbnVtJywgJzAnXV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBzYW5kYm94LnN0dWIoVG9ud2ViLCAnSHR0cFByb3ZpZGVyJykucmV0dXJucyhtb2NrUHJvdmlkZXIgYXMgYW55KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlY292ZXIgbmF0aXZlIFRPTiB1c2luZyBNUEN2MiBzaWduaW5nIG1hdGVyaWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBnZXRUU1NTaWduYXR1cmVTcHkgPSBzYW5kYm94LnNweShFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpKSBhcyBNUENUeDtcblxuICAgICAgICByZXN1bHQuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQuc2NhbkluZGV4LCAwKTtcbiAgICAgICAgKHJlc3VsdC5zZXJpYWxpemVkVHggYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZFdpdGgobW9ja1Byb3ZpZGVyLmdldEJhbGFuY2UsIG1wY1YyV2FsbGV0QWRkcmVzcyk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0Lm5vdENhbGxlZChnZXRUU1NTaWduYXR1cmVTcHkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVjb3ZlciBqZXR0b24gdXNpbmcgTVBDdjIgc2lnbmluZyBtYXRlcmlhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1Byb3ZpZGVyLmNhbGwuY2FsbHNGYWtlKChhZGRyZXNzOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2dldF93YWxsZXRfZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGFjazogW1xuICAgICAgICAgICAgICAgIFsnbnVtJywgJzUwMDAwMDAwMDAnXSxcbiAgICAgICAgICAgICAgICBbJ251bScsICcwJ10sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YWNrOiBbXSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0VFNTU2lnbmF0dXJlU3B5ID0gc2FuZGJveC5zcHkoRUREU0FNZXRob2RzLCAnZ2V0VFNTU2lnbmF0dXJlJyk7XG5cbiAgICAgICAgY29uc3QgamV0dG9uUGFyYW1zID0ge1xuICAgICAgICAgIC4uLm1wY1YyUmVjb3ZlclBhcmFtcyxcbiAgICAgICAgICBzZW5kZXJKZXR0b25BZGRyZXNzOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBiYXNlY29pbi5yZWNvdmVyKGpldHRvblBhcmFtcykpIGFzIE1QQ1R4O1xuXG4gICAgICAgIHJlc3VsdC5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzY2FuSW5kZXgnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdC5zY2FuSW5kZXgsIDApO1xuICAgICAgICAocmVzdWx0LnNlcmlhbGl6ZWRUeCBhcyBzdHJpbmcpLnNob3VsZC5iZS5hLlN0cmluZygpLmFuZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkV2l0aChtb2NrUHJvdmlkZXIuZ2V0QmFsYW5jZSwgbXBjVjJXYWxsZXRBZGRyZXNzKTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQubm90Q2FsbGVkKGdldFRTU1NpZ25hdHVyZVNweSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB1c2UgTVBDdjEgcGF0aCB3aGVuIHNpZ25pbmcgbWF0ZXJpYWwgaXMgTVBDdjEgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAnaXNNcGNWMktleWNhcmQnKS5yZXNvbHZlcyh7XG4gICAgICAgICAgdmVyc2lvbjogJ3YxJyxcbiAgICAgICAgICB1c2VyUHJ2OiBKU09OLnN0cmluZ2lmeSh7IHVTaGFyZToge30sIGJpdGdvWVNoYXJlOiB7fSB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0VFNTU2lnbmF0dXJlU3R1YiA9IHNhbmRib3hcbiAgICAgICAgICAuc3R1YihFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKVxuICAgICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgICAnMWJhYWZhMGQ2MjE3NGJmMGM3OGYzMjU2MzE4NjEzZmZjNDRiNmRkNTRhYjFhNjNjMjE4NTIzMmY5MmVkZTlkYScgK1xuICAgICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICAgJ2hleCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgIHNhbmRib3guc3R1YihiaXRnbywgJ2RlY3J5cHQnKS5yZXNvbHZlcyhKU09OLnN0cmluZ2lmeSh7IGJTaGFyZToge30sIHlTaGFyZXM6IHt9IH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpKSBhcyBNUENUeDtcblxuICAgICAgICByZXN1bHQuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQuc2NhbkluZGV4LCAwKTtcbiAgICAgICAgKHJlc3VsdC5zZXJpYWxpemVkVHggYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VFNTU2lnbmF0dXJlU3R1Yik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGNvbW1vbktleUNoYWluIGZyb20gTVBDdjIga2V5Y2FyZCBkb2VzIG5vdCBtYXRjaCBiaXRnb0tleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbWlzbWF0Y2hlZEJpdGdvS2V5ID0gbXBjVjJDb21tb25LZXlDaGFpbi5zbGljZSgwLCAtOCkgKyAnMDAwMDAwMDAnO1xuICAgICAgICBjb25zdCBtaXNtYXRjaGVkUGFyYW1zID0ge1xuICAgICAgICAgIC4uLm1wY1YyUmVjb3ZlclBhcmFtcyxcbiAgICAgICAgICBiaXRnb0tleTogbWlzbWF0Y2hlZEJpdGdvS2V5LFxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnJlY292ZXIobWlzbWF0Y2hlZFBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRWREU0EgTVBDdjIgcmVjb3Zlcnk6IGNvbW1vbktleUNoYWluIGZyb20ga2V5Y2FyZCBkb2VzIG5vdCBtYXRjaCBiaXRnb0tleScpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
867
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3Rvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QztBQUM1Qyw0Q0FBbUQ7QUFDbkQsbUNBQWtFO0FBQ2xFLDZDQUErQjtBQUMvQixvREFBNEI7QUFDNUIsMkRBQTZDO0FBQzdDLDhDQUFrRztBQUNsRyxvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLG9EQUE0QjtBQUM1QixvREFBNkM7QUFFN0MsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNmLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDM0IsTUFBTSxjQUFjLEdBQUc7UUFDckI7WUFDRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDL0UsTUFBTSxFQUFFLEVBQUU7U0FDWDtRQUNEO1lBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2xHLE1BQU0sRUFBRSxFQUFFO1NBQ1g7S0FDRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsR0FBRztR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b0JBQ3ZCLEdBQUcsa0JBQWtCO29CQUNyQixRQUFRLEVBQUUsa0JBQWtCO2lCQUM3QixDQUFDO2dCQUVGLE1BQU0sUUFBUTtxQkFDWCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7cUJBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDJFQUEyRSxDQUFDLENBQUM7WUFDekcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEksIGVuY3J5cHQgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUb24sIFRvblBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLCBUdG9uIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy90b24nO1xuaW1wb3J0IHsgRUREU0FNZXRob2RzLCBNUENSZWNvdmVyeU9wdGlvbnMsIE1QQ1R4LCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCBUb253ZWIgZnJvbSAndG9ud2ViJztcbmltcG9ydCB7IE1QU1V0aWwgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG5kZXNjcmliZSgnVE9OOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2Vjb2luO1xuICBjb25zdCBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0b24nLCBUb24uY3JlYXRlSW5zdGFuY2UpO1xuICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3R0b24nLCBUdG9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gIGNvbnN0IHR4UHJlYnVpbGRMaXN0ID0gW1xuICAgIHtcbiAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gICAge1xuICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdCA9IFtcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnR4Qm91bmNlYWJsZSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgfSxcbiAgICB7XG4gICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eEJvdW5jZWFibGUsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB0eEluZm86IHt9LFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgdHhQYXJhbXNMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudF0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCB0eFBhcmFtc0JvdW5jZWFibGVMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZV0sXG4gICAgfSxcbiAgICB7XG4gICAgICByZWNpcGllbnRzOiBbdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlXSxcbiAgICB9LFxuICBdO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRvbiA9IGJpdGdvLmNvaW4oJ3RvbicpO1xuICAgIGNvbnN0IHR0b24gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICB0b24uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHRvbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnR3JhbScpO1xuICAgIHRvbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOSk7XG5cbiAgICB0dG9uLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0dG9uJyk7XG4gICAgdHRvbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIHR0b24uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgR3JhbScpO1xuICAgIHR0b24uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG4gICAgdHhQYXJhbXNMaXN0LmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHR4UGFyYW1zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gdHhQcmVidWlsZExpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHhQYXJhbXNCb3VuY2VhYmxlID0gdHhQYXJhbXNCb3VuY2VhYmxlTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkQm91bmNlYWJsZSA9IHR4UHJlYnVpbGRCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcblxuICAgICAgICBjb25zdCBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc0JvdW5jZWFibGUsXG4gICAgICAgICAgdHhQcmVidWlsZDogdHhQcmVidWlsZEJvdW5jZWFibGUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIG51bWJlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAyMDAwMDAwMDtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIHN0cmluZ3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnMjAwMDAwMDAnO1xuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2hlbiByZWNpcGllbnRzIGFtb3VudHMgYXJlIG51bWJlciBhbmQgYW1vdW50IGlzIHNhbWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZXNvbHZlZFdpdGgodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50cyBhcmUgc3RyaW5nIGFuZCBhbW91bnQgaXMgc2FtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICAuc2hvdWxkLnJlc29sdmVkV2l0aCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50IGFkZHJlc3MgYXJlIG5vbiBib3VuY2VhYmxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eFBhcmFtcykpO1xuICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9IG5ldyBUb253ZWIuQWRkcmVzcyhcbiAgICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYWRkcmVzc1xuICAgICAgICApLnRvU3RyaW5nKHRydWUsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7fTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCByZWNpcGllbnQgaGF2aW5nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbkZvck1lbW9JZC5yZWNpcGllbnRdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb25Gb3JNZW1vSWQudHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICB9IGFzIGFueSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6ICd0dXlPa3lGVU12X25lVl9GZU5CSDI0TmQ0Y01MMmpVZ0RQNHpqR2t1T0ZJPScsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIG5vbi1ib3VuY2VhYmxlIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdG9BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiAndHV5T2t5RlVNdl9uZVZfRmVOQkgyNE5kNGNNTDJqVWdEUDR6akdrdU9GST0nLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgICAgICB3aXRoZHJhd0Ftb3VudDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzaW5nbGUgbm9taW5hdG9yIHdpdGhkcmF3IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSAoYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4SWQsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICAgIHdpdGhkcmF3QW1vdW50OiAnOTMyMTc4MTEyMzMwMDAwJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgbm9uLWJvdW5jZWFibGUgc2luZ2xlIG5vbWluYXRvciB3aXRoZHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gKGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnR4LCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0b0FkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgICAgZnJvbUFkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgIH0pKSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAnd2l0aGRyYXdBbW91bnQnXSxcbiAgICAgICAgaWQ6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24udHhJZCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnNpZ25lZFNpbmdsZU5vbWluYXRvcldpdGhkcmF3VHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZS5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS5zaWduZWRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd1RyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlLmFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiAnVU5LTk9XTicgfSxcbiAgICAgICAgd2l0aGRyYXdBbW91bnQ6ICc5MzIxNzgxMTIzMzAwMDAnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAncmFuZG9tU3RyaW5nJyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgVHJhbnNhY3Rpb25zOiAnLCAoKSA9PiB7XG4gICAgY29uc3QgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0dG9uJyk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbnNMaXN0ID0gW3Rlc3REYXRhLnNpZ25lZFNlbmRUcmFuc2FjdGlvbi50eCwgdGVzdERhdGEuc2lnbmVkU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdUcmFuc2FjdGlvbi50eF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlTGlzdCA9IFtcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdFUUNTQmpSM2ZVT0w5OFdUdzJGX0lUNEJyY3FqWkpXVkxXVVN6NVdRRHBhTDlKcGwnLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBYkp1Zy1rLXR1ZldNakVDMVJLU00waWlKVERVY1lrQzd6V0FOSHJrVDU1Rm9sJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMjM0MDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICBdO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGVMaXN0ID0gW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQ1NCalIzZlVPTDk4V1R3MkZfSVQ0QnJjcWpaSldWTFdVU3o1V1FEcGFMOU1lZycsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdVUUFiSnVnLWstdHVmV01qRUMxUktTTTBpaUpURFVjWWtDN3pXQU5IcmtUNTVBZmcnLFxuICAgICAgICAgIGFtb3VudDogJzEyMzQwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYd3RHJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ0VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWHd0RycsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uT3V0cHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnVVFBMGk4LUNkR25GX0RoVUhIZjkyUjFPTkg2c0lBOXZMWl9XTGNDSWhmQkJYMWFEJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ1VRQTBpOC1DZEduRl9EaFVISGY5MlIxT05INnNJQTl2TFpfV0xjQ0loZkJCWDFhRCcsXG4gICAgICAgICAgYW1vdW50OiAnMTIzNDAwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIHRyYW5zYWN0aW9uc0xpc3QuZm9yRWFjaCgoXywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25zTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlID0gdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUgPSB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlQm91bmNlYWJsZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UgPSB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlID0gdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlTGlzdFtpbmRleF07XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcblxuICAgICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICBpbnB1dHM6IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2UsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBub24tYm91bmNlYWJsZSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHRvQWRkcmVzc0JvdW5jZWFibGU6IGZhbHNlLFxuICAgICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIH0gYXMgVG9uUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgIGlucHV0czogdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGUsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2VCb3VuY2VhYmxlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2UgYSBUT04gdHJhbnNhY3Rpb24gd2hlbiBleHBsYWluVHJhbnNhY3Rpb24gcmVzcG9uc2UgaXMgdW5kZWZpbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdHViID0gc2lub24uc3R1YihUb24ucHJvdG90eXBlLCAnZXhwbGFpblRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHN0dWIucmVzb2x2ZXModW5kZWZpbmVkKTtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4ucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4OiB0cmFuc2FjdGlvbiB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2Vjb2luID0gYml0Z28uY29pbigndHRvbicpO1xuICAgIGxldCBrZXljaGFpbnM7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbW1vbktleWNoYWluID1cbiAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJztcbiAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTU5NDk4Njg0NjgnLFxuICAgICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6XG4gICAgICAgICAgICAne1wiaXZcIjpcImNaZDVpN0w0Unh0d3JBTFcycks3VUE9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCI6XCJjY21cIixcImFkYXRhXCI6XCJcIixcImNpcGhlclwiOlwiYWVzXCIsXCJzYWx0XCI6XCI1emdvSDFCZDNGdz1cIixcImN0XCI6XCI5dlZsblhGUnRyTTlGVkVvK2QyY2hiR0hsTTlsRlplbXVlQnVBczNCSWtQbzMzRm83anp3d05LL2tJV2tFeWcrTm1FQmQ1SWFxQVMxNTdudnZ2d3p6c21NV2xRZFV6OXFibVhOdjNwZzk4N2NYRlIwOGV4Uys0dWh3UDFZTk9qSlRSdlJOY085WnFIYjQ2ZDRmbXlKL3lDOS9zdXNDZ2U3ci9Fc2JhTjVDM2FmdjFkenlidXE5MTJGd2FRRWxaTFlZcDVCSUN1ZEZPTVo5azBVRE1mS00vUE1Ea0g3V2V4b0dIcjlHS3EvYmdDSDJCMzlUWlp5SEtVNlV5NDdsWGVwMnM2aDBEck13SE9ybm1pTDNEWmpPajg4WW52cGhsenh1bzRlT2xEMlVIaWEyK252SWFJU1lzMjlQcjBEQXZSRXV0Y2h2Y0JwRXhqMWtXV1B2N2hRWXJ2OEYwTkFkYXRzYldsM3creEt5ZmlNS28xVVNscnd5SnZpeXBHdFF0WE9KeXcwWFBOMHJ2MitMNWxXOEJianB6SGZZWU4xM2ZKVGVkbEdURmhoa3pWdGJiUEFLRTAya3g3ekNKY2pZYWlleGRTVHNyRExTY1lOVDkvSmhkdDI3S3Bzb29laHdWb2hMZlNLejR2YkZmUnUyTVBadzMvK2MvaGZpSk5ndHo2ZXNXYm54R3JjRThVMkl3UFlDYUsrR2hrNERjcVdOSW5pNTlSSTVCNWtBc1FPVG9JSTQwcVBONTEwdVRneEJTUE83cTdNSGdreGRkNENxQnErb2pyOWowUDdvYW84RTVZK0NCREpyb2pEb0NoMW9DQ0RXOXZvMmRYbFZjRDhTSWJ3N1UvOUFmdkViQTR4eUUvNW1kMU03Q0l3TG5XczJZbnYwWXRhS29xaGRTOXg2Rm1IbE1EaE4vREtIaW5yd21vd3RyVFQ4MmZPa3BPNWc5c2FTbWdVN1F5M2dMdDh0K1Z3ZEV5ZUZlUVVLUlN5Y2k4cWdxWFFhWklnNCthWGdhU09ubENGTXRtQjhla1l4RWhUWTV1elJmck5nUzRzMVFlcUZCcE50VUYrWWRpMjk3cGJWWG5Kb1hBTitTVldkODBHQ3greUkyZHBWQzg5azNyT1dLOVdleXFsbnp1TEpXcDJSSU9COWNkVzhHRnYvZk4rUUFKcFllVnhPRTQrblpEc0tuc2o4bktjZzl0NERseDFHNmdMTTEvVnE5WXhOTGJ1enVSQzBhc1VZdmRNbm9NdnN6bXBtKytUeG5kWWlzZ05Zc2NwWlNvejd3dmNhekpORVBmaFBWakVrZDZ0VVV1TjRHTTM1SDBEbUtDVVFOVCthNkI2aG1IbFRadmp4aXlHQWc1Ylk1OWhkanZKKzIyUWR1YXpsRUVDNkxJM0hyQTd1SzBUcHBsV3pTMXRDSUZ2VE1VaGo2NURFWm1OSjIrWlk5YlE0dnNNZitEUlIzT09HNHQrRE1sTmZqT2Qzek52M1FvWTk1QmpmV3ByeUZ3UHpEcTdiQ1A2N0pEc29qN2oyVFk1RlJTclJrRDc3SDBFd2x1eDJjV2ZqUlR3Y01IY2RReHh1VjBPUDBhTmpHRGp5YkZOXCJ9JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnNjQyNGMzNTNlYWY3OGQwMDA3NjZlOTYxMzdkNDQwNGInLFxuICAgICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICAgICAnMTliZGZlMmE0YjQ5OGEwNTUxMTM4MTIzNWE4ODkyZDU0MjY3ODA3YzRhM2Y2NTRlMzEwYjkzOGI4YjQyNGZmNGFkZWRiZTkyZjRjMTQ2ZGU2NDFjNjc1MDhhOTYxMzI0Yzg1MDRjZGY4ZTBjMGFjYmI2OGQ2MTA0Y2NjY2Q3ODEnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjpcbiAgICAgICAgICAgICd7XCJpdlwiOlwidmkwZFBlZi9SeDdrRy9wUnlTUWk2UT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcIjllZmhRc2lFdlZzPVwiLFwiY3RcIjpcIkd3NmF0dmY2Z3hLenNqdGwzeHNlaXBPM3JBeHAxbUF6N1l1MWloRnNpNS9sZjJ2TVplZ0FwZ1p4K3B5SUxGUzlLS0xIYk5GM1U2V2dTWWRycjJ0NHZ6ZExzWGtIMVdJeGZIUytjZDJDNU41OXlBRFpEblBKQlQ2cHYvSVJ2YVllbFAwQ2szbklZUTJoU01tOG9wK1ZPV0MvU3pIZWg3c2xZRHF3RUhUR2FuMFdpZ2Z2azF5UmQ3Q0NKVGFFQW9tbmMvNGVGaTJOWTNYM2d0LzNvcHk5SUFna25ud1VGb2huOTZFV3BFUTBGNnBiekgvWjhWRjZnRitEVWNyckJ5QXhFeFVQbkhRWmlGazNZSFUvdlZWNEZ4QlUvbVZBRTh4QnNCbjV1bDVlNVNVTVBmYzdUQnVKV3Y0QkJ5VE5nOXhEU2hGLzkxWXgybmJmVW01ZDlRbU04bHBLZ3p6UXZjSzhQT0FQazg3Z1JDdUtuc0doNXZOUzBVcHBrSGMrb2NmelJRbEdBNmp6ZTdReXlRTzByTWo1THk4a1dqd2sydklTdktZSFlTMU5SN1ZVNTQ5VUlYbzdOWGphdHVuS1NjMytJcmVvUlVISXNoaWFMZzZobCtweENDdWMwcVE0M1YwbWRJZkNqVE44Z2tHV0xOazhSN3RBR1B6OWp5YXBRUGNQRUdIZ0V6MEFUSWk2eU1OV0NzaWJTMmVMaUUxdVZFSk9Ob000bGs2RlBsM1EyQ0hiVzJNZUVicWpZOGhiYXcxOG1OYjJ4U0JIL0Z3cGlpYWwrVHZpMmltcWduQ080WnBPOWJsbEtmdFpQY1F5MHN0TitlR0JsYjV1ZnlmbEtrRFNpQ2hIWXJvR2pFcG1pRmljZGRlNDhjSnN6RjUydUtObmYxcTY3ZkE5L1MyRkFIUWFiM0VYb2p4SDJHYmsra2tWMmgvVFlLRkZaU1dDM3ZpNGU4bU8rdmpNVWNSMEFkc2dQRnlFSXowU0NHdWJhM0NuVExOZEV1WndzYXVBZUhreDJ2VVRuUmdKUFZnTmVldVhtc1ZHNzZTeTJnZ0pIdWFsczBIajhVMlhkYTBxTzFSdUZmb0NXZnNzOXduNkhHUndQUGtoU0IvOG9OZ3VBcW1SVkdLa2Q4Wnd0M0l2clRkOWZrMC9yRkZESktHejdXeU5Ia1lnVW1OaUdjSXREMTJ2MGp4N0ZaNTJFSnpsM0F2MVJ5SlVRSzE4KzhFWVBoM1NHaVU5ZHQ3VlgwYUYwdW82Sm91S2hPZWxkVXZNUCtBdWdRejhmVWNsd1RRc2Jib1ZnMjdZeG8wRHlBVFZ3VGhXNWE1NlI2UWY1WmlRSmx1RnV6czV5OThycTBTNXEwNDZsRTZvM3ZWbUpwRWR3amVTQ0pvRVQ1Q0w0blRna1h5V3ZobTRlQjh1L2U2NmwzbzBxYmFTeDhxOVlZbVQ5RXBSY2w1VFA0VGhMQktFVFlkelZ2ZzRleGpRZmVrdE1hdGs1RXlVcEVJaFpQWGg1dlhwSlplc2RmTzlMSjh6VGFIQnNCakRQVTdjZE5nUU1iZWJwYXRhUmk4QTBlbDIvSUpYbCtFK29sZ0F6NXpDNGkyTzFRPT1cIn0nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICc2NDI0YzM1M2VhZjc4ZDAwMDc2NmU5NTEwYjEyNWZiYScsXG4gICAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICAgIHR5cGU6ICd0c3MnLFxuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzE5YmRmZTJhNGI0OThhMDU1MTEzODEyMzVhODg5MmQ1NDI2NzgwN2M0YTNmNjU0ZTMxMGI5MzhiOGI0MjRmZjRhZGVkYmU5MmY0YzE0NmRlNjQxYzY3NTA4YTk2MTMyNGM4NTA0Y2RmOGUwYzBhY2JiNjhkNjEwNGNjY2NkNzgxJyxcbiAgICAgICAgICB2ZXJpZmllZFZzc1Byb29mOiB0cnVlLFxuICAgICAgICAgIGlzQml0R286IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSB3ZWxsIGZvcm1hdHRlZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnd3JvbmdhZGRyZXNzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsaWRhdGluZyBhIG5vbi1ib3VuY2VhYmxlIGFkZHJlc3MgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdVUUEwaTgtQ2RHbkZfRGhVSEhmOTJSMU9OSDZzSUE5dkxaX1dMY0NJaGZCQlgxYUQnO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYWRkcmVzc2VzIHdpdGggbWVtb0lkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gJ0VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRkw3bj9tZW1vSWQ9MTIzJztcbiAgICAgIGNvbnN0IGFkZHJlc3MyID0gJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaT9tZW1vSWQ9MTIzJztcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MxKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzMikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaXNXYWxsZXRBZGRyZXNzIHdpdGggdmFsaWQgYWRkcmVzcyBmb3IgaW5kZXggNCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5ld0FkZHJlc3MgPSAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJztcbiAgICAgIGNvbnN0IGluZGV4ID0gNDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogbmV3QWRkcmVzcywgaW5kZXgsIGtleWNoYWlucyB9O1xuICAgICAgKGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzYW5kIGluZGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbmV3QWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24/bWVtb0lkPTQnO1xuICAgICAgY29uc3QgaW5kZXggPSA0O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiBuZXdBZGRyZXNzLCBpbmRleCwga2V5Y2hhaW5zIH07XG4gICAgICAoYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBpc1dhbGxldEFkZHJlc3Mgd2l0aCB2YWxpZCBhZGRyZXNzIGZvciBpbmRleCA1IGFuZCBhZGRyZXNzIGlzIGZvciBhIGRpZmZlcmVudCBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzc0ZvckluZGV4NSA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSA1O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzOiB3cm9uZ0FkZHJlc3NGb3JJbmRleDUsIGluZGV4LCBrZXljaGFpbnMgfTtcbiAgICAgIChhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGlzV2FsbGV0QWRkcmVzcyB3aGVuIGtleWNoYWlucyBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IGNvbW1vbktleWNoYWluLCBhZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaXNXYWxsZXRBZGRyZXNzIHdoZW4gbmV3IGFkZHJlc3MgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICdiYWRBZGRyZXNzJztcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcblxuICAgICAgY29uc3QgcGFyYW1zID0geyBjb21tb25LZXljaGFpbiwgYWRkcmVzczogd3JvbmdBZGRyZXNzLCBpbmRleCB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4gYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyksIHtcbiAgICAgICAgbWVzc2FnZTogYGludmFsaWQgYWRkcmVzczogJHt3cm9uZ0FkZHJlc3N9YCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXRpbCBjbGFzcyAnLCAoKSA9PiB7XG4gICAgbGV0IGNvbW1vbktleWNoYWluO1xuICAgIGxldCBkZXJpdmVkUHVibGljS2V5O1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb21tb25LZXljaGFpbiA9XG4gICAgICAgICcxOWJkZmUyYTRiNDk4YTA1NTExMzgxMjM1YTg4OTJkNTQyNjc4MDdjNGEzZjY1NGUzMTBiOTM4YjhiNDI0ZmY0YWRlZGJlOTJmNGMxNDZkZTY0MWM2NzUwOGE5NjEzMjRjODUwNGNkZjhlMGMwYWNiYjY4ZDYxMDRjY2NjZDc4MSc7XG4gICAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgICAgZGVyaXZlZFB1YmxpY0tleSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCAnbS8nICsgMCkuc2xpY2UoMCwgNjQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3NGcm9tUHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgYm91bmNlYWJsZSBhZGRyZXNzIGJ5IGRlZmF1bHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5KSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCB0cnVlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdFUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmF2UTUnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgbm9uLWJvdW5jZWFibGUgYWRkcmVzcyB3aGVuIHJlcXVlc3RlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKGF3YWl0IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGRlcml2ZWRQdWJsaWNLZXksIGZhbHNlKSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgICdVUURWZXlVSk94M0FuWkdXTHRFMGwtVnh2N2M3dVRuRDhPWHRDRmhhTy1udmFxbjgnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZXJpdmUgcmF3IGFkZHJlc3Mgd2hlbiByZXF1ZXN0ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIChhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShkZXJpdmVkUHVibGljS2V5LCBmYWxzZSwgZmFsc2UpKS5zaG91bGQuZXF1YWwoXG4gICAgICAgICAgJzA6ZDU3YjI1MDkzYjFkYzA5ZDkxOTYyZWQxMzQ5N2U1NzFiZmI3M2JiOTM5YzNmMGU1ZWQwODU4NWEzYmU5ZWY2YSdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGdldCB2YWxpZCB2ZXN0aW5nIGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZlc3RpbmdQYXJhbXMgPSB7XG4gICAgICAgICAgc3ViV2FsbGV0SWQ6IDY5ODk4MzE5MSxcbiAgICAgICAgICBwdWJsaWNLZXlIZXg6ICc3MTAxMzM5NDg2Mjk5NWNmYjUyN2RlYTljYWRjYzg0ZDY2ZDExOTdkMmE0NDU0NTc5YjkzYTA4MjIzZTRiMzA5JyxcbiAgICAgICAgICB2ZXN0aW5nU3RhcnRUaW1lOiAxNzYwOTk5MTY0LFxuICAgICAgICAgIHZlc3RpbmdUb3RhbER1cmF0aW9uOiA2MCAqIDYwICogMjQgKiAzMCxcbiAgICAgICAgICB1bmxvY2tQZXJpb2Q6IDYwICogNjAgKiAyNCxcbiAgICAgICAgICBjbGlmZkR1cmF0aW9uOiA2MCAqIDYwLFxuICAgICAgICAgIHZlc3RpbmdUb3RhbEFtb3VudDogQmlnSW50KCc0MDAwMDAwMDAnKSxcbiAgICAgICAgICB2ZXN0aW5nU2VuZGVyQWRkcmVzczogJzBRRE9FeXpDNktYaVZoMlJjbzJiYXBIOTZWbjZsYjlZV3hna1RWV3RxLTlDWEZ0cCcsXG4gICAgICAgICAgb3duZXJBZGRyZXNzOiAnMFFEQnJPZ2pRVGhiTjdlV0JIRXJSaHJKUUgzQXBlY0dEdHUzSzExTHVqam14NDlaJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdmVzdGluZ0NvbnRyYWN0QWRkcmVzcyA9IGF3YWl0IHV0aWxzLmdldFZlc3RpbmdDb250cmFjdEFkZHJlc3ModmVzdGluZ1BhcmFtcyk7XG4gICAgICAgIHZlc3RpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCdFUUFqbWdNYndVM1dWS19wbjJnajFYQkdfTk12cmtvVDRlYXJ2c19DOVE2ZnMtU0UnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhZGRyZXNzIGFzIHBlciBib3VuY2VhYmxlIGZsYWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknLCBmYWxzZSksXG4gICAgICAgICAgJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaSdcbiAgICAgICAgKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIHV0aWxzLmdldEFkZHJlc3MoJ1VRQjBIeXQxYlRSZkkwV0tfVUxaeUt2cnZQMFBQdHBUUUZpX2pLWFZYWDZLRk9NaScsIHRydWUpLFxuICAgICAgICAgICdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nXG4gICAgICAgICk7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICB1dGlscy5nZXRBZGRyZXNzKCdFUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZMN24nLCB0cnVlKSxcbiAgICAgICAgICAnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJ1xuICAgICAgICApO1xuICAgICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgICAgdXRpbHMuZ2V0QWRkcmVzcygnRVFCMEh5dDFiVFJmSTBXS19VTFp5S3ZydlAwUFB0cFRRRmlfaktYVlhYNktGTDduJywgZmFsc2UpLFxuICAgICAgICAgICdVUUIwSHl0MWJUUmZJMFdLX1VMWnlLdnJ2UDBQUHRwVFFGaV9qS1hWWFg2S0ZPTWknXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYmxvY2sgaGFzaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnTVB1T3ZIZHUveit0Mmw4MllwWnRpSlFrOCtGVkttV3VLeGQ2dWJuMDlmST0nKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoJ01QdU92SGR1L3ordDJsODJZcFp0aUpRazgrRlZLbVd1S3hkJyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYlZLQll4RHR2cGs9JyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCczc3lreDZSdWp5N1V0QndIUS9YNWtMZ3ZLRTBTS0xBK0FCaUNLaTdzWDhvPScpLCB0cnVlKTsgLy8gTm8gdXJsIGZyaWVuZGx5IHR4aWRcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnM3N5a3g2UnVqeTdVdEJ3SFFfWDVrTGd2S0UwU0tMQS1BQmlDS2k3c1g4bz0nKSwgdHJ1ZSk7IC8vIFVybCBmcmllbmRseSB0eGlkXG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ3dsVGRET0FYd0pwOEVTUmZRQUVKUUluMFRjaV9TNW9MYj0nKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKCd3bFRkRE9BWHdKcDhFU1JmUUFFSlFJbjBUY2lfUzVvTGJWS0JZeER0YWZkc2FzZGFkc2Z2cGs9JyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdHJhbnNhY3Rpb24gaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHV0aWxzLmdldE1lc3NhZ2VIYXNoRnJvbURhdGEoXG4gICAgICAgICd0ZTZjY2tFQ0NnRUFBa29BQTdWMms0Vncxbmh4cjdYY0NCaldjRkZIS3FHd0NnbFBTUnVZQWtXaldpVFZBSUFBQVBiTGd2YTBHN3l0S3cveGVFOWEzRkhLMlJNOGZnT3BHdlRwUVJzZWVNZXIzZWZSS3NpUUFBRHhQaG5hUUZaV1lybFFBRFJxYkNVSUFRSURBZ0hnQkFVQWduSUFaMFVJd21rbmtNYVc3UWJvVGNxNDhGZloxTlQ1b01VajJWUE9CcjN6UG94cmlhYjRTZlY2NWk2SGQxSjJzRnN1VGNJV1VvYmNLWE1jSXlzK0pXa25BaE1Nd1N2V0JobVR6d1JBQ0FrQjRZZ0EwbkN1R3M4T05mYTdnUU1hemdvbzVWUTJBVUVwNlNOekFFaTBhMFNhb0JBSEhnblBKQlFRSi9tZW9Dd3pLNS9QYWpCU3h1SksyR2t2YTdObWxBTE5EczJJTUVXaTRaUmZJVjRWZUpwS0JoemhLak5sRmp1ejYwZythZVQ1Y05pNENVMU5HTHNyZXkvNEFBQUFHQUFjQmdFQjN3Y0FhR0lBSzJjWWRZQ3R4dEJhV0o5aGk3TitIVnplTXNQUXhMSFNxWW43YmZwT2NSeWgzTlpRQUFBQUFBQUFBQUFBQUFBQUFBQUFzV2dBMG5DdUdzOE9OZmE3Z1FNYXpnb281VlEyQVVFcDZTTnpBRWkwYTBTYW9CRUFGYk9NT3NCVzQyZ3RMRSt3eGRtL0RxNXZHV0hvWWxqcFZNVDl0djBuT0k1UTdtc29BQVlVV0dBQUFCN1pjRjdXaE1yTVZ5cEFBSjFCbllNVGlBQUFBQUFBQUFBQUVRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBRy9KaDZFZ1RCUllRQUFBQUFBQUFnQUFBQUFBQTRFNTJBUC9lQVluVmhKa29JSTRZVXJocExmcERGdDZtUktpa3RiRm5xcytRRkFXREFBYWNRMD1cXFxcJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5lcXVhbChpZCwgJ1RzVmdOS1QwNWNkZTRRNTRzQytSRkM3blRvVHJIazlwcEdnRTVNMGpYdEU9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIGEgY2VsbCB0byBnZXQgdGhlIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhMSA9ICd0ZTZjY2tFQkFRRUFKQUFBUTRBYUZVVGdVUS9rMmkrRGRBb29pYjB3TlZSRVpRMnorOFI5V1F2dkZOcFVKQkFSeUFnSyc7XG4gICAgICBjb25zdCByYXdBZGRyZXNzMSA9ICcwOmQwYWEyNzAyODg3ZjI2ZDE3YzFiYTA1MTQ0NGRlOTgxYWFhMjIzMjg2ZDlmZGUyM2VhYzg1Zjc4YTZkMmExMjAnO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmdldFJhd1dhbGxldEFkZHJlc3NGcm9tQ2VsbChkYXRhMSksIHJhd0FkZHJlc3MxKTtcblxuICAgICAgY29uc3QgZGF0YTIgPSAndGU2Y2NrRUJBUUVBSkFBQVE1Lzc1dzAzNHFQOVQwWlhZM211TTVvdXZGbE5vTlBreTJZVXMrSGN4ZDhvdGpEa0lPUHEnO1xuICAgICAgY29uc3QgcmF3QWRkcmVzczIgPSAnLTE6ZGYzODY5YmYxNTFmZWE3YTMyYmIxYmNkNzE5Y2QxNzVlMmNhNmQwNjlmMjY1YjMwYTU5ZjBlZTYyZWY5NDViMSc7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuZ2V0UmF3V2FsbGV0QWRkcmVzc0Zyb21DZWxsKGRhdGEyKSwgcmF3QWRkcmVzczIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QWRkcmVzc0JvYycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBCT0MgZm9yIGEgZnJpZW5kbHkgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmdldEFkZHJlc3NCb2ModGVzdERhdGEuZ2V0TWVtYmVyU3RhY2tGaXh0dXJlLmZyaWVuZGx5QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgQk9DIGZvciBhIHJhdyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0JvYyh0ZXN0RGF0YS5nZXRNZW1iZXJTdGFja0ZpeHR1cmUucmF3QWRkcmVzcyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmdldE1lbWJlclN0YWNrRml4dHVyZS5ib2MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9uIHJlY292ZXIgLSBOb24tQml0R28gYW5kIFVuc2lnbmVkIFN3ZWVwIFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTsgLy8gQ3JlYXRlIGEgbmV3IHNhbmRib3ggZm9yIGVhY2ggdGVzdFxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIHNhbmRib3gucmVzdG9yZSgpOyAvLyBSZXN0b3JlIGFsbCBzdHVicyBhZnRlciBlYWNoIHRlc3RcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJlY292ZXIgZnVuZHMgZm9yIG5vbi1CaXRHbyByZWNvdmVyeScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhZTFiMjgxOGRiZWI1MmE4MjE1ZmQ1NmY1YTVmMmE5Zjk0YzA3OWNlODllNGRjM2IxY2U2ZWQ2ZTg0Y2U3MTg1NycsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdkdW1teVBhc3NwaHJhc2UnLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciBub24tQml0R28gcmVjb3ZlcnlcbiAgICAgIGNvbnN0IG1vY2tSZXN1bHQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgdGhlIHJlY292ZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBtb2NrZWQgcmVzdWx0XG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgc2FuZGJveC5zdHViKGJhc2Vjb2luLCAncmVjb3ZlcicpLnJlc29sdmVzKG1vY2tSZXN1bHQpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNlcmlhbGl6ZWRUeC5zaG91bGQuZXF1YWwoXG4gICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PSdcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHJlc3VsdC5jb2luLnNob3VsZC5lcXVhbCgndHRvbicpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7IC8vIFJlc3RvcmUgdGhlIHN0dWJiZWQgbWV0aG9kXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSByZWNvdmVyIGZ1bmRzIHVzaW5nIHNlbmRlckpldHRvbkFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJ2UzMWIxNTgwNDAwZGQ0Zjk2ZThjNjI4MWNmYjgzZTI4YWEyNWZjZjhmYjgzMTk5NmE0MDE3NmEzZTMwODc4YzgwZjM2NmZmNjQ2MzU2N2RiZWI3YWE3ZmFlZWI5ZjBmNmQxZmMwYTA5MWVjOTkxOGU4MWFkMmMzNGMzNDVmNGQwJyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgICB1c2VyS2V5OlxuICAgICAgICAgICd7XCJpdlwiOlwiLzlDYTE4MG9td0VZS2lNZ1VKOTBKUT09XCIsXCJ2XCI6MSxcIml0ZXJcIjoxMDAwMCxcImtzXCI6MjU2LFwidHNcIjo2NCxcIm1vZGVcIjpcImNjbVwiLFwiYWRhdGFcIjpcIlwiLFwiY2lwaGVyXCI6XCJhZXNcIixcInNhbHRcIjpcImlwUEZxZzZxSEhZPVwiLFwiY3RcIjpcImVGNlpzdHZxb2JMV0IvVWZqcG1zT2N6NStiZ3ZrTWhxK1poK2Y2VERJYSsrSmtQWVJxNmhyMkxoYmlkQkJDTllIQ2dhaGkzbmQvRmRzRkxRMVVrYU45dDQwbUhiVWRsU1RBNDJUaEg1Rkk5VW0xYUFDbTk2MUV1NWIwTXA3bzZVM3p1VmxhRmF5NlQrL25VV2xPS2p2Ky81TVl3ZnhBL0V6TWQ2eURpZTdxQUlyeUxDUEVJdlJ1dXNIdXB6Y0pXZk4yV0dreHc0RWhHc1NRdnM2MitQQk9DSlVlT0NUaHYySHBzc0pWOWdiNm1qNGxZVlRxdEVheTdHNlZGTmIrVDZPSURVOUhOcmR4Vis1RDF6elY1c0hOV3FEZ2hGMDN3OWFkd3hnVENQU2VaeXdaUERnQnJNL05xSEl0KzhDUGQ4NHdnZXk2MU16NThicjA4emwyaWtrc0RGNVBCOERKekVlbnM2QWJZMGdvc3F6QVBUdU9teTdJUzl2UDlsZkNTYUhEb1M2NmhEL0kweWgxYzZ0aDRnUTFkeml3eCtobkJLTmdxcGVrSno2UDBpc25CM3VyaFpJbnBjMFJ6S2g2UjJqcngraEtOci8yZG9rM2RJd2diWFdHcTdOQW0xbVNSRUVzL0NoVlZlVU1tZVU5VUZtd2hPVGJSSzhDTFlIcUFxeWRSTENleE5tV2hUT1BLeTNXcVM4eUc2V2tIcVNHYjlGR0x5QlJjbVFGSUJwaWhWOFhsNFcyZEI2QVg3SHNJMEYyZFlBQlgwZHJMaXVqMk43bU5yYVJHenhzNWpUMGx6d2pYbXk1Z215YXIyM0RxYTJlQlZPeUdkSzNETDhqWXZnWDBtSjU4L3BLa29ncnh6TXJQa0pvMmErZ1A0T1I3Y0RjTDZUeHJjd25WaVlPT0dQOU9hUVpmY0tLYUFobUpaSkd3enlXemp2eUVJTGtDa3NFU3V5K2M1M3RkTEFrdTUxajJLaVYzMlJnMHRETzNVTmp6ZTBxVGozdCtZZm1UTjFHdWlOanhGeDhkTmJYMnl4ell4QitNemVzdU5aQU11bndWSHJxSnBBaW96UnFwRTc5UjdLUkx3N3FoQmhtNVVlejYwRkJ0bUFmMGtRc0dkaUlsRXdDeVRjQll5QURsWkUrb2pEOCt4MnVpSkJCSXpkMHM3bjlaWTNhQ1l1VFZFWUdmSTlFTUdzOVd6WGNHZVR1Mnh3Mk91YlZIWWt2YUJic3dsckppaElxUkgrY2UvOSt3RGVkY2pic2JvMk1PRHNDSjNzSzlLTDZKak1XUHZoU3dSNmNNYnpEaldyRm1SeXVla21mU1RIdWhRRWRCQUsxMU40My9ab1lZREJNd0J3eGpNd3dBNGhMdUJxamVoWVEyTjBONG82ZnBiR1NBMStnMElKcWtRdmgycW44dGVZU2o2N20xdkdsRUp1ODUyVWpKWjR0ZHQ5clNqUTVUYzIzWUsrWEQya0tyWGJCN3dwcnJhYTlQUWpucnJJVDI1eVgrbDVnN1cwRWNHVGxBY3Y1LzVGQzZmNis3UjhLNVdsTEdycDNZTS8rNTcwZ0JTMnFiSWhsMkp6ZndnVHFqZnloNVpcIn0nLFxuICAgICAgICBiYWNrdXBLZXk6XG4gICAgICAgICAgJ3tcIml2XCI6XCJOWTY1Zm1lMnNNZVlkdTc3U1cvYUx3PT1cIixcInZcIjoxLFwiaXRlclwiOjEwMDAwLFwia3NcIjoyNTYsXCJ0c1wiOjY0LFwibW9kZVwiOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwiMVNFcm1vZm1WN3M9XCIsXCJjdFwiOlwiMjh6UUc3eEEyekZ6QUZ5TkpRZm5JUHZvdTEyUndWUHUzanV6bzJjSURhcmV5Zk1rSVhwMVFEYm82bVNCZnpsSmZPTGdZQW4waVFIOHVDZ25tWUNONENiSzJJZk91a01tUUhHYTRsSE1HVVhyTDFybk5Pc1Vaa2g4WU1jTU12cjdxb0NSamFLTFF2UlVXZXFHdDEvVENvUk9vSHdSODhjdFZoRUt3a2hwUW9JWTBUQmVMZHZsdUdWQjdwRkFUdEVLZ29seVFhaXpaOFlPRnZqUW45QUdoVmxPclJyalJ3ekhYcWl1N3lXOGd1TDZmMEI3WmN6dkZnTGRDVEZWTml5UVFkcjZGbzFNaTRHUy93UktiV2FrRXg3TGt0bDNrdmE4OEJYQVJlOCt1bmRUWjBIMk1ibXpNU3I1ekJZcGZoVlhUTy9heHR0a3RMMkFXcU15OGxSODVZN3RWcDMwN1ZVQThYTlkzbmVUYlR4dVNxbSt4cmxCL1IwbkdGRXZSZmlrR3NrNEtLSE9RNkhGbmVOUmRoai9rNmR4RTJWeUg5SXdRNmorTHhqbXMrcGcxeWI1NmlCbkdXTTFzVTBiZEthSkZUUlpHZGlGLy9sUWFLVVZQY0gyUmVOSnNSSmFVOGdvNWcxSEJ1T0hlTXFkbmxCN3VLMk1RS05QQ1JiM3kwWkZReDh5Z2lkT2FBRjZhaUpwejNMZXduWGhzdEQxeTlsWjB5WTlxWEltQjRsRkNyTXJtQm5IUGpFeW16bXJLK3BjaGQ0ZEJKSHRKaXF3bmd4cXBMNmwrYWE2OXhHZXlXRHNWbU1rbFpWUHdkUzVsKzVTVnlnUUdGNU0xczFJN1JmYlRXYjdXbEhGRkN2MEMxSi90cEtUM0J6aUdFZlA1VmowYXFlcWljZ21UUkZ3dmhSMUhpTm1HdkJBTkhNL1B2U3Y1K2N5Umo4RzdFSG1UZXVIZWdoTzJoOVp3b1piaWhuU215Yi9uY1NNOU1neHJTUjRYejdHMzNobmJ1amZIVjRJcEJHL3ZXVHBKVUtJMTFMZ3dyNzFVMmNWQ245V0ErVFk5Q1hzR2tmZU9RYmJYbmdvUHQ0cE9oaWtKS1FZZzlyT3ZnYVIraFpBT1NJdGs2cFdYb3pBREQ4c1NmczdSNituL3dsa0V2dVBJMWNmY2ltYkhMUTZvSDlrVGtEVS9MYk96bXRERGQ4TVlaVWJxdnB5RVM3YkZ1am13NnRjMVpJQkxEc1NXRDJyNHNpdjBLUGVWcjVXdW9KU1l3NlFSZHVBcnlPMU5EdzRTazFhbHlwZ09YeEphcGNYZ3F3aTF2OUhkUnpHMUEwSVVMRFp0eUVjSGpVQkZXM3ZZcUh4VmMvai96MmhuQUMvU2J0UmNDY1pLZ0RlclROTGJQdzNpVFFRZkxpdytMUGtlWmRPNFVVd3NJbWFQM3l3YjExMmllbGpXSm9VdHVZQVlDRW56NWs5c1AzUGZDRGRnU2I1QlJKWklhRGs3aTN2V05YVzF5ZExOZVh6UllwbXI0dnlNa0dFN2FnTC8rSTVTWmg1RVZLL0NZY0FYZ1kyTXAvVmZaV21lTWJGVlBYUzg5eExBd1duUVE9PVwifScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6ICdHaGdoamZidmRrbW4hMjM0JyxcbiAgICAgICAgc2VuZGVySmV0dG9uQWRkcmVzczogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrUHJvdmlkZXIgPSB7XG4gICAgICAgIGdldEJhbGFuY2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCcxMDAwMDAwMDAwJyksXG4gICAgICAgIGdldEVzdGltYXRlRmVlOiBzYW5kYm94LnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgICAgc291cmNlX2ZlZXM6IHtcbiAgICAgICAgICAgIGluX2Z3ZF9mZWU6IDEwMDAsXG4gICAgICAgICAgICBzdG9yYWdlX2ZlZTogMTAwMCxcbiAgICAgICAgICAgIGdhc19mZWU6IDEwMDAsXG4gICAgICAgICAgICBmd2RfZmVlOiAxMDAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBjYWxsOiBzYW5kYm94LnN0dWIoKS5jYWxsc0Zha2UoKGFkZHJlc3MsIG1ldGhvZCwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2dldF93YWxsZXRfZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGFjazogW1xuICAgICAgICAgICAgICAgIFsnbnVtJywgJzUwMDAwMDAwMDAnXSxcbiAgICAgICAgICAgICAgICBbJ251bScsICcwJ10sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YWNrOiBbXSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHNlbmQ6IHNhbmRib3guc3R1YigpLmNhbGxzRmFrZSgobWV0aG9kLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICBpZiAobWV0aG9kID09PSAncnVuR2V0TWV0aG9kJykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgIGdhc191c2VkOiAwLFxuICAgICAgICAgICAgICBzdGFjazogW1snbnVtJywgJzAnXV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3NlbmRCb2MnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb2s6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHNhbmRib3guc3R1YihUb253ZWIsICdIdHRwUHJvdmlkZXInKS5yZXR1cm5zKG1vY2tQcm92aWRlcik7XG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAnZ2V0RWRkc2FTaWduaW5nTWF0ZXJpYWwnKS5yZXNvbHZlcyh7XG4gICAgICAgIHZlcnNpb246ICd2MScsXG4gICAgICAgIHVzZXJQcnY6IEpTT04uc3RyaW5naWZ5KHsgZHVtbXk6ICd1c2VyU2lnbmluZ01hdGVyaWFsJyB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYml0Z28sICdkZWNyeXB0JykucmVzb2x2ZXMoSlNPTi5zdHJpbmdpZnkoeyBkdW1teTogJ2JhY2t1cFNpZ25pbmdNYXRlcmlhbCcgfSkpO1xuXG4gICAgICBzYW5kYm94XG4gICAgICAgIC5zdHViKEVERFNBTWV0aG9kcywgJ2dldFRTU1NpZ25hdHVyZScpXG4gICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgICAgICcxYmFhZmEwZDYyMTc0YmYwYzc4ZjMyNTYzMTg2MTNmZmM0NGI2ZGQ1NGFiMWE2M2MyMTg1MjMyZjkyZWRlOWRhJyArXG4gICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICdoZXgnXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICByZXN1bHQuc2NhbkluZGV4LnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uIGlmIHVzZXJLZXkgYW5kIGJhY2t1cEtleSBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSByZWNvdmVyeSBwYXJhbWV0ZXJzXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtcyA9IHtcbiAgICAgICAgYml0Z29LZXk6XG4gICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ1VRQkwyaWRDWFI0QVRkUXRhTmE0VnBvZmNwU3h1eElnSEg3X3NsT1pmZE9YU2FkSicsXG4gICAgICAgIGFwaUtleTogJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InLFxuICAgICAgfTtcblxuICAgICAgLy8gTW9jayB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZvciB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1Vuc2lnbmVkVHggPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeDpcbiAgICAgICAgICAndGU2Y2NrRUJBZ0VBcWdBQjRZZ0FsN1JPaExvOEFKdW9XdEd0Y0swMFB1VXBZM1lrUURqOS8yU25NdnVuTHBJRmJsODk2d2xNdjdmc1VPYytzTUh6RWw4cTN2WDVibTZub0hnaW5QSktCUnpuT3JPN3ZlSXBISUVwaVJMYkg3L2VOZHBTc1JodkwyNjBKUC9mRDB2QUlVMU5HTHRBQkRxQUFBQUFDQUFjQVFCb1FnQi9PZWlOZExlYUw3K08wNFh1dWp1Q2hTR3JSZDdabkZsMmZDZDlGWGR6QXlET0pZQ3dBQUFBQUFBQUFBQUFBQUFBQUZ3WEd0OD0nLFxuICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgIGNvaW46ICd0dG9uJyxcbiAgICAgICAgc2lnbmFibGVIZXg6ICdkZDk4ZWI1YTM3MDBjMDIwMzIzNzA5NWNhMWMwZDUyODhiYzBkNjUwYTliNTlmN2I4MWJhYzU1MmY3NjEzN2RmJyxcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6ICdtLzAnLFxuICAgICAgICBwYXJzZWRUeDoge1xuICAgICAgICAgIGlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiAnVVFCTDJpZENYUjRBVGRRdGFOYTRWcG9mY3BTeHV4SWdISDdfc2xPWmZkT1hTYWRKJyxcbiAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6ICc5OTkwMDAwMDAnLFxuICAgICAgICAgICAgICBjb2luTmFtZTogJ3R0b24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNwZW5kQW1vdW50OiA5OTkwMDAwMDAsXG4gICAgICAgICAgdHlwZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICBmZWU6IDEwMDAwMDAsXG4gICAgICAgICAgZmVlU3RyaW5nOiAnMTAwMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAgICAgJzFiYWFmYTBkNjIxNzRiZjBjNzhmMzI1NjMxODYxM2ZmYzQ0YjZkZDU0YWIxYTYzYzIxODUyMzJmOTJlZGU5ZGFlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3QgPSB7XG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IG1vY2tVbnNpZ25lZFR4LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB3YWxsZXRDb2luOiAndG9uJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tUeFJlcXVlc3RzID0ge1xuICAgICAgICB0eFJlcXVlc3RzOiBbbW9ja1R4UmVxdWVzdF0sXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIHRoZSByZWNvdmVyIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbW9ja2VkIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuXG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4sICdyZWNvdmVyJykucmVzb2x2ZXMobW9ja1R4UmVxdWVzdHMpO1xuXG4gICAgICAvLyBDYWxsIHRoZSByZWNvdmVyIGZ1bmN0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHJlY292ZXJ5UGFyYW1zKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3VsdFxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFJlcXVlc3RzJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25zJyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3Vuc2lnbmVkVHgnKTtcbiAgICAgIHJlc3VsdC50eFJlcXVlc3RzWzBdLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNob3VsZC5lcXVhbChtb2NrVW5zaWduZWRUeCk7XG4gICAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGFrZSBPVkMgb3V0cHV0IGFuZCBnZW5lcmF0ZSBhIHNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmluZSB0aGUgcGFyYW1ldGVycyAobW9jayBPVkMgcmVzcG9uc2UpXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIG92Y1Jlc3BvbnNlOiB7XG4gICAgICAgICAgc2VyaWFsaXplZFR4OlxuICAgICAgICAgICAgJ3RlNmNja0VCQWdFQXFnQUI0WWdBbDdST2hMbzhBSnVvV3RHdGNLMDBQdVVwWTNZa1FEajkvMlNuTXZ1bkxwSUZibDg5NndsTXY3ZnNVT2Mrc01IekVsOHEzdlg1Ym02bm9IZ2luUEpLQlJ6bk9yTzd2ZUlwSElFcGlSTGJINy9lTmRwU3NSaHZMMjYwSlAvZkQwdkFJVTFOR0x0QUJEcUFBQUFBQ0FBY0FRQm9RZ0IvT2VpTmRMZWFMNytPMDRYdXVqdUNoU0dyUmQ3Wm5GbDJmQ2Q5RlhkekF5RE9KWUN3QUFBQUFBQUFBQUFBQUFBQUFGd1hHdDg9JyxcbiAgICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgICAgbGFzdFNjYW5JbmRleDogMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vY2sgdGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgdGhlIHNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1NpZ25lZFN3ZWVwVHhuID0ge1xuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXJpYWxpemVkVHg6XG4gICAgICAgICAgICAgICd0ZTZjY2tFQkFnRUFxZ0FCNFlnQWw3Uk9oTG84QUp1b1d0R3RjSzAwUHVVcFkzWWtRRGo5LzJTbk12dW5McElGYmw4OTZ3bE12N2ZzVU9jK3NNSHpFbDhxM3ZYNWJtNm5vSGdpblBKS0JSem5Pck83dmVJcEhJRXBpUkxiSDcvZU5kcFNzUmh2TDI2MEpQL2ZEMHZBSVUxTkdMdEFCRHFBQUFBQUNBQWNBUUJvUWdCL09laU5kTGVhTDcrTzA0WHV1anVDaFNHclJkN1puRmwyZkNkOUZYZHpBeURPSllDd0FBQUFBQUFBQUFBQUFBQUFBRndYR3Q4PScsXG4gICAgICAgICAgICBzY2FuSW5kZXg6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbGFzdFNjYW5JbmRleDogMCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgdGhlIGNyZWF0ZUJyb2FkY2FzdGFibGVTd2VlcFRyYW5zYWN0aW9uIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbW9ja2VkIHJlc3VsdFxuICAgICAgc2FuZGJveC5zdHViKGJhc2Vjb2luLCAnY3JlYXRlQnJvYWRjYXN0YWJsZVN3ZWVwVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhtb2NrU2lnbmVkU3dlZXBUeG4pO1xuXG4gICAgICAvLyBDYWxsIHRoZSBjcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbiBmdW5jdGlvblxuICAgICAgY29uc3QgcmVjb3ZlcnlUeG4gPSBhd2FpdCBiYXNlY29pbi5jcmVhdGVCcm9hZGNhc3RhYmxlU3dlZXBUcmFuc2FjdGlvbihwYXJhbXMpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcmVzdWx0XG4gICAgICByZWNvdmVyeVR4bi50cmFuc2FjdGlvbnNbMF0uc2VyaWFsaXplZFR4LnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3RlNmNja0VCQWdFQXFnQUI0WWdBbDdST2hMbzhBSnVvV3RHdGNLMDBQdVVwWTNZa1FEajkvMlNuTXZ1bkxwSUZibDg5NndsTXY3ZnNVT2Mrc01IekVsOHEzdlg1Ym02bm9IZ2luUEpLQlJ6bk9yTzd2ZUlwSElFcGlSTGJINy9lTmRwU3NSaHZMMjYwSlAvZkQwdkFJVTFOR0x0QUJEcUFBQUFBQ0FBY0FRQm9RZ0IvT2VpTmRMZWFMNytPMDRYdXVqdUNoU0dyUmQ3Wm5GbDJmQ2Q5RlhkekF5RE9KWUN3QUFBQUFBQUFBQUFBQUFBQUFGd1hHdDg9J1xuICAgICAgKTtcbiAgICAgIHJlY292ZXJ5VHhuLnRyYW5zYWN0aW9uc1swXS5zY2FuSW5kZXguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgcmVjb3ZlcnlUeG4ubGFzdFNjYW5JbmRleC5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTVBDdjIgc2lnbmVkIHJlY292ZXJ5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0LXBhc3NwaHJhc2UtbXBjdjInO1xuICAgICAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9ICdVUUJMMmlkQ1hSNEFUZFF0YU5hNFZwb2ZjcFN4dXhJZ0hIN19zbE9aZmRPWFNhZEonO1xuICAgICAgY29uc3QgYXBpS2V5ID0gJ2RiMjU1NDY0MWM2MWU2MGE5NzljYzZjMDA1M2YyZWM5MWRhOWIxM2U3MWQyODc3NjhjOTNjMmZiNTU2YmU1M2InO1xuXG4gICAgICBsZXQgbXBjVjJVc2VyS2V5OiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJCYWNrdXBLZXk6IHN0cmluZztcbiAgICAgIGxldCBtcGNWMkNvbW1vbktleUNoYWluOiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJXYWxsZXRBZGRyZXNzOiBzdHJpbmc7XG4gICAgICBsZXQgbXBjVjJSZWNvdmVyUGFyYW1zOiBNUENSZWNvdmVyeU9wdGlvbnMgJiB7IGFwaUtleTogc3RyaW5nIH07XG5cbiAgICAgIGxldCBtb2NrUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0QmFsYW5jZTogc2lub24uU2lub25TdHViO1xuICAgICAgICBnZXRFc3RpbWF0ZUZlZTogc2lub24uU2lub25TdHViO1xuICAgICAgICBjYWxsOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgICAgIHNlbmQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICAgIH07XG5cbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IFt1c2VyRGtnLCBiYWNrdXBEa2ddID0gYXdhaXQgTVBTVXRpbC5nZW5lcmF0ZUVkRHNhREtHS2V5U2hhcmVzKCk7XG4gICAgICAgIG1wY1YyQ29tbW9uS2V5Q2hhaW4gPSB1c2VyRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgICAgIG1wY1YyVXNlcktleSA9IGF3YWl0IGVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICBtcGNWMkJhY2t1cEtleSA9IGF3YWl0IGVuY3J5cHQod2FsbGV0UGFzc3BocmFzZSwgYmFja3VwRGtnLmdldFJlZHVjZWRLZXlTaGFyZSgpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG5cbiAgICAgICAgY29uc3QgbXBjID0gYXdhaXQgRUREU0FNZXRob2RzLmdldEluaXRpYWxpemVkTXBjSW5zdGFuY2UoKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gbXBjLmRlcml2ZVVuaGFyZGVuZWQobXBjVjJDb21tb25LZXlDaGFpbiwgJ20vMCcpLnNsaWNlKDAsIDY0KTtcbiAgICAgICAgbXBjVjJXYWxsZXRBZGRyZXNzID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoYWNjb3VudElkKTtcblxuICAgICAgICBtcGNWMlJlY292ZXJQYXJhbXMgPSB7XG4gICAgICAgICAgdXNlcktleTogbXBjVjJVc2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleTogbXBjVjJCYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6IG1wY1YyQ29tbW9uS2V5Q2hhaW4sXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGFwaUtleSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgICAgIGdldEJhbGFuY2U6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKCcxMDAwMDAwMDAwJyksXG4gICAgICAgICAgZ2V0RXN0aW1hdGVGZWU6IHNhbmRib3guc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgICAgIHNvdXJjZV9mZWVzOiB7IGluX2Z3ZF9mZWU6IDEwMDAsIHN0b3JhZ2VfZmVlOiAxMDAwLCBnYXNfZmVlOiAxMDAwLCBmd2RfZmVlOiAxMDAwIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2FsbDogc2FuZGJveC5zdHViKCksXG4gICAgICAgICAgc2VuZDogc2FuZGJveC5zdHViKCkuY2FsbHNGYWtlKChtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3J1bkdldE1ldGhvZCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGdhc191c2VkOiAwLCBzdGFjazogW1snbnVtJywgJzAnXV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBzYW5kYm94LnN0dWIoVG9ud2ViLCAnSHR0cFByb3ZpZGVyJykucmV0dXJucyhtb2NrUHJvdmlkZXIgYXMgYW55KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlY292ZXIgbmF0aXZlIFRPTiB1c2luZyBNUEN2MiBzaWduaW5nIG1hdGVyaWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBnZXRUU1NTaWduYXR1cmVTcHkgPSBzYW5kYm94LnNweShFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpKSBhcyBNUENUeDtcblxuICAgICAgICByZXN1bHQuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQuc2NhbkluZGV4LCAwKTtcbiAgICAgICAgKHJlc3VsdC5zZXJpYWxpemVkVHggYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZFdpdGgobW9ja1Byb3ZpZGVyLmdldEJhbGFuY2UsIG1wY1YyV2FsbGV0QWRkcmVzcyk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0Lm5vdENhbGxlZChnZXRUU1NTaWduYXR1cmVTcHkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVjb3ZlciBqZXR0b24gdXNpbmcgTVBDdjIgc2lnbmluZyBtYXRlcmlhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1Byb3ZpZGVyLmNhbGwuY2FsbHNGYWtlKChhZGRyZXNzOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2dldF93YWxsZXRfZGF0YScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGFjazogW1xuICAgICAgICAgICAgICAgIFsnbnVtJywgJzUwMDAwMDAwMDAnXSxcbiAgICAgICAgICAgICAgICBbJ251bScsICcwJ10sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgICAgWydjZWxsJywgeyBieXRlczogJycgfV0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YWNrOiBbXSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0VFNTU2lnbmF0dXJlU3B5ID0gc2FuZGJveC5zcHkoRUREU0FNZXRob2RzLCAnZ2V0VFNTU2lnbmF0dXJlJyk7XG5cbiAgICAgICAgY29uc3QgamV0dG9uUGFyYW1zID0ge1xuICAgICAgICAgIC4uLm1wY1YyUmVjb3ZlclBhcmFtcyxcbiAgICAgICAgICBzZW5kZXJKZXR0b25BZGRyZXNzOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCBiYXNlY29pbi5yZWNvdmVyKGpldHRvblBhcmFtcykpIGFzIE1QQ1R4O1xuXG4gICAgICAgIHJlc3VsdC5zaG91bGQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuaGFzT3duUHJvcGVydHkoJ3NlcmlhbGl6ZWRUeCcpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzY2FuSW5kZXgnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdC5zY2FuSW5kZXgsIDApO1xuICAgICAgICAocmVzdWx0LnNlcmlhbGl6ZWRUeCBhcyBzdHJpbmcpLnNob3VsZC5iZS5hLlN0cmluZygpLmFuZC5ub3QuYmUuZW1wdHkoKTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQuY2FsbGVkV2l0aChtb2NrUHJvdmlkZXIuZ2V0QmFsYW5jZSwgbXBjVjJXYWxsZXRBZGRyZXNzKTtcbiAgICAgICAgc2FuZGJveC5hc3NlcnQubm90Q2FsbGVkKGdldFRTU1NpZ25hdHVyZVNweSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB1c2UgTVBDdjEgcGF0aCB3aGVuIHNpZ25pbmcgbWF0ZXJpYWwgaXMgTVBDdjEgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAnZ2V0RWRkc2FTaWduaW5nTWF0ZXJpYWwnKS5yZXNvbHZlcyh7XG4gICAgICAgICAgdmVyc2lvbjogJ3YxJyxcbiAgICAgICAgICB1c2VyUHJ2OiBKU09OLnN0cmluZ2lmeSh7IHVTaGFyZToge30sIGJpdGdvWVNoYXJlOiB7fSB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2V0VFNTU2lnbmF0dXJlU3R1YiA9IHNhbmRib3hcbiAgICAgICAgICAuc3R1YihFRERTQU1ldGhvZHMsICdnZXRUU1NTaWduYXR1cmUnKVxuICAgICAgICAgIC5yZXNvbHZlcyhcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgICAnMWJhYWZhMGQ2MjE3NGJmMGM3OGYzMjU2MzE4NjEzZmZjNDRiNmRkNTRhYjFhNjNjMjE4NTIzMmY5MmVkZTlkYScgK1xuICAgICAgICAgICAgICAgICdlMWIyODE4ZGJlYjUyYTgyMTVmZDU2ZjVhNWYyYTlmOTRjMDc5Y2U4OWU0ZGMzYjFjZTZlZDZlODRjZTcxODU3JyxcbiAgICAgICAgICAgICAgJ2hleCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgIHNhbmRib3guc3R1YihiaXRnbywgJ2RlY3J5cHQnKS5yZXNvbHZlcyhKU09OLnN0cmluZ2lmeSh7IGJTaGFyZToge30sIHlTaGFyZXM6IHt9IH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihtcGNWMlJlY292ZXJQYXJhbXMpKSBhcyBNUENUeDtcblxuICAgICAgICByZXN1bHQuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmhhc093blByb3BlcnR5KCdzZXJpYWxpemVkVHgnKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5oYXNPd25Qcm9wZXJ0eSgnc2NhbkluZGV4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQuc2NhbkluZGV4LCAwKTtcbiAgICAgICAgKHJlc3VsdC5zZXJpYWxpemVkVHggYXMgc3RyaW5nKS5zaG91bGQuYmUuYS5TdHJpbmcoKS5hbmQubm90LmJlLmVtcHR5KCk7XG4gICAgICAgIHNhbmRib3guYXNzZXJ0LmNhbGxlZE9uY2UoZ2V0VFNTU2lnbmF0dXJlU3R1Yik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGNvbW1vbktleUNoYWluIGZyb20gTVBDdjIga2V5Y2FyZCBkb2VzIG5vdCBtYXRjaCBiaXRnb0tleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbWlzbWF0Y2hlZEJpdGdvS2V5ID0gbXBjVjJDb21tb25LZXlDaGFpbi5zbGljZSgwLCAtOCkgKyAnMDAwMDAwMDAnO1xuICAgICAgICBjb25zdCBtaXNtYXRjaGVkUGFyYW1zID0ge1xuICAgICAgICAgIC4uLm1wY1YyUmVjb3ZlclBhcmFtcyxcbiAgICAgICAgICBiaXRnb0tleTogbWlzbWF0Y2hlZEJpdGdvS2V5LFxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLnJlY292ZXIobWlzbWF0Y2hlZFBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRWREU0EgTVBDdjIgcmVjb3Zlcnk6IGNvbW1vbktleUNoYWluIGZyb20ga2V5Y2FyZCBkb2VzIG5vdCBtYXRjaCBiaXRnb0tleScpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=