1 /* global $, _, CRM:true */
4 describe('crmCaseType', function() {
14 var defaultAssigneeDefaultValue
;
17 beforeEach(function() {
21 module('crmCaseType');
22 module('crmJsonComparator');
23 inject(function(crmJsonComparator
) {
24 crmJsonComparator
.register(jasmine
);
28 beforeEach(inject(function(_
$controller_
, _
$compile_
, _
$httpBackend_
, _
$q_
, _
$rootScope_
, _
$timeout_
) {
29 $controller
= _
$controller_
;
30 $compile
= _
$compile_
;
31 $httpBackend
= _
$httpBackend_
;
33 $rootScope
= _
$rootScope_
;
34 $rootScope
.ts
= CRM
.ts(null);
35 $timeout
= _
$timeout_
;
38 describe('CaseTypeCtrl', function() {
39 beforeEach(function () {
45 "option_group_id": "25",
58 "option_group_id": "25",
74 "option_group_id": "28",
88 "option_group_id": "28",
105 "option_group_id": "2",
106 "label": "ADC referral",
108 "name": "ADC referral",
119 "option_group_id": "2",
120 "label": "Add Client To Case",
122 "name": "Add Client To Case",
134 "option_group_id": "2",
135 "label": "Open Case",
145 "icon": "fa-folder-open-o"
149 "option_group_id": "2",
150 "label": "Medical evaluation",
152 "name": "Medical evaluation",
167 "name_a_b": "Benefits Specialist is",
168 "label_a_b": "Benefits Specialist is",
169 "name_b_a": "Benefits Specialist",
170 "label_b_a": "Benefits Specialist",
171 "description": "Benefits Specialist",
172 "contact_type_a": "Individual",
173 "contact_type_b": "Individual",
179 "name_a_b": "Case Coordinator is",
180 "label_a_b": "Case Coordinator is",
181 "name_b_a": "Case Coordinator",
182 "label_b_a": "Case Coordinator",
183 "description": "Case Coordinator",
184 "contact_type_a": "Individual",
185 "contact_type_b": "Individual",
191 "name_a_b": "Homeless Services Coordinator is",
192 "label_a_b": "Homeless Services Coordinator is",
193 "name_b_a": "Homeless Services Coordinator",
194 "label_b_a": "Homeless Services Coordinator",
195 "description": "Homeless Services Coordinator",
196 "contact_type_a": "Individual",
197 "contact_type_b": "Individual",
203 "name_a_b": "Spouse of",
204 "label_a_b": "Spouse of",
205 "name_b_a": "Spouse of",
206 "label_b_a": "Spouse of",
207 "description": "Spousal relationship.",
208 "contact_type_a": "Individual",
209 "contact_type_b": "Individual",
213 // include one where name is different from label
216 "name_a_b": "GA123ab",
217 "label_a_b": "Guardian Angel is",
218 "name_b_a": "GA123ba",
219 "label_b_a": "Guardian Angel for",
220 "description": "Guardian Angel.",
221 "contact_type_a": "Individual",
222 "contact_type_b": "Individual",
230 "name": "housing_support",
231 "title": "Housing Support",
232 "description": "Help homeless individuals obtain temporary and long-term housing",
240 {"name": "Open Case", "max_instances": "1"}
244 "name": "standard_timeline",
245 "label": "Standard Timeline",
250 "status": "Completed"
253 "name": "Medical evaluation",
254 "reference_activity": "Open Case",
255 "reference_offset": "1",
256 "reference_select": "newest"
263 "name": "Homeless Services Coordinator",
270 defaultAssigneeTypes
: {
274 "option_group_id": "152",
287 "option_group_id": "152",
288 "label": "By relationship to workflow client",
290 "name": "BY_RELATIONSHIP",
300 "option_group_id": "152",
301 "label": "Specific contact",
303 "name": "SPECIFIC_CONTACT",
313 "option_group_id": "152",
314 "label": "User creating the workflow",
316 "name": "USER_CREATING_THE_CASE",
327 defaultAssigneeDefaultValue
= _
.find(apiCalls
.defaultAssigneeTypes
.values
, { is_default
: '1' });
328 scope
= $rootScope
.$new();
329 ctrl
= $controller('CaseTypeCtrl', {$scope
: scope
, apiCalls
: apiCalls
});
332 it('should load activity statuses', function() {
333 expect(scope
.activityStatuses
).toEqualData(apiCalls
.actStatuses
.values
);
336 it('should load activity types', function() {
337 expect(scope
.activityTypes
['ADC referral']).toEqualData(apiCalls
.actTypes
.values
[0]);
340 it('should store the default assignee types', function() {
341 expect(scope
.defaultAssigneeTypes
).toBe(apiCalls
.defaultAssigneeTypes
.values
);
344 it('should store the default assignee types values indexed by name', function() {
345 var defaultAssigneeTypeValues
= _
.chain(apiCalls
.defaultAssigneeTypes
.values
)
346 .indexBy('name').mapValues('value').value();
348 expect(scope
.defaultAssigneeTypeValues
).toEqual(defaultAssigneeTypeValues
);
351 it('should compute the relationship type options', function() {
352 var expectedRelationshipTypeOptions
= [
355 "text": "Benefits Specialist",
356 "xmlName": "Benefits Specialist is"
360 "text": "Benefits Specialist is",
361 "xmlName": "Benefits Specialist"
365 "text": "Case Coordinator",
366 "xmlName": "Case Coordinator is"
370 "text": "Case Coordinator is",
371 "xmlName": "Case Coordinator"
375 "text": "Homeless Services Coordinator",
376 "xmlName": "Homeless Services Coordinator is"
380 "text": "Homeless Services Coordinator is",
381 "xmlName": "Homeless Services Coordinator"
383 // Bidirectional, so should only have the one direction in the list
387 "xmlName": "Spouse of"
389 // include one where name is different from label
392 "text": "Guardian Angel for",
393 "xmlName": "GA123ab",
397 "text": "Guardian Angel is",
398 "xmlName": "GA123ba",
402 expect(scope
.relationshipTypeOptions
).toEqual(expectedRelationshipTypeOptions
);
405 it('addActivitySet should add an activitySet to the case type', function() {
406 scope
.addActivitySet('timeline');
407 var activitySets
= scope
.caseType
.definition
.activitySets
;
408 var newSet
= activitySets
[activitySets
.length
- 1];
409 expect(newSet
.name
).toBe('timeline_1');
410 expect(newSet
.timeline
).toBe('1');
411 expect(newSet
.label
).toBe('Timeline');
414 it('addActivitySet handles second timeline correctly', function() {
415 scope
.addActivitySet('timeline');
416 scope
.addActivitySet('timeline');
417 var activitySets
= scope
.caseType
.definition
.activitySets
;
418 var newSet
= activitySets
[activitySets
.length
- 1];
419 expect(newSet
.name
).toBe('timeline_2');
420 expect(newSet
.timeline
).toBe('1');
421 expect(newSet
.label
).toBe('Timeline #2');
424 describe('when clearing the activity\'s default assignee type values', function() {
427 beforeEach(function() {
429 default_assignee_relationship
: 1,
430 default_assignee_contact
: 2
433 scope
.clearActivityDefaultAssigneeValues(activity
);
436 it('clears the default assignee relationship for the activity', function() {
437 expect(activity
.default_assignee_relationship
).toBe(null);
440 it('clears the default assignee contact for the activity', function() {
441 expect(activity
.default_assignee_contact
).toBe(null);
445 describe('when adding a new activity to a set', function() {
448 beforeEach(function() {
449 activitySet
= { activityTypes
: [] };
450 scope
.activityTypes
= { comment
: { label
: 'Add a new comment' } };
452 scope
.addActivity(activitySet
, 'comment');
455 it('adds a new Comment activity to the set', function() {
456 expect(activitySet
.activityTypes
[0]).toEqual({
458 label
: scope
.activityTypes
.comment
.label
,
460 reference_activity
: 'Open Case',
461 reference_offset
: '1',
462 reference_select
: 'newest',
463 default_assignee_type
: defaultAssigneeDefaultValue
.value
468 describe('when creating a new workflow', function() {
469 beforeEach(inject(function ($controller
) {
470 apiCalls
.caseType
= null;
472 ctrl
= $controller('CaseTypeCtrl', {$scope
: scope
, apiCalls
: apiCalls
});
475 it('sets default values for the case type title, name, and active status', function() {
476 expect(scope
.caseType
).toEqual(jasmine
.objectContaining({
483 it('adds an Open Case activty to the default activty set', function() {
484 expect(scope
.caseType
.definition
.activitySets
[0].activityTypes
).toEqual([{
488 default_assignee_type
: defaultAssigneeDefaultValue
.value
493 describe('when adding a role', function() {
494 beforeEach(inject(function ($controller
) {
495 ctrl
= $controller('CaseTypeCtrl', {$scope
: scope
, apiCalls
: apiCalls
});
498 it('updates the case roles', function() {
500 // This line sort of simulates selecting a relationship type from the
501 // dropdown. It doesn't test that clicking picks the right value to
502 // add, just that if it did then the function that gets called does
503 // the right thing with it.
504 // Note the value returned by the dropdown is "backwards" to match
505 // historically what has been stored in the xml as name, e.g.
506 // for the client perspective direction the dropdown returns the other
508 // So 9_b_a is "Case Coordinator", which means that they actually
509 // selected "Case Coordinator is".
510 scope
.addRole(scope
.caseType
.definition
.caseRoles
, '9_b_a');
512 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
515 name
: 'Homeless Services Coordinator',
518 displayLabel
: 'Homeless Services Coordinator is'
521 name
: 'Case Coordinator',
522 displayLabel
: 'Case Coordinator is'
528 it('updates case roles when name and label are different', function() {
529 scope
.addRole(scope
.caseType
.definition
.caseRoles
, '27_b_a');
530 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
533 name
: 'Homeless Services Coordinator',
536 displayLabel
: 'Homeless Services Coordinator is'
540 displayLabel
: 'Guardian Angel is'
546 it('updates case roles if choose non-client-perspective direction', function() {
547 // again, the dropdown returns the opposite direction
548 scope
.addRole(scope
.caseType
.definition
.caseRoles
, '10_a_b');
549 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
552 name
: 'Homeless Services Coordinator',
555 displayLabel
: 'Homeless Services Coordinator is'
558 name
: 'Homeless Services Coordinator is',
559 displayLabel
: 'Homeless Services Coordinator'
565 it('updates case roles non-client-perspective direction name/label different', function() {
566 scope
.addRole(scope
.caseType
.definition
.caseRoles
, '27_a_b');
567 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
570 name
: 'Homeless Services Coordinator',
573 displayLabel
: 'Homeless Services Coordinator is'
577 displayLabel
: 'Guardian Angel for'
583 it("doesn't add the same role twice", function() {
584 // This is in the mock casetype to start, so check if can add twice.
585 scope
.addRole(scope
.caseType
.definition
.caseRoles
, '10_b_a');
586 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
589 name
: 'Homeless Services Coordinator',
592 displayLabel
: 'Homeless Services Coordinator is'
597 // Try with name and label different. We already tested one time in
598 // another test so just go straight to twice.
599 scope
.addRole(scope
.caseType
.definition
.caseRoles
, '27_b_a');
600 scope
.addRole(scope
.caseType
.definition
.caseRoles
, '27_b_a');
601 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
604 name
: 'Homeless Services Coordinator',
607 displayLabel
: 'Homeless Services Coordinator is'
611 displayLabel
: 'Guardian Angel is'
618 describe('when adding a role on-the-fly', function() {
619 beforeEach(inject(function ($controller
) {
620 ctrl
= $controller('CaseTypeCtrl', {$scope
: scope
, apiCalls
: apiCalls
});
623 it('updates the case roles for unidirectional', function() {
624 // first simulate the ajax popup to create a new relationship type
627 "name_a_b": "Some New Type is",
628 "label_a_b": "Some New Type is",
629 "name_b_a": "Some New Type for",
630 "label_b_a": "Some New Type for",
631 "description": "Some New Type",
632 "contact_type_a": "Individual",
633 "contact_type_b": "Individual",
638 // now let the real code do what it does with the new type
639 scope
.addRoleOnTheFly(scope
.caseType
.definition
.caseRoles
, newType
);
641 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
644 name
: 'Homeless Services Coordinator',
647 displayLabel
: 'Homeless Services Coordinator is'
650 name
: 'Some New Type for',
651 displayLabel
: 'Some New Type is'
656 expect(scope
.relationshipTypeOptions
.slice(-2)).toEqual(
659 xmlName
: 'Some New Type is',
661 text
: 'Some New Type for'
664 xmlName
: 'Some New Type for',
666 text
: 'Some New Type is'
672 it('updates the case roles for bidirectional', function() {
673 // first simulate the ajax popup to create a new relationship type
676 "name_a_b": "Friend of",
677 "label_a_b": "Friend of",
678 "name_b_a": "Friend of",
679 "label_b_a": "Friend of",
680 "description": "Friend",
681 "contact_type_a": "Individual",
682 "contact_type_b": "Individual",
687 // now let the real code do what it does with the new type
688 scope
.addRoleOnTheFly(scope
.caseType
.definition
.caseRoles
, newType
);
690 expect(scope
.caseType
.definition
.caseRoles
).toEqual(
693 name
: 'Homeless Services Coordinator',
696 displayLabel
: 'Homeless Services Coordinator is'
700 displayLabel
: 'Friend of'
705 expect(scope
.relationshipTypeOptions
.slice(-1)).toEqual(
708 xmlName
: 'Friend of',
715 // Check that it did NOT add two entries for this bidirectional type
716 expect(scope
.relationshipTypeOptions
.slice(-2,-1)).not
.toEqual(
719 xmlName
: 'Friend of',
729 describe('crmEditableTabTitle', function () {
730 var element
, titleLabel
, penIcon
, saveButton
, cancelButton
;
732 beforeEach(function() {
733 scope
= $rootScope
.$new();
734 element
= '<div crm-editable-tab-title title="Click to edit">' +
735 '<span>{{ activitySet.label }}</span>' +
738 scope
.activitySet
= { label
: 'Title'};
739 element
= $compile(element
)(scope
);
741 titleLabel
= $(element
).find('span');
742 penIcon
= $(element
).find('i.fa-pencil');
743 saveButton
= $(element
).find('button[type=button]');
744 cancelButton
= $(element
).find('button[type=cancel]');
749 describe('when initialized', function () {
750 it('hides the save and cancel button', function () {
751 expect(saveButton
.parent().css('display') === 'none').toBe(true);
752 expect(cancelButton
.parent().css('display') === 'none').toBe(true);
756 describe('when clicked on title label', function () {
757 beforeEach(function () {
761 it('hides the pen icon', function () {
762 expect(penIcon
.css('display') === 'none').toBe(true);
765 it('shows the save button', function () {
766 expect(saveButton
.parent().css('display') !== 'none').toBe(true);
769 it('makes the title editable', function () {
770 expect(titleLabel
.attr('contenteditable')).toBe('true');
774 describe('when clicked outside of the editable area', function () {
775 beforeEach(function () {
777 titleLabel
.text('Updated Title');
783 it('shows the pen icon', function () {
784 expect(penIcon
.css('display') !== 'none').toBe(true);
787 it('hides the save and cancel button', function () {
788 expect(saveButton
.parent().css('display') === 'none').toBe(true);
789 expect(cancelButton
.parent().css('display') === 'none').toBe(true);
792 it('makes the title non editable', function () {
793 expect(titleLabel
.attr('contenteditable')).not
.toBe('true');
796 it('does not update the title in angular context', function () {
797 expect(scope
.activitySet
.label
).toBe('Title');
801 describe('when ESCAPE key is pressed while typing', function () {
802 beforeEach(function () {
803 var eventObj
= $.Event('keydown');
804 eventObj
.key
= 'Escape';
807 titleLabel
.text('Updated Title');
808 titleLabel
.trigger(eventObj
);
812 it('shows the pen icon', function () {
813 expect(penIcon
.css('display') !== 'none').toBe(true);
816 it('hides the save and cancel button', function () {
817 expect(saveButton
.parent().css('display') === 'none').toBe(true);
818 expect(cancelButton
.parent().css('display') === 'none').toBe(true);
821 it('makes the title non editable', function () {
822 expect(titleLabel
.attr('contenteditable')).not
.toBe('true');
825 it('does not update the title', function () {
826 expect(scope
.activitySet
.label
).toBe('Title');
830 describe('when ENTER key is pressed while typing', function () {
831 beforeEach(function () {
832 var eventObj
= $.Event('keydown');
833 eventObj
.key
= 'Enter';
836 titleLabel
.text('Updated Title');
837 titleLabel
.trigger(eventObj
);
841 it('shows the pen icon', function () {
842 expect(penIcon
.css('display') !== 'none').toBe(true);
845 it('hides the save and cancel button', function () {
846 expect(saveButton
.parent().css('display') === 'none').toBe(true);
847 expect(cancelButton
.parent().css('display') === 'none').toBe(true);
850 it('makes the title non editable', function () {
851 expect(titleLabel
.attr('contenteditable')).not
.toBe('true');
854 it('updates the title in angular context', function () {
855 expect(scope
.activitySet
.label
).toBe('Updated Title');
859 describe('when SAVE button is clicked', function () {
860 beforeEach(function () {
862 titleLabel
.text('Updated Title');
867 it('shows the pen icon', function () {
868 expect(penIcon
.css('display') !== 'none').toBe(true);
871 it('hides the save and cancel button', function () {
872 expect(saveButton
.parent().css('display') === 'none').toBe(true);
873 expect(cancelButton
.parent().css('display') === 'none').toBe(true);
876 it('makes the title non editable', function () {
877 expect(titleLabel
.attr('contenteditable')).not
.toBe('true');
880 it('updates the title in angular context', function () {
881 expect(scope
.activitySet
.label
).toBe('Updated Title');
885 describe('when CANCEL button is clicked', function () {
886 beforeEach(function () {
888 titleLabel
.text('Updated Title');
889 cancelButton
.click();
893 it('shows the pen icon', function () {
894 expect(penIcon
.css('display') !== 'none').toBe(true);
897 it('hides the save and cancel button', function () {
898 expect(saveButton
.parent().css('display') === 'none').toBe(true);
899 expect(cancelButton
.parent().css('display') === 'none').toBe(true);
902 it('makes the title non editable', function () {
903 expect(titleLabel
.attr('contenteditable')).not
.toBe('true');
906 it('does not update the title in angular context', function () {
907 expect(scope
.activitySet
.label
).toBe('Title');
912 describe('CaseTypeListCtrl', function() {
913 var caseTypes
, crmApiSpy
;
915 beforeEach(function() {
923 crmApiSpy
= jasmine
.createSpy('crmApi').and
.returnValue($q
.resolve());
924 scope
= $rootScope
.$new();
925 ctrl
= $controller('CaseTypeListCtrl', {
927 caseTypes
: caseTypes
,
932 it('should store an index of case types', function() {
933 expect(scope
.caseTypes
).toEqual(caseTypes
.values
);
936 describe('toggleCaseType', function() {
937 var caseType
= { id
: _
.uniqueId() };
939 describe('when the case is active', function() {
940 beforeEach(function() {
941 caseType
.is_active
= '1';
943 scope
.toggleCaseType(caseType
);
946 it('sets the case type as inactive', function() {
947 expect(crmApiSpy
).toHaveBeenCalledWith('CaseType', 'create', jasmine
.objectContaining({
954 describe('when the case is inactive', function() {
955 beforeEach(function() {
956 caseType
.is_active
= '0';
958 scope
.toggleCaseType(caseType
);
961 it('sets the case type as active', function() {
962 expect(crmApiSpy
).toHaveBeenCalledWith('CaseType', 'create', jasmine
.objectContaining({
970 describe('deleteCaseType', function() {
971 var caseType
= { id
: _
.uniqueId() };
973 beforeEach(function() {
974 crmApiSpy
.and
.returnValue($q
.resolve(caseType
));
975 scope
.caseTypes
[caseType
.id
] = caseType
;
977 scope
.deleteCaseType(caseType
);
981 describe('when the case type can be deleted', function() {
982 it('deletes the case from the api', function() {
983 expect(crmApiSpy
).toHaveBeenCalledWith('CaseType', 'delete', { id
: caseType
.id
}, jasmine
.any(Object
));
986 it('removes the case type from the list', function() {
987 expect(scope
.caseTypes
[caseType
.id
]).toBeUndefined();
991 describe('revertCaseType', function() {
998 describe('when reverting a case type', function() {
999 beforeEach(function() {
1000 scope
.revertCaseType(caseType
);
1003 it('resets the case type information using the api', function() {
1004 expect(crmApiSpy
).toHaveBeenCalledWith('CaseType', 'create', jasmine
.objectContaining({
1014 // Test show/hide for the various dropdown actions
1015 describe('showandtell', function() {
1019 // $templateCache is populated by the nghtml2js plugin. See karma.conf.js
1020 // I'm not sure why it can't be injected higher up in the hierarchy. It doesn't seem to work?
1021 beforeEach(inject(function($templateCache
) {
1022 scope
= $rootScope
.$new();
1023 templateCache
= $templateCache
;
1024 template
= templateCache
.get('~/crmCaseType/list.html');
1027 // Helper function which we call repeatedly. It can't be in beforeEach
1028 // because then the timing is wrong because we need different caseTypes
1029 // in each test, which happens of course after beforeEach.
1030 var compileTemplate = function(scope
) {
1031 var element
= $compile(template
)(scope
);
1036 // This is the workhorse function that does the actual test, called
1037 // repeatedly for each case type variation from the `it()` below.
1038 var doTest = function(inputCaseType
, expected
) {
1039 // Mock up our case types based on input, merging some static info
1040 // with the variable input.
1043 title
: 'Housing Support',
1044 name
: 'housing_support'
1046 // PhantomJS at the moment doesn't support ES6, so do a loop.
1047 for (var memberVar
in inputCaseType
) {
1048 caseType
[memberVar
] = inputCaseType
[memberVar
];
1054 // Render the template in the context of our scope now that the scope
1055 // contains our mock case types.
1056 var element
= compileTemplate(scope
);
1057 //console.debug(element);
1060 // Now verify the expected values
1063 // Useful variable for displaying the inputs that caused failure
1064 // in readable form.
1065 var inputStr
= JSON
.stringify(inputCaseType
);
1067 expect(element
.find('span.more-panel').hasClass('ng-hide')).toBe(expected
.more_hidden
, 'More link should be ' +
1068 (expected
.more_hidden
? 'hidden' : 'visible') +
1069 ' for ' + inputStr
);
1071 expect(element
.find('li.panel-item-enable').hasClass('ng-hide')).toBe(expected
.enable_hidden
, 'Enable should be ' +
1072 (expected
.enable_hidden
? 'hidden' : 'visible') +
1073 ' for ' + inputStr
);
1075 expect(element
.find('li.panel-item-disable').hasClass('ng-hide')).toBe(expected
.disable_hidden
, 'Disable should be ' +
1076 (expected
.disable_hidden
? 'hidden' : 'visible') +
1077 ' for ' + inputStr
);
1079 expect(element
.find('li.panel-item-revert').hasClass('ng-hide')).toBe(expected
.revert_hidden
, 'Revert should be ' +
1080 (expected
.revert_hidden
? 'hidden' : 'visible') +
1081 ' for ' + inputStr
);
1083 expect(element
.find('li.panel-item-delete').hasClass('ng-hide')).toBe(expected
.delete_hidden
, 'Delete should be ' +
1084 (expected
.delete_hidden
? 'hidden' : 'visible') +
1085 ' for ' + inputStr
);
1088 // Test show/hide for the various dropdown actions
1090 // There's 625 assertions.
1091 // Three variables: [is_active, is_forked, is_reserved],
1092 // each with 5 possible values: [0, 1, "0", "1", undefined].
1093 // Then, multiply that by 5 because there are 5 UI elements
1095 // So 125 possible input tuples, with 5 things to check in each test.
1096 it('to be or not to be', function() {
1097 var caseTypeSimulations
= [
1100 {"is_active": "1", "is_reserved": "0"},
1102 // should more link be hidden
1103 "more_hidden": false,
1104 // should enable choice be hidden
1105 "enable_hidden": true,
1106 // should disable choice be hidden
1107 "disable_hidden": false,
1108 // should revert choice be hidden
1109 "revert_hidden": true,
1110 // should delete choice be hidden
1111 "delete_hidden": false
1116 {"is_active":0,"is_reserved":0,"is_forked":0},
1118 "more_hidden": false,
1119 "enable_hidden": false,
1120 "disable_hidden": true,
1121 "revert_hidden": true,
1122 "delete_hidden": false
1127 {"is_active":0,"is_reserved":0,"is_forked":1},
1129 "more_hidden": false,
1130 "enable_hidden": false,
1131 "disable_hidden": true,
1132 "revert_hidden": false,
1133 "delete_hidden": false
1138 {"is_active":0,"is_reserved":0,"is_forked":"0"},
1140 "more_hidden": false,
1141 "enable_hidden": false,
1142 "disable_hidden": true,
1143 "revert_hidden": true,
1144 "delete_hidden": false
1149 {"is_active":0,"is_reserved":0,"is_forked":"1"},
1151 "more_hidden": false,
1152 "enable_hidden": false,
1153 "disable_hidden": true,
1154 "revert_hidden": false,
1155 "delete_hidden": false
1160 {"is_active":0,"is_reserved":0},
1162 "more_hidden": false,
1163 "enable_hidden": false,
1164 "disable_hidden": true,
1165 "revert_hidden": true,
1166 "delete_hidden": false
1171 {"is_active":0,"is_reserved":1,"is_forked":0},
1173 "more_hidden": false,
1174 "enable_hidden": false,
1175 "disable_hidden": true,
1176 "revert_hidden": true,
1177 "delete_hidden": true
1182 {"is_active":0,"is_reserved":1,"is_forked":1},
1184 "more_hidden": false,
1185 "enable_hidden": false,
1186 "disable_hidden": true,
1187 "revert_hidden": false,
1188 "delete_hidden": true
1193 {"is_active":0,"is_reserved":1,"is_forked":"0"},
1195 "more_hidden": false,
1196 "enable_hidden": false,
1197 "disable_hidden": true,
1198 "revert_hidden": true,
1199 "delete_hidden": true
1204 {"is_active":0,"is_reserved":1,"is_forked":"1"},
1206 "more_hidden": false,
1207 "enable_hidden": false,
1208 "disable_hidden": true,
1209 "revert_hidden": false,
1210 "delete_hidden": true
1215 {"is_active":0,"is_reserved":1},
1217 "more_hidden": false,
1218 "enable_hidden": false,
1219 "disable_hidden": true,
1220 "revert_hidden": true,
1221 "delete_hidden": true
1226 {"is_active":0,"is_reserved":"0","is_forked":0},
1228 "more_hidden": false,
1229 "enable_hidden": false,
1230 "disable_hidden": true,
1231 "revert_hidden": true,
1232 "delete_hidden": false
1237 {"is_active":0,"is_reserved":"0","is_forked":1},
1239 "more_hidden": false,
1240 "enable_hidden": false,
1241 "disable_hidden": true,
1242 "revert_hidden": false,
1243 "delete_hidden": false
1248 {"is_active":0,"is_reserved":"0","is_forked":"0"},
1250 "more_hidden": false,
1251 "enable_hidden": false,
1252 "disable_hidden": true,
1253 "revert_hidden": true,
1254 "delete_hidden": false
1259 {"is_active":0,"is_reserved":"0","is_forked":"1"},
1261 "more_hidden": false,
1262 "enable_hidden": false,
1263 "disable_hidden": true,
1264 "revert_hidden": false,
1265 "delete_hidden": false
1270 {"is_active":0,"is_reserved":"0"},
1272 "more_hidden": false,
1273 "enable_hidden": false,
1274 "disable_hidden": true,
1275 "revert_hidden": true,
1276 "delete_hidden": false
1281 {"is_active":0,"is_reserved":"1","is_forked":0},
1283 "more_hidden": false,
1284 "enable_hidden": false,
1285 "disable_hidden": true,
1286 "revert_hidden": true,
1287 "delete_hidden": true
1292 {"is_active":0,"is_reserved":"1","is_forked":1},
1294 "more_hidden": false,
1295 "enable_hidden": false,
1296 "disable_hidden": true,
1297 "revert_hidden": false,
1298 "delete_hidden": true
1303 {"is_active":0,"is_reserved":"1","is_forked":"0"},
1305 "more_hidden": false,
1306 "enable_hidden": false,
1307 "disable_hidden": true,
1308 "revert_hidden": true,
1309 "delete_hidden": true
1314 {"is_active":0,"is_reserved":"1","is_forked":"1"},
1316 "more_hidden": false,
1317 "enable_hidden": false,
1318 "disable_hidden": true,
1319 "revert_hidden": false,
1320 "delete_hidden": true
1325 {"is_active":0,"is_reserved":"1"},
1327 "more_hidden": false,
1328 "enable_hidden": false,
1329 "disable_hidden": true,
1330 "revert_hidden": true,
1331 "delete_hidden": true
1336 {"is_active":0,"is_forked":0},
1338 "more_hidden": false,
1339 "enable_hidden": false,
1340 "disable_hidden": true,
1341 "revert_hidden": true,
1342 "delete_hidden": false
1347 {"is_active":0,"is_forked":1},
1349 "more_hidden": false,
1350 "enable_hidden": false,
1351 "disable_hidden": true,
1352 "revert_hidden": false,
1353 "delete_hidden": false
1358 {"is_active":0,"is_forked":"0"},
1360 "more_hidden": false,
1361 "enable_hidden": false,
1362 "disable_hidden": true,
1363 "revert_hidden": true,
1364 "delete_hidden": false
1369 {"is_active":0,"is_forked":"1"},
1371 "more_hidden": false,
1372 "enable_hidden": false,
1373 "disable_hidden": true,
1374 "revert_hidden": false,
1375 "delete_hidden": false
1382 "more_hidden": false,
1383 "enable_hidden": false,
1384 "disable_hidden": true,
1385 "revert_hidden": true,
1386 "delete_hidden": false
1391 {"is_active":1,"is_reserved":0,"is_forked":0},
1393 "more_hidden": false,
1394 "enable_hidden": true,
1395 "disable_hidden": false,
1396 "revert_hidden": true,
1397 "delete_hidden": false
1402 {"is_active":1,"is_reserved":0,"is_forked":1},
1404 "more_hidden": false,
1405 "enable_hidden": true,
1406 "disable_hidden": false,
1407 "revert_hidden": false,
1408 "delete_hidden": false
1413 {"is_active":1,"is_reserved":0,"is_forked":"0"},
1415 "more_hidden": false,
1416 "enable_hidden": true,
1417 "disable_hidden": false,
1418 "revert_hidden": true,
1419 "delete_hidden": false
1424 {"is_active":1,"is_reserved":0,"is_forked":"1"},
1426 "more_hidden": false,
1427 "enable_hidden": true,
1428 "disable_hidden": false,
1429 "revert_hidden": false,
1430 "delete_hidden": false
1435 {"is_active":1,"is_reserved":0},
1437 "more_hidden": false,
1438 "enable_hidden": true,
1439 "disable_hidden": false,
1440 "revert_hidden": true,
1441 "delete_hidden": false
1446 {"is_active":1,"is_reserved":1,"is_forked":0},
1448 "more_hidden": true,
1449 "enable_hidden": true,
1450 "disable_hidden": true,
1451 "revert_hidden": true,
1452 "delete_hidden": true
1457 {"is_active":1,"is_reserved":1,"is_forked":1},
1459 "more_hidden": false,
1460 "enable_hidden": true,
1461 "disable_hidden": true,
1462 "revert_hidden": false,
1463 "delete_hidden": true
1468 {"is_active":1,"is_reserved":1,"is_forked":"0"},
1470 "more_hidden": true,
1471 "enable_hidden": true,
1472 "disable_hidden": true,
1473 "revert_hidden": true,
1474 "delete_hidden": true
1479 {"is_active":1,"is_reserved":1,"is_forked":"1"},
1481 "more_hidden": false,
1482 "enable_hidden": true,
1483 "disable_hidden": true,
1484 "revert_hidden": false,
1485 "delete_hidden": true
1490 {"is_active":1,"is_reserved":1},
1492 "more_hidden": true,
1493 "enable_hidden": true,
1494 "disable_hidden": true,
1495 "revert_hidden": true,
1496 "delete_hidden": true
1501 {"is_active":1,"is_reserved":"0","is_forked":0},
1503 "more_hidden": false,
1504 "enable_hidden": true,
1505 "disable_hidden": false,
1506 "revert_hidden": true,
1507 "delete_hidden": false
1512 {"is_active":1,"is_reserved":"0","is_forked":1},
1514 "more_hidden": false,
1515 "enable_hidden": true,
1516 "disable_hidden": false,
1517 "revert_hidden": false,
1518 "delete_hidden": false
1523 {"is_active":1,"is_reserved":"0","is_forked":"0"},
1525 "more_hidden": false,
1526 "enable_hidden": true,
1527 "disable_hidden": false,
1528 "revert_hidden": true,
1529 "delete_hidden": false
1534 {"is_active":1,"is_reserved":"0","is_forked":"1"},
1536 "more_hidden": false,
1537 "enable_hidden": true,
1538 "disable_hidden": false,
1539 "revert_hidden": false,
1540 "delete_hidden": false
1545 {"is_active":1,"is_reserved":"0"},
1547 "more_hidden": false,
1548 "enable_hidden": true,
1549 "disable_hidden": false,
1550 "revert_hidden": true,
1551 "delete_hidden": false
1556 {"is_active":1,"is_reserved":"1","is_forked":0},
1558 "more_hidden": true,
1559 "enable_hidden": true,
1560 "disable_hidden": true,
1561 "revert_hidden": true,
1562 "delete_hidden": true
1567 {"is_active":1,"is_reserved":"1","is_forked":1},
1569 "more_hidden": false,
1570 "enable_hidden": true,
1571 "disable_hidden": true,
1572 "revert_hidden": false,
1573 "delete_hidden": true
1578 {"is_active":1,"is_reserved":"1","is_forked":"0"},
1580 "more_hidden": true,
1581 "enable_hidden": true,
1582 "disable_hidden": true,
1583 "revert_hidden": true,
1584 "delete_hidden": true
1589 {"is_active":1,"is_reserved":"1","is_forked":"1"},
1591 "more_hidden": false,
1592 "enable_hidden": true,
1593 "disable_hidden": true,
1594 "revert_hidden": false,
1595 "delete_hidden": true
1600 {"is_active":1,"is_reserved":"1"},
1602 "more_hidden": true,
1603 "enable_hidden": true,
1604 "disable_hidden": true,
1605 "revert_hidden": true,
1606 "delete_hidden": true
1611 {"is_active":1,"is_forked":0},
1613 "more_hidden": false,
1614 "enable_hidden": true,
1615 "disable_hidden": false,
1616 "revert_hidden": true,
1617 "delete_hidden": false
1622 {"is_active":1,"is_forked":1},
1624 "more_hidden": false,
1625 "enable_hidden": true,
1626 "disable_hidden": false,
1627 "revert_hidden": false,
1628 "delete_hidden": false
1633 {"is_active":1,"is_forked":"0"},
1635 "more_hidden": false,
1636 "enable_hidden": true,
1637 "disable_hidden": false,
1638 "revert_hidden": true,
1639 "delete_hidden": false
1644 {"is_active":1,"is_forked":"1"},
1646 "more_hidden": false,
1647 "enable_hidden": true,
1648 "disable_hidden": false,
1649 "revert_hidden": false,
1650 "delete_hidden": false
1657 "more_hidden": false,
1658 "enable_hidden": true,
1659 "disable_hidden": false,
1660 "revert_hidden": true,
1661 "delete_hidden": false
1666 {"is_active":"0","is_reserved":0,"is_forked":0},
1668 "more_hidden": false,
1669 "enable_hidden": false,
1670 "disable_hidden": true,
1671 "revert_hidden": true,
1672 "delete_hidden": false
1677 {"is_active":"0","is_reserved":0,"is_forked":1},
1679 "more_hidden": false,
1680 "enable_hidden": false,
1681 "disable_hidden": true,
1682 "revert_hidden": false,
1683 "delete_hidden": false
1688 {"is_active":"0","is_reserved":0,"is_forked":"0"},
1690 "more_hidden": false,
1691 "enable_hidden": false,
1692 "disable_hidden": true,
1693 "revert_hidden": true,
1694 "delete_hidden": false
1699 {"is_active":"0","is_reserved":0,"is_forked":"1"},
1701 "more_hidden": false,
1702 "enable_hidden": false,
1703 "disable_hidden": true,
1704 "revert_hidden": false,
1705 "delete_hidden": false
1710 {"is_active":"0","is_reserved":0},
1712 "more_hidden": false,
1713 "enable_hidden": false,
1714 "disable_hidden": true,
1715 "revert_hidden": true,
1716 "delete_hidden": false
1721 {"is_active":"0","is_reserved":1,"is_forked":0},
1723 "more_hidden": false,
1724 "enable_hidden": false,
1725 "disable_hidden": true,
1726 "revert_hidden": true,
1727 "delete_hidden": true
1732 {"is_active":"0","is_reserved":1,"is_forked":1},
1734 "more_hidden": false,
1735 "enable_hidden": false,
1736 "disable_hidden": true,
1737 "revert_hidden": false,
1738 "delete_hidden": true
1743 {"is_active":"0","is_reserved":1,"is_forked":"0"},
1745 "more_hidden": false,
1746 "enable_hidden": false,
1747 "disable_hidden": true,
1748 "revert_hidden": true,
1749 "delete_hidden": true
1754 {"is_active":"0","is_reserved":1,"is_forked":"1"},
1756 "more_hidden": false,
1757 "enable_hidden": false,
1758 "disable_hidden": true,
1759 "revert_hidden": false,
1760 "delete_hidden": true
1765 {"is_active":"0","is_reserved":1},
1767 "more_hidden": false,
1768 "enable_hidden": false,
1769 "disable_hidden": true,
1770 "revert_hidden": true,
1771 "delete_hidden": true
1776 {"is_active":"0","is_reserved":"0","is_forked":0},
1778 "more_hidden": false,
1779 "enable_hidden": false,
1780 "disable_hidden": true,
1781 "revert_hidden": true,
1782 "delete_hidden": false
1787 {"is_active":"0","is_reserved":"0","is_forked":1},
1789 "more_hidden": false,
1790 "enable_hidden": false,
1791 "disable_hidden": true,
1792 "revert_hidden": false,
1793 "delete_hidden": false
1798 {"is_active":"0","is_reserved":"0","is_forked":"0"},
1800 "more_hidden": false,
1801 "enable_hidden": false,
1802 "disable_hidden": true,
1803 "revert_hidden": true,
1804 "delete_hidden": false
1809 {"is_active":"0","is_reserved":"0","is_forked":"1"},
1811 "more_hidden": false,
1812 "enable_hidden": false,
1813 "disable_hidden": true,
1814 "revert_hidden": false,
1815 "delete_hidden": false
1820 {"is_active":"0","is_reserved":"0"},
1822 "more_hidden": false,
1823 "enable_hidden": false,
1824 "disable_hidden": true,
1825 "revert_hidden": true,
1826 "delete_hidden": false
1831 {"is_active":"0","is_reserved":"1","is_forked":0},
1833 "more_hidden": false,
1834 "enable_hidden": false,
1835 "disable_hidden": true,
1836 "revert_hidden": true,
1837 "delete_hidden": true
1842 {"is_active":"0","is_reserved":"1","is_forked":1},
1844 "more_hidden": false,
1845 "enable_hidden": false,
1846 "disable_hidden": true,
1847 "revert_hidden": false,
1848 "delete_hidden": true
1853 {"is_active":"0","is_reserved":"1","is_forked":"0"},
1855 "more_hidden": false,
1856 "enable_hidden": false,
1857 "disable_hidden": true,
1858 "revert_hidden": true,
1859 "delete_hidden": true
1864 {"is_active":"0","is_reserved":"1","is_forked":"1"},
1866 "more_hidden": false,
1867 "enable_hidden": false,
1868 "disable_hidden": true,
1869 "revert_hidden": false,
1870 "delete_hidden": true
1875 {"is_active":"0","is_reserved":"1"},
1877 "more_hidden": false,
1878 "enable_hidden": false,
1879 "disable_hidden": true,
1880 "revert_hidden": true,
1881 "delete_hidden": true
1886 {"is_active":"0","is_forked":0},
1888 "more_hidden": false,
1889 "enable_hidden": false,
1890 "disable_hidden": true,
1891 "revert_hidden": true,
1892 "delete_hidden": false
1897 {"is_active":"0","is_forked":1},
1899 "more_hidden": false,
1900 "enable_hidden": false,
1901 "disable_hidden": true,
1902 "revert_hidden": false,
1903 "delete_hidden": false
1908 {"is_active":"0","is_forked":"0"},
1910 "more_hidden": false,
1911 "enable_hidden": false,
1912 "disable_hidden": true,
1913 "revert_hidden": true,
1914 "delete_hidden": false
1919 {"is_active":"0","is_forked":"1"},
1921 "more_hidden": false,
1922 "enable_hidden": false,
1923 "disable_hidden": true,
1924 "revert_hidden": false,
1925 "delete_hidden": false
1932 "more_hidden": false,
1933 "enable_hidden": false,
1934 "disable_hidden": true,
1935 "revert_hidden": true,
1936 "delete_hidden": false
1941 {"is_active":"1","is_reserved":0,"is_forked":0},
1943 "more_hidden": false,
1944 "enable_hidden": true,
1945 "disable_hidden": false,
1946 "revert_hidden": true,
1947 "delete_hidden": false
1952 {"is_active":"1","is_reserved":0,"is_forked":1},
1954 "more_hidden": false,
1955 "enable_hidden": true,
1956 "disable_hidden": false,
1957 "revert_hidden": false,
1958 "delete_hidden": false
1963 {"is_active":"1","is_reserved":0,"is_forked":"0"},
1965 "more_hidden": false,
1966 "enable_hidden": true,
1967 "disable_hidden": false,
1968 "revert_hidden": true,
1969 "delete_hidden": false
1974 {"is_active":"1","is_reserved":0,"is_forked":"1"},
1976 "more_hidden": false,
1977 "enable_hidden": true,
1978 "disable_hidden": false,
1979 "revert_hidden": false,
1980 "delete_hidden": false
1985 {"is_active":"1","is_reserved":0},
1987 "more_hidden": false,
1988 "enable_hidden": true,
1989 "disable_hidden": false,
1990 "revert_hidden": true,
1991 "delete_hidden": false
1996 {"is_active":"1","is_reserved":1,"is_forked":0},
1998 "more_hidden": true,
1999 "enable_hidden": true,
2000 "disable_hidden": true,
2001 "revert_hidden": true,
2002 "delete_hidden": true
2007 {"is_active":"1","is_reserved":1,"is_forked":1},
2009 "more_hidden": false,
2010 "enable_hidden": true,
2011 "disable_hidden": true,
2012 "revert_hidden": false,
2013 "delete_hidden": true
2018 {"is_active":"1","is_reserved":1,"is_forked":"0"},
2020 "more_hidden": true,
2021 "enable_hidden": true,
2022 "disable_hidden": true,
2023 "revert_hidden": true,
2024 "delete_hidden": true
2029 {"is_active":"1","is_reserved":1,"is_forked":"1"},
2031 "more_hidden": false,
2032 "enable_hidden": true,
2033 "disable_hidden": true,
2034 "revert_hidden": false,
2035 "delete_hidden": true
2040 {"is_active":"1","is_reserved":1},
2042 "more_hidden": true,
2043 "enable_hidden": true,
2044 "disable_hidden": true,
2045 "revert_hidden": true,
2046 "delete_hidden": true
2051 {"is_active":"1","is_reserved":"0","is_forked":0},
2053 "more_hidden": false,
2054 "enable_hidden": true,
2055 "disable_hidden": false,
2056 "revert_hidden": true,
2057 "delete_hidden": false
2062 {"is_active":"1","is_reserved":"0","is_forked":1},
2064 "more_hidden": false,
2065 "enable_hidden": true,
2066 "disable_hidden": false,
2067 "revert_hidden": false,
2068 "delete_hidden": false
2073 {"is_active":"1","is_reserved":"0","is_forked":"0"},
2075 "more_hidden": false,
2076 "enable_hidden": true,
2077 "disable_hidden": false,
2078 "revert_hidden": true,
2079 "delete_hidden": false
2084 {"is_active":"1","is_reserved":"0","is_forked":"1"},
2086 "more_hidden": false,
2087 "enable_hidden": true,
2088 "disable_hidden": false,
2089 "revert_hidden": false,
2090 "delete_hidden": false
2095 {"is_active":"1","is_reserved":"0"},
2097 "more_hidden": false,
2098 "enable_hidden": true,
2099 "disable_hidden": false,
2100 "revert_hidden": true,
2101 "delete_hidden": false
2106 {"is_active":"1","is_reserved":"1","is_forked":0},
2108 "more_hidden": true,
2109 "enable_hidden": true,
2110 "disable_hidden": true,
2111 "revert_hidden": true,
2112 "delete_hidden": true
2117 {"is_active":"1","is_reserved":"1","is_forked":1},
2119 "more_hidden": false,
2120 "enable_hidden": true,
2121 "disable_hidden": true,
2122 "revert_hidden": false,
2123 "delete_hidden": true
2128 {"is_active":"1","is_reserved":"1","is_forked":"0"},
2130 "more_hidden": true,
2131 "enable_hidden": true,
2132 "disable_hidden": true,
2133 "revert_hidden": true,
2134 "delete_hidden": true
2139 {"is_active":"1","is_reserved":"1","is_forked":"1"},
2141 "more_hidden": false,
2142 "enable_hidden": true,
2143 "disable_hidden": true,
2144 "revert_hidden": false,
2145 "delete_hidden": true
2150 {"is_active":"1","is_reserved":"1"},
2152 "more_hidden": true,
2153 "enable_hidden": true,
2154 "disable_hidden": true,
2155 "revert_hidden": true,
2156 "delete_hidden": true
2161 {"is_active":"1","is_forked":0},
2163 "more_hidden": false,
2164 "enable_hidden": true,
2165 "disable_hidden": false,
2166 "revert_hidden": true,
2167 "delete_hidden": false
2172 {"is_active":"1","is_forked":1},
2174 "more_hidden": false,
2175 "enable_hidden": true,
2176 "disable_hidden": false,
2177 "revert_hidden": false,
2178 "delete_hidden": false
2183 {"is_active":"1","is_forked":"0"},
2185 "more_hidden": false,
2186 "enable_hidden": true,
2187 "disable_hidden": false,
2188 "revert_hidden": true,
2189 "delete_hidden": false
2194 {"is_active":"1","is_forked":"1"},
2196 "more_hidden": false,
2197 "enable_hidden": true,
2198 "disable_hidden": false,
2199 "revert_hidden": false,
2200 "delete_hidden": false
2207 "more_hidden": false,
2208 "enable_hidden": true,
2209 "disable_hidden": false,
2210 "revert_hidden": true,
2211 "delete_hidden": false
2216 {"is_reserved":0,"is_forked":0},
2218 "more_hidden": false,
2219 "enable_hidden": false,
2220 "disable_hidden": true,
2221 "revert_hidden": true,
2222 "delete_hidden": false
2227 {"is_reserved":0,"is_forked":1},
2229 "more_hidden": false,
2230 "enable_hidden": false,
2231 "disable_hidden": true,
2232 "revert_hidden": false,
2233 "delete_hidden": false
2238 {"is_reserved":0,"is_forked":"0"},
2240 "more_hidden": false,
2241 "enable_hidden": false,
2242 "disable_hidden": true,
2243 "revert_hidden": true,
2244 "delete_hidden": false
2249 {"is_reserved":0,"is_forked":"1"},
2251 "more_hidden": false,
2252 "enable_hidden": false,
2253 "disable_hidden": true,
2254 "revert_hidden": false,
2255 "delete_hidden": false
2262 "more_hidden": false,
2263 "enable_hidden": false,
2264 "disable_hidden": true,
2265 "revert_hidden": true,
2266 "delete_hidden": false
2271 {"is_reserved":1,"is_forked":0},
2273 "more_hidden": false,
2274 "enable_hidden": false,
2275 "disable_hidden": true,
2276 "revert_hidden": true,
2277 "delete_hidden": true
2282 {"is_reserved":1,"is_forked":1},
2284 "more_hidden": false,
2285 "enable_hidden": false,
2286 "disable_hidden": true,
2287 "revert_hidden": false,
2288 "delete_hidden": true
2293 {"is_reserved":1,"is_forked":"0"},
2295 "more_hidden": false,
2296 "enable_hidden": false,
2297 "disable_hidden": true,
2298 "revert_hidden": true,
2299 "delete_hidden": true
2304 {"is_reserved":1,"is_forked":"1"},
2306 "more_hidden": false,
2307 "enable_hidden": false,
2308 "disable_hidden": true,
2309 "revert_hidden": false,
2310 "delete_hidden": true
2317 "more_hidden": false,
2318 "enable_hidden": false,
2319 "disable_hidden": true,
2320 "revert_hidden": true,
2321 "delete_hidden": true
2326 {"is_reserved":"0","is_forked":0},
2328 "more_hidden": false,
2329 "enable_hidden": false,
2330 "disable_hidden": true,
2331 "revert_hidden": true,
2332 "delete_hidden": false
2337 {"is_reserved":"0","is_forked":1},
2339 "more_hidden": false,
2340 "enable_hidden": false,
2341 "disable_hidden": true,
2342 "revert_hidden": false,
2343 "delete_hidden": false
2348 {"is_reserved":"0","is_forked":"0"},
2350 "more_hidden": false,
2351 "enable_hidden": false,
2352 "disable_hidden": true,
2353 "revert_hidden": true,
2354 "delete_hidden": false
2359 {"is_reserved":"0","is_forked":"1"},
2361 "more_hidden": false,
2362 "enable_hidden": false,
2363 "disable_hidden": true,
2364 "revert_hidden": false,
2365 "delete_hidden": false
2370 {"is_reserved":"0"},
2372 "more_hidden": false,
2373 "enable_hidden": false,
2374 "disable_hidden": true,
2375 "revert_hidden": true,
2376 "delete_hidden": false
2381 {"is_reserved":"1","is_forked":0},
2383 "more_hidden": false,
2384 "enable_hidden": false,
2385 "disable_hidden": true,
2386 "revert_hidden": true,
2387 "delete_hidden": true
2392 {"is_reserved":"1","is_forked":1},
2394 "more_hidden": false,
2395 "enable_hidden": false,
2396 "disable_hidden": true,
2397 "revert_hidden": false,
2398 "delete_hidden": true
2403 {"is_reserved":"1","is_forked":"0"},
2405 "more_hidden": false,
2406 "enable_hidden": false,
2407 "disable_hidden": true,
2408 "revert_hidden": true,
2409 "delete_hidden": true
2414 {"is_reserved":"1","is_forked":"1"},
2416 "more_hidden": false,
2417 "enable_hidden": false,
2418 "disable_hidden": true,
2419 "revert_hidden": false,
2420 "delete_hidden": true
2425 {"is_reserved":"1"},
2427 "more_hidden": false,
2428 "enable_hidden": false,
2429 "disable_hidden": true,
2430 "revert_hidden": true,
2431 "delete_hidden": true
2438 "more_hidden": false,
2439 "enable_hidden": false,
2440 "disable_hidden": true,
2441 "revert_hidden": true,
2442 "delete_hidden": false
2449 "more_hidden": false,
2450 "enable_hidden": false,
2451 "disable_hidden": true,
2452 "revert_hidden": false,
2453 "delete_hidden": false
2460 "more_hidden": false,
2461 "enable_hidden": false,
2462 "disable_hidden": true,
2463 "revert_hidden": true,
2464 "delete_hidden": false
2471 "more_hidden": false,
2472 "enable_hidden": false,
2473 "disable_hidden": true,
2474 "revert_hidden": false,
2475 "delete_hidden": false
2482 "more_hidden": false,
2483 "enable_hidden": false,
2484 "disable_hidden": true,
2485 "revert_hidden": true,
2486 "delete_hidden": false
2490 caseTypeSimulations
.forEach(function(simulation
) {
2491 doTest(simulation
[0], simulation
[1]);