@the-trybe/formula-engine 1.1.1 → 1.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.
package/dist/functions.js CHANGED
@@ -697,6 +697,149 @@ function createBuiltInFunctions(decimalUtils) {
697
697
  return arr.flat(depth);
698
698
  },
699
699
  };
700
+ // ============================================================================
701
+ // Table/Lookup Functions
702
+ // ============================================================================
703
+ const LOOKUP = {
704
+ name: 'LOOKUP',
705
+ minArgs: 3,
706
+ maxArgs: 3,
707
+ returnType: 'any',
708
+ description: 'Multi-criteria exact-match lookup on array of objects',
709
+ implementation: (args) => {
710
+ const table = args[0];
711
+ const criteria = args[1];
712
+ const returnField = args[2];
713
+ if (table === null || table === undefined) {
714
+ return 0;
715
+ }
716
+ if (!Array.isArray(table)) {
717
+ throw new errors_1.TypeMismatchError('array', typeof table, 'LOOKUP');
718
+ }
719
+ if (typeof criteria !== 'object' || criteria === null || Array.isArray(criteria)) {
720
+ throw new errors_1.TypeMismatchError('object', typeof criteria, 'LOOKUP criteria');
721
+ }
722
+ if (typeof returnField !== 'string') {
723
+ throw new errors_1.TypeMismatchError('string', typeof returnField, 'LOOKUP returnField');
724
+ }
725
+ const criteriaObj = criteria;
726
+ for (const row of table) {
727
+ if (typeof row !== 'object' || row === null)
728
+ continue;
729
+ const rowObj = row;
730
+ let match = true;
731
+ for (const [key, value] of Object.entries(criteriaObj)) {
732
+ const rowVal = rowObj[key];
733
+ if (rowVal instanceof decimal_utils_1.Decimal && value instanceof decimal_utils_1.Decimal) {
734
+ if (!rowVal.equals(value)) {
735
+ match = false;
736
+ break;
737
+ }
738
+ }
739
+ else if (rowVal instanceof decimal_utils_1.Decimal) {
740
+ if (typeof value === 'number' && rowVal.toNumber() === value)
741
+ continue;
742
+ if (typeof value === 'string' && rowVal.toString() === value)
743
+ continue;
744
+ match = false;
745
+ break;
746
+ }
747
+ else if (value instanceof decimal_utils_1.Decimal) {
748
+ if (typeof rowVal === 'number' && value.toNumber() === rowVal)
749
+ continue;
750
+ if (typeof rowVal === 'string' && value.toString() === rowVal)
751
+ continue;
752
+ match = false;
753
+ break;
754
+ }
755
+ else if (rowVal !== value) {
756
+ match = false;
757
+ break;
758
+ }
759
+ }
760
+ if (match) {
761
+ const result = rowObj[returnField];
762
+ return result !== undefined ? result : 0;
763
+ }
764
+ }
765
+ return 0;
766
+ },
767
+ };
768
+ const RANGE = {
769
+ name: 'RANGE',
770
+ minArgs: 5,
771
+ maxArgs: 5,
772
+ returnType: 'any',
773
+ description: 'Numeric band/tier resolution: min <= inputValue < max',
774
+ implementation: (args) => {
775
+ const table = args[0];
776
+ const inputValue = args[1];
777
+ const minField = args[2];
778
+ const maxField = args[3];
779
+ const returnField = args[4];
780
+ if (table === null || table === undefined) {
781
+ return 0;
782
+ }
783
+ if (!Array.isArray(table)) {
784
+ throw new errors_1.TypeMismatchError('array', typeof table, 'RANGE');
785
+ }
786
+ if (typeof minField !== 'string') {
787
+ throw new errors_1.TypeMismatchError('string', typeof minField, 'RANGE minField');
788
+ }
789
+ if (typeof maxField !== 'string') {
790
+ throw new errors_1.TypeMismatchError('string', typeof maxField, 'RANGE maxField');
791
+ }
792
+ if (typeof returnField !== 'string') {
793
+ throw new errors_1.TypeMismatchError('string', typeof returnField, 'RANGE returnField');
794
+ }
795
+ let inputNum;
796
+ if (inputValue instanceof decimal_utils_1.Decimal) {
797
+ inputNum = inputValue.toNumber();
798
+ }
799
+ else if (typeof inputValue === 'number') {
800
+ inputNum = inputValue;
801
+ }
802
+ else {
803
+ throw new errors_1.TypeMismatchError('number', typeof inputValue, 'RANGE inputValue');
804
+ }
805
+ for (const row of table) {
806
+ if (typeof row !== 'object' || row === null)
807
+ continue;
808
+ const rowObj = row;
809
+ const minVal = rowObj[minField];
810
+ const maxVal = rowObj[maxField];
811
+ let minNum;
812
+ if (minVal instanceof decimal_utils_1.Decimal) {
813
+ minNum = minVal.toNumber();
814
+ }
815
+ else if (typeof minVal === 'number') {
816
+ minNum = minVal;
817
+ }
818
+ else {
819
+ continue;
820
+ }
821
+ if (inputNum < minNum)
822
+ continue;
823
+ if (maxVal !== null && maxVal !== undefined) {
824
+ let maxNum;
825
+ if (maxVal instanceof decimal_utils_1.Decimal) {
826
+ maxNum = maxVal.toNumber();
827
+ }
828
+ else if (typeof maxVal === 'number') {
829
+ maxNum = maxVal;
830
+ }
831
+ else {
832
+ continue;
833
+ }
834
+ if (inputNum >= maxNum)
835
+ continue;
836
+ }
837
+ const result = rowObj[returnField];
838
+ return result !== undefined ? result : 0;
839
+ }
840
+ return 0;
841
+ },
842
+ };
700
843
  // Register all functions
701
844
  const allFunctions = [
702
845
  // Math
@@ -711,10 +854,12 @@ function createBuiltInFunctions(decimalUtils) {
711
854
  NUMBER, STRING, BOOLEAN, TYPEOF,
712
855
  // Array
713
856
  FIRST, LAST, REVERSE, SLICE, INCLUDES, INDEXOF, FLATTEN,
857
+ // Table/Lookup
858
+ LOOKUP, RANGE,
714
859
  ];
715
860
  for (const fn of allFunctions) {
716
861
  functions.set(fn.name, fn);
717
862
  }
718
863
  return functions;
719
864
  }
720
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTJCQSx3REFzdUJDO0FBaHdCRCxtREFBd0Q7QUFDeEQscUNBQWlFO0FBSWpFLDBEQUEwRDtBQUMxRCxTQUFTLFNBQVMsQ0FBQyxLQUFjO0lBQy9CLE9BQU8sS0FBSyxZQUFZLHVCQUFPLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQy9ELENBQUM7QUFFRCwrQkFBK0I7QUFDL0IsU0FBUyxTQUFTLENBQUMsS0FBYyxFQUFFLEtBQW1CO0lBQ3BELElBQUksS0FBSyxZQUFZLHVCQUFPO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxNQUFNLElBQUksMEJBQWlCLENBQUMsUUFBUSxFQUFFLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLElBQUksS0FBSyxZQUFZLHVCQUFPO1FBQUUsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsTUFBTSxJQUFJLDBCQUFpQixDQUFDLFFBQVEsRUFBRSxPQUFPLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFnQixzQkFB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QU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtRQUMvQixRQUFRO1FBQ1IsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTztLQUN4RCxDQUFDO0lBRUYsS0FBSyxNQUFNLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdW5jdGlvbkRlZmluaXRpb24sIEV2YWx1YXRpb25Db250ZXh0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBEZWNpbWFsVXRpbHMsIERlY2ltYWwgfSBmcm9tICcuL2RlY2ltYWwtdXRpbHMnO1xuaW1wb3J0IHsgQXJndW1lbnRDb3VudEVycm9yLCBUeXBlTWlzbWF0Y2hFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxudHlwZSBGbkltcGwgPSBGdW5jdGlvbkRlZmluaXRpb25bJ2ltcGxlbWVudGF0aW9uJ107XG5cbi8vIEhlbHBlciB0byBjaGVjayBpZiB2YWx1ZSBpcyBudW1lcmljIChEZWNpbWFsIG9yIG51bWJlcilcbmZ1bmN0aW9uIGlzTnVtZXJpYyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIERlY2ltYWwgfCBudW1iZXIge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEZWNpbWFsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbi8vIEhlbHBlciB0byBjb252ZXJ0IHRvIERlY2ltYWxcbmZ1bmN0aW9uIHRvRGVjaW1hbCh2YWx1ZTogdW5rbm93biwgdXRpbHM6IERlY2ltYWxVdGlscyk6IERlY2ltYWwge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEZWNpbWFsKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdXRpbHMuZnJvbSh2YWx1ZSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdXRpbHMuZnJvbSh2YWx1ZSk7XG4gIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignbnVtYmVyJywgdHlwZW9mIHZhbHVlLCAnbnVtZXJpYyBjb252ZXJzaW9uJyk7XG59XG5cbi8vIEhlbHBlciB0byBjb252ZXJ0IHZhbHVlIHRvIG51bWJlciAoZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBuYXRpdmUgbnVtYmVycylcbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGVjaW1hbCkgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignbnVtYmVyJywgdHlwZW9mIHZhbHVlLCAnbnVtZXJpYyBjb252ZXJzaW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsdEluRnVuY3Rpb25zKGRlY2ltYWxVdGlsczogRGVjaW1hbFV0aWxzKTogTWFwPHN0cmluZywgRnVuY3Rpb25EZWZpbml0aW9uPiB7XG4gIGNvbnN0IGZ1bmN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBGdW5jdGlvbkRlZmluaXRpb24+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNYXRoIEZ1bmN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgQUJTOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0FCUycsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Fic29sdXRlIHZhbHVlJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuYWJzKHRvRGVjaW1hbChhcmdzWzBdLCBkZWNpbWFsVXRpbHMpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFJPVU5EOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1JPVU5EJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDMsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnUm91bmQgdG8gcHJlY2lzaW9uJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscyk7XG4gICAgICBjb25zdCBwcmVjaXNpb24gPSBhcmdzLmxlbmd0aCA+IDEgPyB0b051bWJlcihhcmdzWzFdKSA6IDA7XG4gICAgICBjb25zdCBtb2RlID0gYXJncy5sZW5ndGggPiAyID8gU3RyaW5nKGFyZ3NbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5yb3VuZCh2YWx1ZSwgcHJlY2lzaW9uLCBtb2RlIGFzIGFueSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBGTE9PUjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdGTE9PUicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ1JvdW5kIGRvd24nLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKTtcbiAgICAgIGNvbnN0IHNjYWxlID0gYXJncy5sZW5ndGggPiAxID8gdG9OdW1iZXIoYXJnc1sxXSkgOiAwO1xuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5mbG9vcih2YWx1ZSwgc2NhbGUpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgQ0VJTDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdDRUlMJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnUm91bmQgdXAnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKTtcbiAgICAgIGNvbnN0IHNjYWxlID0gYXJncy5sZW5ndGggPiAxID8gdG9OdW1iZXIoYXJnc1sxXSkgOiAwO1xuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5jZWlsKHZhbHVlLCBzY2FsZSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBUUlVOQ0FURTogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdUUlVOQ0FURScsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RydW5jYXRlIHRvIHByZWNpc2lvbicsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRvRGVjaW1hbChhcmdzWzBdLCBkZWNpbWFsVXRpbHMpO1xuICAgICAgY29uc3Qgc2NhbGUgPSBhcmdzLmxlbmd0aCA+IDEgPyB0b051bWJlcihhcmdzWzFdKSA6IDA7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnRydW5jYXRlKHZhbHVlLCBzY2FsZSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBNSU46IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTUlOJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IC0xLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ01pbmltdW0gdmFsdWUnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5taW4oLi4uYXJnc1swXS5tYXAodiA9PiB0b0RlY2ltYWwodiwgZGVjaW1hbFV0aWxzKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5taW4oLi4uYXJncy5tYXAodiA9PiB0b0RlY2ltYWwodiwgZGVjaW1hbFV0aWxzKSkpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTUFYOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ01BWCcsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAtMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIHZhbHVlJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMubWF4KC4uLmFyZ3NbMF0ubWFwKHYgPT4gdG9EZWNpbWFsKHYsIGRlY2ltYWxVdGlscykpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMubWF4KC4uLmFyZ3MubWFwKHYgPT4gdG9EZWNpbWFsKHYsIGRlY2ltYWxVdGlscykpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFBPVzogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdQT1cnLFxuICAgIG1pbkFyZ3M6IDIsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdQb3dlcicsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBiYXNlID0gdG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscyk7XG4gICAgICBjb25zdCBleHAgPSB0b051bWJlcihhcmdzWzFdKTtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMucG93ZXIoYmFzZSwgZXhwKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFNRUlQ6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnU1FSVCcsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NxdWFyZSByb290JyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuc3FydCh0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBMT0c6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTE9HJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnTmF0dXJhbCBsb2dhcml0aG0nLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5sbih0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBMT0cxMDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdMT0cxMCcsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Jhc2UtMTAgbG9nYXJpdGhtJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMubG9nMTAodG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscykpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgU0lHTjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdTSUdOJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ251bWJlcicsXG4gICAgZGVzY3JpcHRpb246ICdTaWduIG9mIG51bWJlciAoLTEsIDAsIG9yIDEpJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuc2lnbih0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBERUNJTUFMOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0RFQ0lNQUwnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdDb252ZXJ0IHRvIERlY2ltYWwnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKTtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3Qgc2NhbGUgPSB0b051bWJlcihhcmdzWzFdKTtcbiAgICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5yb3VuZCh2YWx1ZSwgc2NhbGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgU0NBTEU6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnU0NBTEUnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnbnVtYmVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dldCBzY2FsZSAoZGVjaW1hbCBwbGFjZXMpJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuc2NhbGUodG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscykpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgUFJFQ0lTSU9OOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1BSRUNJU0lPTicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdudW1iZXInLFxuICAgIGRlc2NyaXB0aW9uOiAnR2V0IHByZWNpc2lvbiAoc2lnbmlmaWNhbnQgZGlnaXRzKScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnByZWNpc2lvbih0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBESVZJREU6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnRElWSURFJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDQsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGl2aXNpb24gd2l0aCBzY2FsZSBhbmQgcm91bmRpbmcnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYSA9IHRvRGVjaW1hbChhcmdzWzBdLCBkZWNpbWFsVXRpbHMpO1xuICAgICAgY29uc3QgYiA9IHRvRGVjaW1hbChhcmdzWzFdLCBkZWNpbWFsVXRpbHMpO1xuICAgICAgY29uc3Qgc2NhbGUgPSBhcmdzLmxlbmd0aCA+IDIgPyB0b051bWJlcihhcmdzWzJdKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG1vZGUgPSBhcmdzLmxlbmd0aCA+IDMgPyBTdHJpbmcoYXJnc1szXSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLmRpdmlkZShhLCBiLCBzY2FsZSwgbW9kZSBhcyBhbnkpO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBZ2dyZWdhdGlvbiBGdW5jdGlvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IFNVTTogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdTVU0nLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdTdW0gb2YgYXJyYXkgdmFsdWVzJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MsIGNvbnRleHQsIGVuZ2luZSkgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnU1VNJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW1wbGUgc3VtXG4gICAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuc3VtKGFyci5tYXAodiA9PiB0b0RlY2ltYWwodiwgZGVjaW1hbFV0aWxzKSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdW0gd2l0aCBleHByZXNzaW9uIC0gYXJnc1sxXSBzaG91bGQgYmUgZXZhbHVhdGVkIGZvciBlYWNoIGl0ZW1cbiAgICAgIC8vIFRoaXMgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYnkgdGhlIGV2YWx1YXRvclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTVU0gd2l0aCBleHByZXNzaW9uIG11c3QgYmUgaGFuZGxlZCBieSBldmFsdWF0b3InKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IEFWRzogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdBVkcnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdBdmVyYWdlIG9mIGFycmF5IHZhbHVlcycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdhcnJheScsIHR5cGVvZiBhcnIsICdBVkcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuYXZnKGFyci5tYXAodiA9PiB0b0RlY2ltYWwodiwgZGVjaW1hbFV0aWxzKSkpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgQ09VTlQ6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnQ09VTlQnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnbnVtYmVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvdW50IG9mIGFycmF5IGVsZW1lbnRzJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ2FycmF5JywgdHlwZW9mIGFyciwgJ0NPVU5UJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyLmxlbmd0aDtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFBST0RVQ1Q6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnUFJPRFVDVCcsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Byb2R1Y3Qgb2YgYXJyYXkgdmFsdWVzJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ2FycmF5JywgdHlwZW9mIGFyciwgJ1BST0RVQ1QnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMucHJvZHVjdChhcnIubWFwKHYgPT4gdG9EZWNpbWFsKHYsIGRlY2ltYWxVdGlscykpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IEZJTFRFUjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdGSUxURVInLFxuICAgIG1pbkFyZ3M6IDIsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnYXJyYXknLFxuICAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGFycmF5IGJ5IGNvbmRpdGlvbicsXG4gICAgaW1wbGVtZW50YXRpb246ICgpID0+IHtcbiAgICAgIC8vIFRoaXMgbXVzdCBiZSBoYW5kbGVkIGJ5IHRoZSBldmFsdWF0b3IgdG8gZXZhbHVhdGUgdGhlIGNvbmRpdGlvbiBleHByZXNzaW9uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZJTFRFUiBtdXN0IGJlIGhhbmRsZWQgYnkgZXZhbHVhdG9yJyk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBNQVA6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTUFQJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2FycmF5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1RyYW5zZm9ybSBhcnJheSBlbGVtZW50cycsXG4gICAgaW1wbGVtZW50YXRpb246ICgpID0+IHtcbiAgICAgIC8vIFRoaXMgbXVzdCBiZSBoYW5kbGVkIGJ5IHRoZSBldmFsdWF0b3IgdG8gZXZhbHVhdGUgdGhlIHRyYW5zZm9ybSBleHByZXNzaW9uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01BUCBtdXN0IGJlIGhhbmRsZWQgYnkgZXZhbHVhdG9yJyk7XG4gICAgfSxcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFN0cmluZyBGdW5jdGlvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IExFTjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdMRU4nLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnbnVtYmVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ1N0cmluZyBsZW5ndGgnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGFyZ3NbMF0pO1xuICAgICAgcmV0dXJuIHN0ci5sZW5ndGg7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBVUFBFUjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdVUFBFUicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdzdHJpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiAnVXBwZXJjYXNlIHN0cmluZycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gU3RyaW5nKGFyZ3NbMF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBMT1dFUjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdMT1dFUicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdzdHJpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiAnTG93ZXJjYXNlIHN0cmluZycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gU3RyaW5nKGFyZ3NbMF0pLnRvTG93ZXJDYXNlKCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBUUklNOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1RSSU0nLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnc3RyaW5nJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RyaW0gd2hpdGVzcGFjZScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gU3RyaW5nKGFyZ3NbMF0pLnRyaW0oKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IENPTkNBVDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdDT05DQVQnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogLTEsXG4gICAgcmV0dXJuVHlwZTogJ3N0cmluZycsXG4gICAgZGVzY3JpcHRpb246ICdDb25jYXRlbmF0ZSBzdHJpbmdzJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBhcmdzLm1hcChhID0+IFN0cmluZyhhKSkuam9pbignJyk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBTVUJTVFI6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnU1VCU1RSJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDMsXG4gICAgcmV0dXJuVHlwZTogJ3N0cmluZycsXG4gICAgZGVzY3JpcHRpb246ICdTdWJzdHJpbmcnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGFyZ3NbMF0pO1xuICAgICAgY29uc3Qgc3RhcnQgPSB0b051bWJlcihhcmdzWzFdKTtcbiAgICAgIGNvbnN0IGxlbiA9IGFyZ3MubGVuZ3RoID4gMiA/IHRvTnVtYmVyKGFyZ3NbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGxlbiAhPT0gdW5kZWZpbmVkID8gc3RyLnN1YnN0cihzdGFydCwgbGVuKSA6IHN0ci5zdWJzdHIoc3RhcnQpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgUkVQTEFDRTogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdSRVBMQUNFJyxcbiAgICBtaW5BcmdzOiAzLFxuICAgIG1heEFyZ3M6IDMsXG4gICAgcmV0dXJuVHlwZTogJ3N0cmluZycsXG4gICAgZGVzY3JpcHRpb246ICdSZXBsYWNlIHN1YnN0cmluZycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoYXJnc1swXSk7XG4gICAgICBjb25zdCBzZWFyY2ggPSBTdHJpbmcoYXJnc1sxXSk7XG4gICAgICBjb25zdCByZXBsYWNlbWVudCA9IFN0cmluZyhhcmdzWzJdKTtcbiAgICAgIHJldHVybiBzdHIuc3BsaXQoc2VhcmNoKS5qb2luKHJlcGxhY2VtZW50KTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IENPTlRBSU5TOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0NPTlRBSU5TJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgc3RyaW5nIGNvbnRhaW5zIHN1YnN0cmluZycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoYXJnc1swXSk7XG4gICAgICBjb25zdCBzZWFyY2ggPSBTdHJpbmcoYXJnc1sxXSk7XG4gICAgICByZXR1cm4gc3RyLmluY2x1ZGVzKHNlYXJjaCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBTVEFSVFNXSVRIOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1NUQVJUU1dJVEgnLFxuICAgIG1pbkFyZ3M6IDIsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpcHRpb246ICdDaGVjayBpZiBzdHJpbmcgc3RhcnRzIHdpdGggcHJlZml4JyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBTdHJpbmcoYXJnc1swXSkuc3RhcnRzV2l0aChTdHJpbmcoYXJnc1sxXSkpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgRU5EU1dJVEg6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnRU5EU1dJVEgnLFxuICAgIG1pbkFyZ3M6IDIsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpcHRpb246ICdDaGVjayBpZiBzdHJpbmcgZW5kcyB3aXRoIHN1ZmZpeCcsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gU3RyaW5nKGFyZ3NbMF0pLmVuZHNXaXRoKFN0cmluZyhhcmdzWzFdKSk7XG4gICAgfSxcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExvZ2ljYWwgRnVuY3Rpb25zXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBjb25zdCBJRjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdJRicsXG4gICAgbWluQXJnczogMyxcbiAgICBtYXhBcmdzOiAzLFxuICAgIHJldHVyblR5cGU6ICdhbnknLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29uZGl0aW9uYWwgZXhwcmVzc2lvbicsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSBhcmdzWzBdO1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IGFyZ3NbMV0gOiBhcmdzWzJdO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgQ09BTEVTQ0U6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnQ09BTEVTQ0UnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogLTEsXG4gICAgcmV0dXJuVHlwZTogJ2FueScsXG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCBub24tbnVsbCB2YWx1ZScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgIGlmIChhcmcgIT09IG51bGwgJiYgYXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IElTTlVMTDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdJU05VTEwnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpcHRpb246ICdDaGVjayBpZiBudWxsJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZDtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IElTRU1QVFk6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnSVNFTVBUWScsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIGVtcHR5JyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGFyZ3NbMF07XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbC5sZW5ndGggPT09IDA7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdmFsLmxlbmd0aCA9PT0gMDtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JykgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgREVGQVVMVDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdERUZBVUxUJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2FueScsXG4gICAgZGVzY3JpcHRpb246ICdEZWZhdWx0IHZhbHVlIGlmIG51bGwnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXSAhPT0gdW5kZWZpbmVkID8gYXJnc1swXSA6IGFyZ3NbMV07XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBBTkQ6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnQU5EJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IC0xLFxuICAgIHJldHVyblR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgQU5EIG9mIGFsbCBhcmd1bWVudHMnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIGFyZ3MuZXZlcnkoYSA9PiBCb29sZWFuKGEpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IE9SOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ09SJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IC0xLFxuICAgIHJldHVyblR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgT1Igb2YgYWxsIGFyZ3VtZW50cycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gYXJncy5zb21lKGEgPT4gQm9vbGVhbihhKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBOT1Q6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTk9UJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnTG9naWNhbCBOT1QnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuICFCb29sZWFuKGFyZ3NbMF0pO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUeXBlIEZ1bmN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgTlVNQkVSOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ05VTUJFUicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbnZlcnQgdG8gbnVtYmVyJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiB0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFNUUklORzogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdTVFJJTkcnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnc3RyaW5nJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbnZlcnQgdG8gc3RyaW5nJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGFyZ3NbMF07XG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGVjaW1hbCkge1xuICAgICAgICByZXR1cm4gdmFsLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBCT09MRUFOOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0JPT0xFQU4nLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpcHRpb246ICdDb252ZXJ0IHRvIGJvb2xlYW4nLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgdmFsID0gYXJnc1swXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fCB2YWwgPT09ICcxJztcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEZWNpbWFsKSB7XG4gICAgICAgIHJldHVybiAhdmFsLmlzWmVybygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFRZUEVPRjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdUWVBFT0YnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnc3RyaW5nJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dldCB0eXBlIG5hbWUnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgdmFsID0gYXJnc1swXTtcbiAgICAgIGlmICh2YWwgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGVjaW1hbCkgcmV0dXJuICdkZWNpbWFsJztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnYXJyYXknO1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWw7XG4gICAgfSxcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEFycmF5IEZ1bmN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgRklSU1Q6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnRklSU1QnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnYW55JyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZpcnN0IGVsZW1lbnQgb2YgYXJyYXknLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnRklSU1QnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnIubGVuZ3RoID4gMCA/IGFyclswXSA6IG51bGw7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBMQVNUOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0xBU1QnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnYW55JyxcbiAgICBkZXNjcmlwdGlvbjogJ0xhc3QgZWxlbWVudCBvZiBhcnJheScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdhcnJheScsIHR5cGVvZiBhcnIsICdMQVNUJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyLmxlbmd0aCA+IDAgPyBhcnJbYXJyLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFJFVkVSU0U6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnUkVWRVJTRScsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdhcnJheScsXG4gICAgZGVzY3JpcHRpb246ICdSZXZlcnNlIGFycmF5JyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ2FycmF5JywgdHlwZW9mIGFyciwgJ1JFVkVSU0UnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4uYXJyXS5yZXZlcnNlKCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBTTElDRTogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdTTElDRScsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAzLFxuICAgIHJldHVyblR5cGU6ICdhcnJheScsXG4gICAgZGVzY3JpcHRpb246ICdTbGljZSBhcnJheScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdhcnJheScsIHR5cGVvZiBhcnIsICdTTElDRScpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnQgPSB0b051bWJlcihhcmdzWzFdKTtcbiAgICAgIGNvbnN0IGVuZCA9IGFyZ3MubGVuZ3RoID4gMiA/IHRvTnVtYmVyKGFyZ3NbMl0pIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IElOQ0xVREVTOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0lOQ0xVREVTJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgYXJyYXkgaW5jbHVkZXMgdmFsdWUnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnSU5DTFVERVMnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1sxXTtcbiAgICAgIHJldHVybiBhcnIuc29tZShpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEZWNpbWFsICYmIHZhbHVlIGluc3RhbmNlb2YgRGVjaW1hbCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLmVxdWFscyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IHZhbHVlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBJTkRFWE9GOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0lOREVYT0YnLFxuICAgIG1pbkFyZ3M6IDIsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnbnVtYmVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZpbmQgaW5kZXggb2YgdmFsdWUgaW4gYXJyYXknLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnSU5ERVhPRicpO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBhcmdzWzFdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGFycltpXTtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEZWNpbWFsICYmIHZhbHVlIGluc3RhbmNlb2YgRGVjaW1hbCkge1xuICAgICAgICAgIGlmIChpdGVtLmVxdWFscyh2YWx1ZSkpIHJldHVybiBpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IEZMQVRURU46IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnRkxBVFRFTicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdhcnJheScsXG4gICAgZGVzY3JpcHRpb246ICdGbGF0dGVuIG5lc3RlZCBhcnJheScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdhcnJheScsIHR5cGVvZiBhcnIsICdGTEFUVEVOJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZXB0aCA9IGFyZ3MubGVuZ3RoID4gMSA/IHRvTnVtYmVyKGFyZ3NbMV0pIDogMTtcbiAgICAgIHJldHVybiBhcnIuZmxhdChkZXB0aCk7XG4gICAgfSxcbiAgfTtcblxuICAvLyBSZWdpc3RlciBhbGwgZnVuY3Rpb25zXG4gIGNvbnN0IGFsbEZ1bmN0aW9ucyA9IFtcbiAgICAvLyBNYXRoXG4gICAgQUJTLCBST1VORCwgRkxPT1IsIENFSUwsIFRSVU5DQVRFLCBNSU4sIE1BWCwgUE9XLCBTUVJULCBMT0csIExPRzEwLCBTSUdOLCBERUNJTUFMLCBTQ0FMRSwgUFJFQ0lTSU9OLCBESVZJREUsXG4gICAgLy8gQWdncmVnYXRpb25cbiAgICBTVU0sIEFWRywgQ09VTlQsIFBST0RVQ1QsIEZJTFRFUiwgTUFQLFxuICAgIC8vIFN0cmluZ1xuICAgIExFTiwgVVBQRVIsIExPV0VSLCBUUklNLCBDT05DQVQsIFNVQlNUUiwgUkVQTEFDRSwgQ09OVEFJTlMsIFNUQVJUU1dJVEgsIEVORFNXSVRILFxuICAgIC8vIExvZ2ljYWxcbiAgICBJRiwgQ09BTEVTQ0UsIElTTlVMTCwgSVNFTVBUWSwgREVGQVVMVCwgQU5ELCBPUiwgTk9ULFxuICAgIC8vIFR5cGVcbiAgICBOVU1CRVIsIFNUUklORywgQk9PTEVBTiwgVFlQRU9GLFxuICAgIC8vIEFycmF5XG4gICAgRklSU1QsIExBU1QsIFJFVkVSU0UsIFNMSUNFLCBJTkNMVURFUywgSU5ERVhPRiwgRkxBVFRFTixcbiAgXTtcblxuICBmb3IgKGNvbnN0IGZuIG9mIGFsbEZ1bmN0aW9ucykge1xuICAgIGZ1bmN0aW9ucy5zZXQoZm4ubmFtZSwgZm4pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9ucztcbn1cbiJdfQ==
865
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTJCQSx3REE2M0JDO0FBdjVCRCxtREFBd0Q7QUFDeEQscUNBQWlFO0FBSWpFLDBEQUEwRDtBQUMxRCxTQUFTLFNBQVMsQ0FBQyxLQUFjO0lBQy9CLE9BQU8sS0FBSyxZQUFZLHVCQUFPLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQy9ELENBQUM7QUFFRCwrQkFBK0I7QUFDL0IsU0FBUyxTQUFTLENBQUMsS0FBYyxFQUFFLEtBQW1CO0lBQ3BELElBQUksS0FBSyxZQUFZLHVCQUFPO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxNQUFNLElBQUksMEJBQWlCLENBQUMsUUFBUSxFQUFFLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLElBQUksS0FBSyxZQUFZLHVCQUFPO1FBQUUsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsTUFBTSxJQUFJLDBCQUFpQixDQUFDLFFBQVEsRUFBRSxPQUFPLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFnQixzQkFB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QUUsT0FBTyxFQUFFLE9BQU87UUFDdkQsZUFBZTtRQUNmLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztJQUVGLEtBQUssTUFBTSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnVuY3Rpb25EZWZpbml0aW9uLCBFdmFsdWF0aW9uQ29udGV4dCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRGVjaW1hbFV0aWxzLCBEZWNpbWFsIH0gZnJvbSAnLi9kZWNpbWFsLXV0aWxzJztcbmltcG9ydCB7IEFyZ3VtZW50Q291bnRFcnJvciwgVHlwZU1pc21hdGNoRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbnR5cGUgRm5JbXBsID0gRnVuY3Rpb25EZWZpbml0aW9uWydpbXBsZW1lbnRhdGlvbiddO1xuXG4vLyBIZWxwZXIgdG8gY2hlY2sgaWYgdmFsdWUgaXMgbnVtZXJpYyAoRGVjaW1hbCBvciBudW1iZXIpXG5mdW5jdGlvbiBpc051bWVyaWModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEZWNpbWFsIHwgbnVtYmVyIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGVjaW1hbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG4vLyBIZWxwZXIgdG8gY29udmVydCB0byBEZWNpbWFsXG5mdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IHVua25vd24sIHV0aWxzOiBEZWNpbWFsVXRpbHMpOiBEZWNpbWFsIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGVjaW1hbCkgcmV0dXJuIHZhbHVlO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHV0aWxzLmZyb20odmFsdWUpO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHV0aWxzLmZyb20odmFsdWUpO1xuICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ251bWJlcicsIHR5cGVvZiB2YWx1ZSwgJ251bWVyaWMgY29udmVyc2lvbicpO1xufVxuXG4vLyBIZWxwZXIgdG8gY29udmVydCB2YWx1ZSB0byBudW1iZXIgKGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gbmF0aXZlIG51bWJlcnMpXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERlY2ltYWwpIHJldHVybiB2YWx1ZS50b051bWJlcigpO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbHVlO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ251bWJlcicsIHR5cGVvZiB2YWx1ZSwgJ251bWVyaWMgY29udmVyc2lvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQnVpbHRJbkZ1bmN0aW9ucyhkZWNpbWFsVXRpbHM6IERlY2ltYWxVdGlscyk6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uRGVmaW5pdGlvbj4ge1xuICBjb25zdCBmdW5jdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRnVuY3Rpb25EZWZpbml0aW9uPigpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTWF0aCBGdW5jdGlvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IEFCUzogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdBQlMnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdBYnNvbHV0ZSB2YWx1ZScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLmFicyh0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBST1VORDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdST1VORCcsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAzLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ1JvdW5kIHRvIHByZWNpc2lvbicsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRvRGVjaW1hbChhcmdzWzBdLCBkZWNpbWFsVXRpbHMpO1xuICAgICAgY29uc3QgcHJlY2lzaW9uID0gYXJncy5sZW5ndGggPiAxID8gdG9OdW1iZXIoYXJnc1sxXSkgOiAwO1xuICAgICAgY29uc3QgbW9kZSA9IGFyZ3MubGVuZ3RoID4gMiA/IFN0cmluZyhhcmdzWzJdKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMucm91bmQodmFsdWUsIHByZWNpc2lvbiwgbW9kZSBhcyBhbnkpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgRkxPT1I6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnRkxPT1InLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdSb3VuZCBkb3duJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscyk7XG4gICAgICBjb25zdCBzY2FsZSA9IGFyZ3MubGVuZ3RoID4gMSA/IHRvTnVtYmVyKGFyZ3NbMV0pIDogMDtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuZmxvb3IodmFsdWUsIHNjYWxlKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IENFSUw6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnQ0VJTCcsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ1JvdW5kIHVwJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscyk7XG4gICAgICBjb25zdCBzY2FsZSA9IGFyZ3MubGVuZ3RoID4gMSA/IHRvTnVtYmVyKGFyZ3NbMV0pIDogMDtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMuY2VpbCh2YWx1ZSwgc2NhbGUpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgVFJVTkNBVEU6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnVFJVTkNBVEUnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdUcnVuY2F0ZSB0byBwcmVjaXNpb24nLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKTtcbiAgICAgIGNvbnN0IHNjYWxlID0gYXJncy5sZW5ndGggPiAxID8gdG9OdW1iZXIoYXJnc1sxXSkgOiAwO1xuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy50cnVuY2F0ZSh2YWx1ZSwgc2NhbGUpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTUlOOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ01JTicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAtMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdNaW5pbXVtIHZhbHVlJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMubWluKC4uLmFyZ3NbMF0ubWFwKHYgPT4gdG9EZWNpbWFsKHYsIGRlY2ltYWxVdGlscykpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMubWluKC4uLmFyZ3MubWFwKHYgPT4gdG9EZWNpbWFsKHYsIGRlY2ltYWxVdGlscykpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IE1BWDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdNQVgnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogLTEsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnTWF4aW11bSB2YWx1ZScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkge1xuICAgICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLm1heCguLi5hcmdzWzBdLm1hcCh2ID0+IHRvRGVjaW1hbCh2LCBkZWNpbWFsVXRpbHMpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLm1heCguLi5hcmdzLm1hcCh2ID0+IHRvRGVjaW1hbCh2LCBkZWNpbWFsVXRpbHMpKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBQT1c6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnUE9XJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnUG93ZXInLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYmFzZSA9IHRvRGVjaW1hbChhcmdzWzBdLCBkZWNpbWFsVXRpbHMpO1xuICAgICAgY29uc3QgZXhwID0gdG9OdW1iZXIoYXJnc1sxXSk7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnBvd2VyKGJhc2UsIGV4cCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBTUVJUOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1NRUlQnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdTcXVhcmUgcm9vdCcsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnNxcnQodG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscykpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTE9HOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0xPRycsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ05hdHVyYWwgbG9nYXJpdGhtJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMubG4odG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscykpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTE9HMTA6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTE9HMTAnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdCYXNlLTEwIGxvZ2FyaXRobScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLmxvZzEwKHRvRGVjaW1hbChhcmdzWzBdLCBkZWNpbWFsVXRpbHMpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFNJR046IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnU0lHTicsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdudW1iZXInLFxuICAgIGRlc2NyaXB0aW9uOiAnU2lnbiBvZiBudW1iZXIgKC0xLCAwLCBvciAxKScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnNpZ24odG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscykpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgREVDSU1BTDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdERUNJTUFMJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29udmVydCB0byBEZWNpbWFsJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscyk7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdG9OdW1iZXIoYXJnc1sxXSk7XG4gICAgICAgIHJldHVybiBkZWNpbWFsVXRpbHMucm91bmQodmFsdWUsIHNjYWxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFNDQUxFOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1NDQUxFJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ251bWJlcicsXG4gICAgZGVzY3JpcHRpb246ICdHZXQgc2NhbGUgKGRlY2ltYWwgcGxhY2VzKScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnNjYWxlKHRvRGVjaW1hbChhcmdzWzBdLCBkZWNpbWFsVXRpbHMpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFBSRUNJU0lPTjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdQUkVDSVNJT04nLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnbnVtYmVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dldCBwcmVjaXNpb24gKHNpZ25pZmljYW50IGRpZ2l0cyknLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5wcmVjaXNpb24odG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscykpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgRElWSURFOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0RJVklERScsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiA0LFxuICAgIHJldHVyblR5cGU6ICdkZWNpbWFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RpdmlzaW9uIHdpdGggc2NhbGUgYW5kIHJvdW5kaW5nJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGEgPSB0b0RlY2ltYWwoYXJnc1swXSwgZGVjaW1hbFV0aWxzKTtcbiAgICAgIGNvbnN0IGIgPSB0b0RlY2ltYWwoYXJnc1sxXSwgZGVjaW1hbFV0aWxzKTtcbiAgICAgIGNvbnN0IHNjYWxlID0gYXJncy5sZW5ndGggPiAyID8gdG9OdW1iZXIoYXJnc1syXSkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBtb2RlID0gYXJncy5sZW5ndGggPiAzID8gU3RyaW5nKGFyZ3NbM10pIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGRlY2ltYWxVdGlscy5kaXZpZGUoYSwgYiwgc2NhbGUsIG1vZGUgYXMgYW55KTtcbiAgICB9LFxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQWdncmVnYXRpb24gRnVuY3Rpb25zXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBjb25zdCBTVU06IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnU1VNJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnU3VtIG9mIGFycmF5IHZhbHVlcycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzLCBjb250ZXh0LCBlbmdpbmUpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ2FycmF5JywgdHlwZW9mIGFyciwgJ1NVTScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gU2ltcGxlIHN1bVxuICAgICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnN1bShhcnIubWFwKHYgPT4gdG9EZWNpbWFsKHYsIGRlY2ltYWxVdGlscykpKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3VtIHdpdGggZXhwcmVzc2lvbiAtIGFyZ3NbMV0gc2hvdWxkIGJlIGV2YWx1YXRlZCBmb3IgZWFjaCBpdGVtXG4gICAgICAvLyBUaGlzIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IHRoZSBldmFsdWF0b3JcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1VNIHdpdGggZXhwcmVzc2lvbiBtdXN0IGJlIGhhbmRsZWQgYnkgZXZhbHVhdG9yJyk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBBVkc6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnQVZHJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ2RlY2ltYWwnLFxuICAgIGRlc2NyaXB0aW9uOiAnQXZlcmFnZSBvZiBhcnJheSB2YWx1ZXMnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnQVZHJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLmF2ZyhhcnIubWFwKHYgPT4gdG9EZWNpbWFsKHYsIGRlY2ltYWxVdGlscykpKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IENPVU5UOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0NPVU5UJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ251bWJlcicsXG4gICAgZGVzY3JpcHRpb246ICdDb3VudCBvZiBhcnJheSBlbGVtZW50cycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdhcnJheScsIHR5cGVvZiBhcnIsICdDT1VOVCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyci5sZW5ndGg7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBQUk9EVUNUOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1BST0RVQ1QnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdQcm9kdWN0IG9mIGFycmF5IHZhbHVlcycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdhcnJheScsIHR5cGVvZiBhcnIsICdQUk9EVUNUJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVjaW1hbFV0aWxzLnByb2R1Y3QoYXJyLm1hcCh2ID0+IHRvRGVjaW1hbCh2LCBkZWNpbWFsVXRpbHMpKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBGSUxURVI6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnRklMVEVSJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2FycmF5JyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZpbHRlciBhcnJheSBieSBjb25kaXRpb24nLFxuICAgIGltcGxlbWVudGF0aW9uOiAoKSA9PiB7XG4gICAgICAvLyBUaGlzIG11c3QgYmUgaGFuZGxlZCBieSB0aGUgZXZhbHVhdG9yIHRvIGV2YWx1YXRlIHRoZSBjb25kaXRpb24gZXhwcmVzc2lvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGSUxURVIgbXVzdCBiZSBoYW5kbGVkIGJ5IGV2YWx1YXRvcicpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTUFQOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ01BUCcsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdhcnJheScsXG4gICAgZGVzY3JpcHRpb246ICdUcmFuc2Zvcm0gYXJyYXkgZWxlbWVudHMnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoKSA9PiB7XG4gICAgICAvLyBUaGlzIG11c3QgYmUgaGFuZGxlZCBieSB0aGUgZXZhbHVhdG9yIHRvIGV2YWx1YXRlIHRoZSB0cmFuc2Zvcm0gZXhwcmVzc2lvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNQVAgbXVzdCBiZSBoYW5kbGVkIGJ5IGV2YWx1YXRvcicpO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTdHJpbmcgRnVuY3Rpb25zXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBjb25zdCBMRU46IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTEVOJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ251bWJlcicsXG4gICAgZGVzY3JpcHRpb246ICdTdHJpbmcgbGVuZ3RoJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhhcmdzWzBdKTtcbiAgICAgIHJldHVybiBzdHIubGVuZ3RoO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgVVBQRVI6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnVVBQRVInLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnc3RyaW5nJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VwcGVyY2FzZSBzdHJpbmcnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIFN0cmluZyhhcmdzWzBdKS50b1VwcGVyQ2FzZSgpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTE9XRVI6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTE9XRVInLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnc3RyaW5nJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xvd2VyY2FzZSBzdHJpbmcnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIFN0cmluZyhhcmdzWzBdKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgVFJJTTogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdUUklNJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ3N0cmluZycsXG4gICAgZGVzY3JpcHRpb246ICdUcmltIHdoaXRlc3BhY2UnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIFN0cmluZyhhcmdzWzBdKS50cmltKCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBDT05DQVQ6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnQ09OQ0FUJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IC0xLFxuICAgIHJldHVyblR5cGU6ICdzdHJpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29uY2F0ZW5hdGUgc3RyaW5ncycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gYXJncy5tYXAoYSA9PiBTdHJpbmcoYSkpLmpvaW4oJycpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgU1VCU1RSOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1NVQlNUUicsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAzLFxuICAgIHJldHVyblR5cGU6ICdzdHJpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiAnU3Vic3RyaW5nJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhhcmdzWzBdKTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdG9OdW1iZXIoYXJnc1sxXSk7XG4gICAgICBjb25zdCBsZW4gPSBhcmdzLmxlbmd0aCA+IDIgPyB0b051bWJlcihhcmdzWzJdKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBsZW4gIT09IHVuZGVmaW5lZCA/IHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgOiBzdHIuc3Vic3RyKHN0YXJ0KTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IFJFUExBQ0U6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnUkVQTEFDRScsXG4gICAgbWluQXJnczogMyxcbiAgICBtYXhBcmdzOiAzLFxuICAgIHJldHVyblR5cGU6ICdzdHJpbmcnLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVwbGFjZSBzdWJzdHJpbmcnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGFyZ3NbMF0pO1xuICAgICAgY29uc3Qgc2VhcmNoID0gU3RyaW5nKGFyZ3NbMV0pO1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBTdHJpbmcoYXJnc1syXSk7XG4gICAgICByZXR1cm4gc3RyLnNwbGl0KHNlYXJjaCkuam9pbihyZXBsYWNlbWVudCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBDT05UQUlOUzogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdDT05UQUlOUycsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHN0cmluZyBjb250YWlucyBzdWJzdHJpbmcnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGFyZ3NbMF0pO1xuICAgICAgY29uc3Qgc2VhcmNoID0gU3RyaW5nKGFyZ3NbMV0pO1xuICAgICAgcmV0dXJuIHN0ci5pbmNsdWRlcyhzZWFyY2gpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgU1RBUlRTV0lUSDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdTVEFSVFNXSVRIJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHByZWZpeCcsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gU3RyaW5nKGFyZ3NbMF0pLnN0YXJ0c1dpdGgoU3RyaW5nKGFyZ3NbMV0pKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IEVORFNXSVRIOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0VORFNXSVRIJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgc3RyaW5nIGVuZHMgd2l0aCBzdWZmaXgnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIFN0cmluZyhhcmdzWzBdKS5lbmRzV2l0aChTdHJpbmcoYXJnc1sxXSkpO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMb2dpY2FsIEZ1bmN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgY29uc3QgSUY6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnSUYnLFxuICAgIG1pbkFyZ3M6IDMsXG4gICAgbWF4QXJnczogMyxcbiAgICByZXR1cm5UeXBlOiAnYW55JyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbmRpdGlvbmFsIGV4cHJlc3Npb24nLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgY29uZGl0aW9uID0gYXJnc1swXTtcbiAgICAgIHJldHVybiBjb25kaXRpb24gPyBhcmdzWzFdIDogYXJnc1syXTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IENPQUxFU0NFOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0NPQUxFU0NFJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IC0xLFxuICAgIHJldHVyblR5cGU6ICdhbnknLFxuICAgIGRlc2NyaXB0aW9uOiAnRmlyc3Qgbm9uLW51bGwgdmFsdWUnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xuICAgICAgICBpZiAoYXJnICE9PSBudWxsICYmIGFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBJU05VTEw6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnSVNOVUxMJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgbnVsbCcsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBJU0VNUFRZOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0lTRU1QVFknLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpcHRpb246ICdDaGVjayBpZiBlbXB0eScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBhcmdzWzBdO1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWwubGVuZ3RoID09PSAwO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbC5sZW5ndGggPT09IDA7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHJldHVybiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IERFRkFVTFQ6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnREVGQVVMVCcsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdhbnknLFxuICAgIGRlc2NyaXB0aW9uOiAnRGVmYXVsdCB2YWx1ZSBpZiBudWxsJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3NbMF0gOiBhcmdzWzFdO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgQU5EOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0FORCcsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAtMSxcbiAgICByZXR1cm5UeXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpcHRpb246ICdMb2dpY2FsIEFORCBvZiBhbGwgYXJndW1lbnRzJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBhcmdzLmV2ZXJ5KGEgPT4gQm9vbGVhbihhKSk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBPUjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdPUicsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAtMSxcbiAgICByZXR1cm5UeXBlOiAnYm9vbGVhbicsXG4gICAgZGVzY3JpcHRpb246ICdMb2dpY2FsIE9SIG9mIGFsbCBhcmd1bWVudHMnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgcmV0dXJuIGFyZ3Muc29tZShhID0+IEJvb2xlYW4oYSkpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTk9UOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ05PVCcsXG4gICAgbWluQXJnczogMSxcbiAgICBtYXhBcmdzOiAxLFxuICAgIHJldHVyblR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgTk9UJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIHJldHVybiAhQm9vbGVhbihhcmdzWzBdKTtcbiAgICB9LFxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVHlwZSBGdW5jdGlvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IE5VTUJFUjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdOVU1CRVInLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnZGVjaW1hbCcsXG4gICAgZGVzY3JpcHRpb246ICdDb252ZXJ0IHRvIG51bWJlcicsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICByZXR1cm4gdG9EZWNpbWFsKGFyZ3NbMF0sIGRlY2ltYWxVdGlscyk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBTVFJJTkc6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnU1RSSU5HJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ3N0cmluZycsXG4gICAgZGVzY3JpcHRpb246ICdDb252ZXJ0IHRvIHN0cmluZycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBhcmdzWzBdO1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERlY2ltYWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbC50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgQk9PTEVBTjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdCT09MRUFOJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29udmVydCB0byBib29sZWFuJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGFyZ3NbMF07XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHwgdmFsID09PSAnMSc7XG4gICAgICB9XG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGVjaW1hbCkge1xuICAgICAgICByZXR1cm4gIXZhbC5pc1plcm8oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBCb29sZWFuKHZhbCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBUWVBFT0Y6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnVFlQRU9GJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ3N0cmluZycsXG4gICAgZGVzY3JpcHRpb246ICdHZXQgdHlwZSBuYW1lJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGFyZ3NbMF07XG4gICAgICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERlY2ltYWwpIHJldHVybiAnZGVjaW1hbCc7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gJ2FycmF5JztcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IEZJUlNUOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0ZJUlNUJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ2FueScsXG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCBlbGVtZW50IG9mIGFycmF5JyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ2FycmF5JywgdHlwZW9mIGFyciwgJ0ZJUlNUJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyLmxlbmd0aCA+IDAgPyBhcnJbMF0gOiBudWxsO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgTEFTVDogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdMQVNUJyxcbiAgICBtaW5BcmdzOiAxLFxuICAgIG1heEFyZ3M6IDEsXG4gICAgcmV0dXJuVHlwZTogJ2FueScsXG4gICAgZGVzY3JpcHRpb246ICdMYXN0IGVsZW1lbnQgb2YgYXJyYXknLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnTEFTVCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyci5sZW5ndGggPiAwID8gYXJyW2Fyci5sZW5ndGggLSAxXSA6IG51bGw7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBSRVZFUlNFOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ1JFVkVSU0UnLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMSxcbiAgICByZXR1cm5UeXBlOiAnYXJyYXknLFxuICAgIGRlc2NyaXB0aW9uOiAnUmV2ZXJzZSBhcnJheScsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBhcmdzWzBdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdhcnJheScsIHR5cGVvZiBhcnIsICdSRVZFUlNFJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gWy4uLmFycl0ucmV2ZXJzZSgpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgU0xJQ0U6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnU0xJQ0UnLFxuICAgIG1pbkFyZ3M6IDIsXG4gICAgbWF4QXJnczogMyxcbiAgICByZXR1cm5UeXBlOiAnYXJyYXknLFxuICAgIGRlc2NyaXB0aW9uOiAnU2xpY2UgYXJyYXknLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnU0xJQ0UnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0ID0gdG9OdW1iZXIoYXJnc1sxXSk7XG4gICAgICBjb25zdCBlbmQgPSBhcmdzLmxlbmd0aCA+IDIgPyB0b051bWJlcihhcmdzWzJdKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBJTkNMVURFUzogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdJTkNMVURFUycsXG4gICAgbWluQXJnczogMixcbiAgICBtYXhBcmdzOiAyLFxuICAgIHJldHVyblR5cGU6ICdib29sZWFuJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIGFycmF5IGluY2x1ZGVzIHZhbHVlJyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ2FycmF5JywgdHlwZW9mIGFyciwgJ0lOQ0xVREVTJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbMV07XG4gICAgICByZXR1cm4gYXJyLnNvbWUoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRGVjaW1hbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIERlY2ltYWwpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5lcXVhbHModmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtID09PSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgSU5ERVhPRjogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdJTkRFWE9GJyxcbiAgICBtaW5BcmdzOiAyLFxuICAgIG1heEFyZ3M6IDIsXG4gICAgcmV0dXJuVHlwZTogJ251bWJlcicsXG4gICAgZGVzY3JpcHRpb246ICdGaW5kIGluZGV4IG9mIHZhbHVlIGluIGFycmF5JyxcbiAgICBpbXBsZW1lbnRhdGlvbjogKGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IGFyZ3NbMF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ2FycmF5JywgdHlwZW9mIGFyciwgJ0lOREVYT0YnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1sxXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBhcnJbaV07XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRGVjaW1hbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIERlY2ltYWwpIHtcbiAgICAgICAgICBpZiAoaXRlbS5lcXVhbHModmFsdWUpKSByZXR1cm4gaTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBGTEFUVEVOOiBGdW5jdGlvbkRlZmluaXRpb24gPSB7XG4gICAgbmFtZTogJ0ZMQVRURU4nLFxuICAgIG1pbkFyZ3M6IDEsXG4gICAgbWF4QXJnczogMixcbiAgICByZXR1cm5UeXBlOiAnYXJyYXknLFxuICAgIGRlc2NyaXB0aW9uOiAnRmxhdHRlbiBuZXN0ZWQgYXJyYXknLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgYXJyID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgYXJyLCAnRkxBVFRFTicpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVwdGggPSBhcmdzLmxlbmd0aCA+IDEgPyB0b051bWJlcihhcmdzWzFdKSA6IDE7XG4gICAgICByZXR1cm4gYXJyLmZsYXQoZGVwdGgpO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUYWJsZS9Mb29rdXAgRnVuY3Rpb25zXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBjb25zdCBMT09LVVA6IEZ1bmN0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICBuYW1lOiAnTE9PS1VQJyxcbiAgICBtaW5BcmdzOiAzLFxuICAgIG1heEFyZ3M6IDMsXG4gICAgcmV0dXJuVHlwZTogJ2FueScsXG4gICAgZGVzY3JpcHRpb246ICdNdWx0aS1jcml0ZXJpYSBleGFjdC1tYXRjaCBsb29rdXAgb24gYXJyYXkgb2Ygb2JqZWN0cycsXG4gICAgaW1wbGVtZW50YXRpb246IChhcmdzKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IGFyZ3NbMF07XG4gICAgICBjb25zdCBjcml0ZXJpYSA9IGFyZ3NbMV07XG4gICAgICBjb25zdCByZXR1cm5GaWVsZCA9IGFyZ3NbMl07XG5cbiAgICAgIGlmICh0YWJsZSA9PT0gbnVsbCB8fCB0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgdGFibGUsICdMT09LVVAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjcml0ZXJpYSAhPT0gJ29iamVjdCcgfHwgY3JpdGVyaWEgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShjcml0ZXJpYSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdvYmplY3QnLCB0eXBlb2YgY3JpdGVyaWEsICdMT09LVVAgY3JpdGVyaWEnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByZXR1cm5GaWVsZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdzdHJpbmcnLCB0eXBlb2YgcmV0dXJuRmllbGQsICdMT09LVVAgcmV0dXJuRmllbGQnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3JpdGVyaWFPYmogPSBjcml0ZXJpYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgZm9yIChjb25zdCByb3cgb2YgdGFibGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByb3cgIT09ICdvYmplY3QnIHx8IHJvdyA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvd09iaiA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgICBsZXQgbWF0Y2ggPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjcml0ZXJpYU9iaikpIHtcbiAgICAgICAgICBjb25zdCByb3dWYWwgPSByb3dPYmpba2V5XTtcbiAgICAgICAgICBpZiAocm93VmFsIGluc3RhbmNlb2YgRGVjaW1hbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIERlY2ltYWwpIHtcbiAgICAgICAgICAgIGlmICghcm93VmFsLmVxdWFscyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3dWYWwgaW5zdGFuY2VvZiBEZWNpbWFsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiByb3dWYWwudG9OdW1iZXIoKSA9PT0gdmFsdWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgcm93VmFsLnRvU3RyaW5nKCkgPT09IHZhbHVlKSBjb250aW51ZTtcbiAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGVjaW1hbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByb3dWYWwgPT09ICdudW1iZXInICYmIHZhbHVlLnRvTnVtYmVyKCkgPT09IHJvd1ZhbCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvd1ZhbCA9PT0gJ3N0cmluZycgJiYgdmFsdWUudG9TdHJpbmcoKSA9PT0gcm93VmFsKSBjb250aW51ZTtcbiAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKHJvd1ZhbCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSByb3dPYmpbcmV0dXJuRmllbGRdO1xuICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBSQU5HRTogRnVuY3Rpb25EZWZpbml0aW9uID0ge1xuICAgIG5hbWU6ICdSQU5HRScsXG4gICAgbWluQXJnczogNSxcbiAgICBtYXhBcmdzOiA1LFxuICAgIHJldHVyblR5cGU6ICdhbnknLFxuICAgIGRlc2NyaXB0aW9uOiAnTnVtZXJpYyBiYW5kL3RpZXIgcmVzb2x1dGlvbjogbWluIDw9IGlucHV0VmFsdWUgPCBtYXgnLFxuICAgIGltcGxlbWVudGF0aW9uOiAoYXJncykgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSBhcmdzWzBdO1xuICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGFyZ3NbMV07XG4gICAgICBjb25zdCBtaW5GaWVsZCA9IGFyZ3NbMl07XG4gICAgICBjb25zdCBtYXhGaWVsZCA9IGFyZ3NbM107XG4gICAgICBjb25zdCByZXR1cm5GaWVsZCA9IGFyZ3NbNF07XG5cbiAgICAgIGlmICh0YWJsZSA9PT0gbnVsbCB8fCB0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2hFcnJvcignYXJyYXknLCB0eXBlb2YgdGFibGUsICdSQU5HRScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG1pbkZpZWxkICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ3N0cmluZycsIHR5cGVvZiBtaW5GaWVsZCwgJ1JBTkdFIG1pbkZpZWxkJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG1heEZpZWxkICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ3N0cmluZycsIHR5cGVvZiBtYXhGaWVsZCwgJ1JBTkdFIG1heEZpZWxkJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJldHVybkZpZWxkICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoRXJyb3IoJ3N0cmluZycsIHR5cGVvZiByZXR1cm5GaWVsZCwgJ1JBTkdFIHJldHVybkZpZWxkJyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbnB1dE51bTogbnVtYmVyO1xuICAgICAgaWYgKGlucHV0VmFsdWUgaW5zdGFuY2VvZiBEZWNpbWFsKSB7XG4gICAgICAgIGlucHV0TnVtID0gaW5wdXRWYWx1ZS50b051bWJlcigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5wdXROdW0gPSBpbnB1dFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaEVycm9yKCdudW1iZXInLCB0eXBlb2YgaW5wdXRWYWx1ZSwgJ1JBTkdFIGlucHV0VmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByb3cgb2YgdGFibGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByb3cgIT09ICdvYmplY3QnIHx8IHJvdyA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvd09iaiA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgICBjb25zdCBtaW5WYWwgPSByb3dPYmpbbWluRmllbGRdO1xuICAgICAgICBjb25zdCBtYXhWYWwgPSByb3dPYmpbbWF4RmllbGRdO1xuXG4gICAgICAgIGxldCBtaW5OdW06IG51bWJlcjtcbiAgICAgICAgaWYgKG1pblZhbCBpbnN0YW5jZW9mIERlY2ltYWwpIHtcbiAgICAgICAgICBtaW5OdW0gPSBtaW5WYWwudG9OdW1iZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbWluVmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG1pbk51bSA9IG1pblZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnB1dE51bSA8IG1pbk51bSkgY29udGludWU7XG5cbiAgICAgICAgaWYgKG1heFZhbCAhPT0gbnVsbCAmJiBtYXhWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBtYXhOdW06IG51bWJlcjtcbiAgICAgICAgICBpZiAobWF4VmFsIGluc3RhbmNlb2YgRGVjaW1hbCkge1xuICAgICAgICAgICAgbWF4TnVtID0gbWF4VmFsLnRvTnVtYmVyKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbWF4VmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbWF4TnVtID0gbWF4VmFsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlucHV0TnVtID49IG1heE51bSkgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSByb3dPYmpbcmV0dXJuRmllbGRdO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSB1bmRlZmluZWQgPyByZXN1bHQgOiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICB9O1xuXG4gIC8vIFJlZ2lzdGVyIGFsbCBmdW5jdGlvbnNcbiAgY29uc3QgYWxsRnVuY3Rpb25zID0gW1xuICAgIC8vIE1hdGhcbiAgICBBQlMsIFJPVU5ELCBGTE9PUiwgQ0VJTCwgVFJVTkNBVEUsIE1JTiwgTUFYLCBQT1csIFNRUlQsIExPRywgTE9HMTAsIFNJR04sIERFQ0lNQUwsIFNDQUxFLCBQUkVDSVNJT04sIERJVklERSxcbiAgICAvLyBBZ2dyZWdhdGlvblxuICAgIFNVTSwgQVZHLCBDT1VOVCwgUFJPRFVDVCwgRklMVEVSLCBNQVAsXG4gICAgLy8gU3RyaW5nXG4gICAgTEVOLCBVUFBFUiwgTE9XRVIsIFRSSU0sIENPTkNBVCwgU1VCU1RSLCBSRVBMQUNFLCBDT05UQUlOUywgU1RBUlRTV0lUSCwgRU5EU1dJVEgsXG4gICAgLy8gTG9naWNhbFxuICAgIElGLCBDT0FMRVNDRSwgSVNOVUxMLCBJU0VNUFRZLCBERUZBVUxULCBBTkQsIE9SLCBOT1QsXG4gICAgLy8gVHlwZVxuICAgIE5VTUJFUiwgU1RSSU5HLCBCT09MRUFOLCBUWVBFT0YsXG4gICAgLy8gQXJyYXlcbiAgICBGSVJTVCwgTEFTVCwgUkVWRVJTRSwgU0xJQ0UsIElOQ0xVREVTLCBJTkRFWE9GLCBGTEFUVEVOLFxuICAgIC8vIFRhYmxlL0xvb2t1cFxuICAgIExPT0tVUCwgUkFOR0UsXG4gIF07XG5cbiAgZm9yIChjb25zdCBmbiBvZiBhbGxGdW5jdGlvbnMpIHtcbiAgICBmdW5jdGlvbnMuc2V0KGZuLm5hbWUsIGZuKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbnM7XG59XG4iXX0=
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { FormulaEngine } from './formula-engine';
2
- export { FormulaEngineConfig, FormulaDefinition, EvaluationContext, FunctionDefinition, ArgumentType, FunctionImplementation, DecimalConfig, DecimalRoundingMode, RoundingConfig, EvaluationResult, EvaluationResultSet, EvaluateAllOptions, ValidationResult, CacheStats, ErrorBehavior, SecurityConfig, ASTNode, DecimalLiteral, NumberLiteral, StringLiteral, BooleanLiteral, NullLiteral, ArrayLiteral, VariableReference, BinaryOperation, UnaryOperation, ConditionalExpression, FunctionCall, MemberAccess, IndexAccess, DependencyGraph, ValueType, FormulaValue, } from './types';
2
+ export { FormulaEngineConfig, FormulaDefinition, EvaluationContext, FunctionDefinition, ArgumentType, FunctionImplementation, DecimalConfig, DecimalRoundingMode, RoundingConfig, EvaluationResult, EvaluationResultSet, EvaluateAllOptions, ValidationResult, CacheStats, ErrorBehavior, SecurityConfig, ASTNode, DecimalLiteral, NumberLiteral, StringLiteral, BooleanLiteral, NullLiteral, ArrayLiteral, ObjectLiteral, ObjectLiteralProperty, VariableReference, BinaryOperation, UnaryOperation, ConditionalExpression, FunctionCall, MemberAccess, IndexAccess, DependencyGraph, ValueType, FormulaValue, } from './types';
3
3
  export { Parser } from './parser';
4
4
  export { Lexer } from './lexer';
5
5
  export { Evaluator } from './evaluator';
package/dist/index.js CHANGED
@@ -58,4 +58,4 @@ Object.defineProperty(exports, "SecurityError", { enumerable: true, get: functio
58
58
  Object.defineProperty(exports, "MaxIterationsError", { enumerable: true, get: function () { return errors_1.MaxIterationsError; } });
59
59
  Object.defineProperty(exports, "MaxRecursionError", { enumerable: true, get: function () { return errors_1.MaxRecursionError; } });
60
60
  Object.defineProperty(exports, "MaxExpressionLengthError", { enumerable: true, get: function () { return errors_1.MaxExpressionLengthError; } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZUFBZTtBQUNmLG1EQUFpRDtBQUF4QywrR0FBQSxhQUFhLE9BQUE7QUFFdEIsUUFBUTtBQUNSLGlDQStDaUI7QUFwQ2YsNEdBQUEsbUJBQW1CLE9BQUE7QUFzQ3JCLGtDQUFrQztBQUNsQyxtQ0FBa0M7QUFBekIsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YsaUNBQWdDO0FBQXZCLDhGQUFBLEtBQUssT0FBQTtBQUNkLHlDQUF3QztBQUEvQixzR0FBQSxTQUFTLE9BQUE7QUFDbEIsK0RBQTZEO0FBQXBELDJIQUFBLG1CQUFtQixPQUFBO0FBQzVCLHVEQUFvRztBQUEzRix1SEFBQSxlQUFlLE9BQXVCO0FBQUUsMEhBQUEsc0JBQXNCLE9BQUE7QUFDdkUsaURBQXFFO0FBQTVELDZHQUFBLFlBQVksT0FBQTtBQUFFLHdHQUFBLE9BQU8sT0FBQTtBQUM5Qix5Q0FBcUQ7QUFBNUMsbUhBQUEsc0JBQXNCLE9BQUE7QUFFL0IsU0FBUztBQUNULG1DQXdDa0I7QUF2Q2hCLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLDZHQUFBLG1CQUFtQixPQUFBO0FBR25CLGVBQWU7QUFDZixxR0FBQSxXQUFXLE9BQUE7QUFDWCw4R0FBQSxvQkFBb0IsT0FBQTtBQUNwQixpSEFBQSx1QkFBdUIsT0FBQTtBQUN2Qiw0R0FBQSxrQkFBa0IsT0FBQTtBQUVsQixvQkFBb0I7QUFDcEIsaUhBQUEsdUJBQXVCLE9BQUE7QUFDdkIsZ0hBQUEsc0JBQXNCLE9BQUE7QUFDdEIsZ0hBQUEsc0JBQXNCLE9BQUE7QUFDdEIsK0dBQUEscUJBQXFCLE9BQUE7QUFFckIsb0JBQW9CO0FBQ3BCLDZHQUFBLG1CQUFtQixPQUFBO0FBQ25CLDJHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLDZHQUFBLG1CQUFtQixPQUFBO0FBQ25CLDBHQUFBLGdCQUFnQixPQUFBO0FBRWhCLGlCQUFpQjtBQUNqQixzR0FBQSxZQUFZLE9BQUE7QUFDWiw4R0FBQSxvQkFBb0IsT0FBQTtBQUNwQiwrR0FBQSxxQkFBcUIsT0FBQTtBQUNyQixvSEFBQSwwQkFBMEIsT0FBQTtBQUMxQiw2R0FBQSxtQkFBbUIsT0FBQTtBQUVuQix1QkFBdUI7QUFDdkIsNEdBQUEsa0JBQWtCLE9BQUE7QUFFbEIsa0JBQWtCO0FBQ2xCLHVHQUFBLGFBQWEsT0FBQTtBQUNiLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLDJHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLGtIQUFBLHdCQUF3QixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTWFpbiBleHBvcnRzXG5leHBvcnQgeyBGb3JtdWxhRW5naW5lIH0gZnJvbSAnLi9mb3JtdWxhLWVuZ2luZSc7XG5cbi8vIFR5cGVzXG5leHBvcnQge1xuICAvLyBDb25maWd1cmF0aW9uXG4gIEZvcm11bGFFbmdpbmVDb25maWcsXG4gIEZvcm11bGFEZWZpbml0aW9uLFxuICBFdmFsdWF0aW9uQ29udGV4dCxcbiAgRnVuY3Rpb25EZWZpbml0aW9uLFxuICBBcmd1bWVudFR5cGUsXG4gIEZ1bmN0aW9uSW1wbGVtZW50YXRpb24sXG5cbiAgLy8gRGVjaW1hbFxuICBEZWNpbWFsQ29uZmlnLFxuICBEZWNpbWFsUm91bmRpbmdNb2RlLFxuICBSb3VuZGluZ0NvbmZpZyxcblxuICAvLyBSZXN1bHRzXG4gIEV2YWx1YXRpb25SZXN1bHQsXG4gIEV2YWx1YXRpb25SZXN1bHRTZXQsXG4gIEV2YWx1YXRlQWxsT3B0aW9ucyxcbiAgVmFsaWRhdGlvblJlc3VsdCxcbiAgQ2FjaGVTdGF0cyxcblxuICAvLyBFcnJvciBoYW5kbGluZ1xuICBFcnJvckJlaGF2aW9yLFxuICBTZWN1cml0eUNvbmZpZyxcblxuICAvLyBBU1Qgbm9kZXNcbiAgQVNUTm9kZSxcbiAgRGVjaW1hbExpdGVyYWwsXG4gIE51bWJlckxpdGVyYWwsXG4gIFN0cmluZ0xpdGVyYWwsXG4gIEJvb2xlYW5MaXRlcmFsLFxuICBOdWxsTGl0ZXJhbCxcbiAgQXJyYXlMaXRlcmFsLFxuICBWYXJpYWJsZVJlZmVyZW5jZSxcbiAgQmluYXJ5T3BlcmF0aW9uLFxuICBVbmFyeU9wZXJhdGlvbixcbiAgQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuICBGdW5jdGlvbkNhbGwsXG4gIE1lbWJlckFjY2VzcyxcbiAgSW5kZXhBY2Nlc3MsXG5cbiAgLy8gR3JhcGhcbiAgRGVwZW5kZW5jeUdyYXBoLFxuXG4gIC8vIFZhbHVlc1xuICBWYWx1ZVR5cGUsXG4gIEZvcm11bGFWYWx1ZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIENvbXBvbmVudHMgKGZvciBhZHZhbmNlZCB1c2FnZSlcbmV4cG9ydCB7IFBhcnNlciB9IGZyb20gJy4vcGFyc2VyJztcbmV4cG9ydCB7IExleGVyIH0gZnJvbSAnLi9sZXhlcic7XG5leHBvcnQgeyBFdmFsdWF0b3IgfSBmcm9tICcuL2V2YWx1YXRvcic7XG5leHBvcnQgeyBEZXBlbmRlbmN5RXh0cmFjdG9yIH0gZnJvbSAnLi9kZXBlbmRlbmN5LWV4dHJhY3Rvcic7XG5leHBvcnQgeyBEZXBlbmRlbmN5R3JhcGggYXMgRGVwZW5kZW5jeUdyYXBoSW1wbCwgRGVwZW5kZW5jeUdyYXBoQnVpbGRlciB9IGZyb20gJy4vZGVwZW5kZW5jeS1ncmFwaCc7XG5leHBvcnQgeyBEZWNpbWFsVXRpbHMsIERlY2ltYWwsIERlY2ltYWxMaWtlIH0gZnJvbSAnLi9kZWNpbWFsLXV0aWxzJztcbmV4cG9ydCB7IGNyZWF0ZUJ1aWx0SW5GdW5jdGlvbnMgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5cbi8vIEVycm9yc1xuZXhwb3J0IHtcbiAgRm9ybXVsYUVuZ2luZUVycm9yLFxuICBHZW5lcmFsRm9ybXVsYUVycm9yLFxuICBFcnJvckNhdGVnb3J5LFxuXG4gIC8vIFBhcnNlIGVycm9yc1xuICBTeW50YXhFcnJvcixcbiAgVW5leHBlY3RlZFRva2VuRXJyb3IsXG4gIFVudGVybWluYXRlZFN0cmluZ0Vycm9yLFxuICBJbnZhbGlkTnVtYmVyRXJyb3IsXG5cbiAgLy8gVmFsaWRhdGlvbiBlcnJvcnNcbiAgQ2lyY3VsYXJEZXBlbmRlbmN5RXJyb3IsXG4gIFVuZGVmaW5lZFZhcmlhYmxlRXJyb3IsXG4gIFVuZGVmaW5lZEZ1bmN0aW9uRXJyb3IsXG4gIER1cGxpY2F0ZUZvcm11bGFFcnJvcixcblxuICAvLyBFdmFsdWF0aW9uIGVycm9yc1xuICBEaXZpc2lvbkJ5WmVyb0Vycm9yLFxuICBUeXBlTWlzbWF0Y2hFcnJvcixcbiAgQXJndW1lbnRDb3VudEVycm9yLFxuICBJbnZhbGlkT3BlcmF0aW9uRXJyb3IsXG4gIFByb3BlcnR5QWNjZXNzRXJyb3IsXG4gIEluZGV4QWNjZXNzRXJyb3IsXG5cbiAgLy8gRGVjaW1hbCBlcnJvcnNcbiAgRGVjaW1hbEVycm9yLFxuICBEZWNpbWFsT3ZlcmZsb3dFcnJvcixcbiAgRGVjaW1hbFVuZGVyZmxvd0Vycm9yLFxuICBEZWNpbWFsRGl2aXNpb25CeVplcm9FcnJvcixcbiAgSW52YWxpZERlY2ltYWxFcnJvcixcblxuICAvLyBDb25maWd1cmF0aW9uIGVycm9yc1xuICBDb25maWd1cmF0aW9uRXJyb3IsXG5cbiAgLy8gU2VjdXJpdHkgZXJyb3JzXG4gIFNlY3VyaXR5RXJyb3IsXG4gIE1heEl0ZXJhdGlvbnNFcnJvcixcbiAgTWF4UmVjdXJzaW9uRXJyb3IsXG4gIE1heEV4cHJlc3Npb25MZW5ndGhFcnJvcixcbn0gZnJvbSAnLi9lcnJvcnMnO1xuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZUFBZTtBQUNmLG1EQUFpRDtBQUF4QywrR0FBQSxhQUFhLE9BQUE7QUFFdEIsUUFBUTtBQUNSLGlDQWlEaUI7QUF0Q2YsNEdBQUEsbUJBQW1CLE9BQUE7QUF3Q3JCLGtDQUFrQztBQUNsQyxtQ0FBa0M7QUFBekIsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YsaUNBQWdDO0FBQXZCLDhGQUFBLEtBQUssT0FBQTtBQUNkLHlDQUF3QztBQUEvQixzR0FBQSxTQUFTLE9BQUE7QUFDbEIsK0RBQTZEO0FBQXBELDJIQUFBLG1CQUFtQixPQUFBO0FBQzVCLHVEQUFvRztBQUEzRix1SEFBQSxlQUFlLE9BQXVCO0FBQUUsMEhBQUEsc0JBQXNCLE9BQUE7QUFDdkUsaURBQXFFO0FBQTVELDZHQUFBLFlBQVksT0FBQTtBQUFFLHdHQUFBLE9BQU8sT0FBQTtBQUM5Qix5Q0FBcUQ7QUFBNUMsbUhBQUEsc0JBQXNCLE9BQUE7QUFFL0IsU0FBUztBQUNULG1DQXdDa0I7QUF2Q2hCLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLDZHQUFBLG1CQUFtQixPQUFBO0FBR25CLGVBQWU7QUFDZixxR0FBQSxXQUFXLE9BQUE7QUFDWCw4R0FBQSxvQkFBb0IsT0FBQTtBQUNwQixpSEFBQSx1QkFBdUIsT0FBQTtBQUN2Qiw0R0FBQSxrQkFBa0IsT0FBQTtBQUVsQixvQkFBb0I7QUFDcEIsaUhBQUEsdUJBQXVCLE9BQUE7QUFDdkIsZ0hBQUEsc0JBQXNCLE9BQUE7QUFDdEIsZ0hBQUEsc0JBQXNCLE9BQUE7QUFDdEIsK0dBQUEscUJBQXFCLE9BQUE7QUFFckIsb0JBQW9CO0FBQ3BCLDZHQUFBLG1CQUFtQixPQUFBO0FBQ25CLDJHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLDZHQUFBLG1CQUFtQixPQUFBO0FBQ25CLDBHQUFBLGdCQUFnQixPQUFBO0FBRWhCLGlCQUFpQjtBQUNqQixzR0FBQSxZQUFZLE9BQUE7QUFDWiw4R0FBQSxvQkFBb0IsT0FBQTtBQUNwQiwrR0FBQSxxQkFBcUIsT0FBQTtBQUNyQixvSEFBQSwwQkFBMEIsT0FBQTtBQUMxQiw2R0FBQSxtQkFBbUIsT0FBQTtBQUVuQix1QkFBdUI7QUFDdkIsNEdBQUEsa0JBQWtCLE9BQUE7QUFFbEIsa0JBQWtCO0FBQ2xCLHVHQUFBLGFBQWEsT0FBQTtBQUNiLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLDJHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLGtIQUFBLHdCQUF3QixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTWFpbiBleHBvcnRzXG5leHBvcnQgeyBGb3JtdWxhRW5naW5lIH0gZnJvbSAnLi9mb3JtdWxhLWVuZ2luZSc7XG5cbi8vIFR5cGVzXG5leHBvcnQge1xuICAvLyBDb25maWd1cmF0aW9uXG4gIEZvcm11bGFFbmdpbmVDb25maWcsXG4gIEZvcm11bGFEZWZpbml0aW9uLFxuICBFdmFsdWF0aW9uQ29udGV4dCxcbiAgRnVuY3Rpb25EZWZpbml0aW9uLFxuICBBcmd1bWVudFR5cGUsXG4gIEZ1bmN0aW9uSW1wbGVtZW50YXRpb24sXG5cbiAgLy8gRGVjaW1hbFxuICBEZWNpbWFsQ29uZmlnLFxuICBEZWNpbWFsUm91bmRpbmdNb2RlLFxuICBSb3VuZGluZ0NvbmZpZyxcblxuICAvLyBSZXN1bHRzXG4gIEV2YWx1YXRpb25SZXN1bHQsXG4gIEV2YWx1YXRpb25SZXN1bHRTZXQsXG4gIEV2YWx1YXRlQWxsT3B0aW9ucyxcbiAgVmFsaWRhdGlvblJlc3VsdCxcbiAgQ2FjaGVTdGF0cyxcblxuICAvLyBFcnJvciBoYW5kbGluZ1xuICBFcnJvckJlaGF2aW9yLFxuICBTZWN1cml0eUNvbmZpZyxcblxuICAvLyBBU1Qgbm9kZXNcbiAgQVNUTm9kZSxcbiAgRGVjaW1hbExpdGVyYWwsXG4gIE51bWJlckxpdGVyYWwsXG4gIFN0cmluZ0xpdGVyYWwsXG4gIEJvb2xlYW5MaXRlcmFsLFxuICBOdWxsTGl0ZXJhbCxcbiAgQXJyYXlMaXRlcmFsLFxuICBPYmplY3RMaXRlcmFsLFxuICBPYmplY3RMaXRlcmFsUHJvcGVydHksXG4gIFZhcmlhYmxlUmVmZXJlbmNlLFxuICBCaW5hcnlPcGVyYXRpb24sXG4gIFVuYXJ5T3BlcmF0aW9uLFxuICBDb25kaXRpb25hbEV4cHJlc3Npb24sXG4gIEZ1bmN0aW9uQ2FsbCxcbiAgTWVtYmVyQWNjZXNzLFxuICBJbmRleEFjY2VzcyxcblxuICAvLyBHcmFwaFxuICBEZXBlbmRlbmN5R3JhcGgsXG5cbiAgLy8gVmFsdWVzXG4gIFZhbHVlVHlwZSxcbiAgRm9ybXVsYVZhbHVlLFxufSBmcm9tICcuL3R5cGVzJztcblxuLy8gQ29tcG9uZW50cyAoZm9yIGFkdmFuY2VkIHVzYWdlKVxuZXhwb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi9wYXJzZXInO1xuZXhwb3J0IHsgTGV4ZXIgfSBmcm9tICcuL2xleGVyJztcbmV4cG9ydCB7IEV2YWx1YXRvciB9IGZyb20gJy4vZXZhbHVhdG9yJztcbmV4cG9ydCB7IERlcGVuZGVuY3lFeHRyYWN0b3IgfSBmcm9tICcuL2RlcGVuZGVuY3ktZXh0cmFjdG9yJztcbmV4cG9ydCB7IERlcGVuZGVuY3lHcmFwaCBhcyBEZXBlbmRlbmN5R3JhcGhJbXBsLCBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyIH0gZnJvbSAnLi9kZXBlbmRlbmN5LWdyYXBoJztcbmV4cG9ydCB7IERlY2ltYWxVdGlscywgRGVjaW1hbCwgRGVjaW1hbExpa2UgfSBmcm9tICcuL2RlY2ltYWwtdXRpbHMnO1xuZXhwb3J0IHsgY3JlYXRlQnVpbHRJbkZ1bmN0aW9ucyB9IGZyb20gJy4vZnVuY3Rpb25zJztcblxuLy8gRXJyb3JzXG5leHBvcnQge1xuICBGb3JtdWxhRW5naW5lRXJyb3IsXG4gIEdlbmVyYWxGb3JtdWxhRXJyb3IsXG4gIEVycm9yQ2F0ZWdvcnksXG5cbiAgLy8gUGFyc2UgZXJyb3JzXG4gIFN5bnRheEVycm9yLFxuICBVbmV4cGVjdGVkVG9rZW5FcnJvcixcbiAgVW50ZXJtaW5hdGVkU3RyaW5nRXJyb3IsXG4gIEludmFsaWROdW1iZXJFcnJvcixcblxuICAvLyBWYWxpZGF0aW9uIGVycm9yc1xuICBDaXJjdWxhckRlcGVuZGVuY3lFcnJvcixcbiAgVW5kZWZpbmVkVmFyaWFibGVFcnJvcixcbiAgVW5kZWZpbmVkRnVuY3Rpb25FcnJvcixcbiAgRHVwbGljYXRlRm9ybXVsYUVycm9yLFxuXG4gIC8vIEV2YWx1YXRpb24gZXJyb3JzXG4gIERpdmlzaW9uQnlaZXJvRXJyb3IsXG4gIFR5cGVNaXNtYXRjaEVycm9yLFxuICBBcmd1bWVudENvdW50RXJyb3IsXG4gIEludmFsaWRPcGVyYXRpb25FcnJvcixcbiAgUHJvcGVydHlBY2Nlc3NFcnJvcixcbiAgSW5kZXhBY2Nlc3NFcnJvcixcblxuICAvLyBEZWNpbWFsIGVycm9yc1xuICBEZWNpbWFsRXJyb3IsXG4gIERlY2ltYWxPdmVyZmxvd0Vycm9yLFxuICBEZWNpbWFsVW5kZXJmbG93RXJyb3IsXG4gIERlY2ltYWxEaXZpc2lvbkJ5WmVyb0Vycm9yLFxuICBJbnZhbGlkRGVjaW1hbEVycm9yLFxuXG4gIC8vIENvbmZpZ3VyYXRpb24gZXJyb3JzXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcblxuICAvLyBTZWN1cml0eSBlcnJvcnNcbiAgU2VjdXJpdHlFcnJvcixcbiAgTWF4SXRlcmF0aW9uc0Vycm9yLFxuICBNYXhSZWN1cnNpb25FcnJvcixcbiAgTWF4RXhwcmVzc2lvbkxlbmd0aEVycm9yLFxufSBmcm9tICcuL2Vycm9ycyc7XG4iXX0=