1#!/usr/local/bin/python3.8
2from __future__ import (absolute_import, division, print_function)
3# Copyright 2019-2020 Fortinet, Inc.
4#
5# This program is free software: you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation, either version 3 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program.  If not, see <https://www.gnu.org/licenses/>.
17
18__metaclass__ = type
19
20ANSIBLE_METADATA = {'status': ['preview'],
21                    'supported_by': 'community',
22                    'metadata_version': '1.1'}
23
24DOCUMENTATION = '''
25---
26module: fortios_vpn_ipsec_phase2_interface
27short_description: Configure VPN autokey tunnel in Fortinet's FortiOS and FortiGate.
28description:
29    - This module is able to configure a FortiGate or FortiOS (FOS) device by allowing the
30      user to set and modify vpn_ipsec feature and phase2_interface category.
31      Examples include all parameters and values need to be adjusted to datasources before usage.
32      Tested with FOS v6.0.0
33version_added: "2.10"
34author:
35    - Link Zheng (@chillancezen)
36    - Jie Xue (@JieX19)
37    - Hongbin Lu (@fgtdev-hblu)
38    - Frank Shen (@frankshen01)
39    - Miguel Angel Munoz (@mamunozgonzalez)
40    - Nicolas Thomas (@thomnico)
41notes:
42    - Legacy fortiosapi has been deprecated, httpapi is the preferred way to run playbooks
43
44requirements:
45    - ansible>=2.9.0
46options:
47    access_token:
48        description:
49            - Token-based authentication.
50              Generated from GUI of Fortigate.
51        type: str
52        required: false
53    enable_log:
54        description:
55            - Enable/Disable logging for task.
56        type: bool
57        required: false
58        default: false
59    vdom:
60        description:
61            - Virtual domain, among those defined previously. A vdom is a
62              virtual instance of the FortiGate that can be configured and
63              used as a different unit.
64        type: str
65        default: root
66
67    state:
68        description:
69            - Indicates whether to create or remove the object.
70        type: str
71        required: true
72        choices:
73            - present
74            - absent
75    vpn_ipsec_phase2_interface:
76        description:
77            - Configure VPN autokey tunnel.
78        default: null
79        type: dict
80        suboptions:
81            add_route:
82                description:
83                    - Enable/disable automatic route addition.
84                type: str
85                choices:
86                    - phase1
87                    - enable
88                    - disable
89            auto_discovery_forwarder:
90                description:
91                    - Enable/disable forwarding short-cut messages.
92                type: str
93                choices:
94                    - phase1
95                    - enable
96                    - disable
97            auto_discovery_sender:
98                description:
99                    - Enable/disable sending short-cut messages.
100                type: str
101                choices:
102                    - phase1
103                    - enable
104                    - disable
105            auto_negotiate:
106                description:
107                    - Enable/disable IPsec SA auto-negotiation.
108                type: str
109                choices:
110                    - enable
111                    - disable
112            comments:
113                description:
114                    - Comment.
115                type: str
116            dhcp_ipsec:
117                description:
118                    - Enable/disable DHCP-IPsec.
119                type: str
120                choices:
121                    - enable
122                    - disable
123            dhgrp:
124                description:
125                    - Phase2 DH group.
126                type: list
127                choices:
128                    - 1
129                    - 2
130                    - 5
131                    - 14
132                    - 15
133                    - 16
134                    - 17
135                    - 18
136                    - 19
137                    - 20
138                    - 21
139                    - 27
140                    - 28
141                    - 29
142                    - 30
143                    - 31
144                    - 32
145            diffserv:
146                description:
147                    - Enable/disable applying DSCP value to the IPsec tunnel outer IP header.
148                type: str
149                choices:
150                    - enable
151                    - disable
152            diffservcode:
153                description:
154                    - DSCP value to be applied to the IPsec tunnel outer IP header.
155                type: str
156            dst_addr_type:
157                description:
158                    - Remote proxy ID type.
159                type: str
160                choices:
161                    - subnet
162                    - range
163                    - ip
164                    - name
165                    - subnet6
166                    - range6
167                    - ip6
168                    - name6
169            dst_end_ip:
170                description:
171                    - Remote proxy ID IPv4 end.
172                type: str
173            dst_end_ip6:
174                description:
175                    - Remote proxy ID IPv6 end.
176                type: str
177            dst_name:
178                description:
179                    - Remote proxy ID name. Source firewall.address.name firewall.addrgrp.name.
180                type: str
181            dst_name6:
182                description:
183                    - Remote proxy ID name. Source firewall.address6.name firewall.addrgrp6.name.
184                type: str
185            dst_port:
186                description:
187                    - Quick mode destination port (1 - 65535 or 0 for all).
188                type: int
189            dst_start_ip:
190                description:
191                    - Remote proxy ID IPv4 start.
192                type: str
193            dst_start_ip6:
194                description:
195                    - Remote proxy ID IPv6 start.
196                type: str
197            dst_subnet:
198                description:
199                    - Remote proxy ID IPv4 subnet.
200                type: str
201            dst_subnet6:
202                description:
203                    - Remote proxy ID IPv6 subnet.
204                type: str
205            encapsulation:
206                description:
207                    - ESP encapsulation mode.
208                type: str
209                choices:
210                    - tunnel-mode
211                    - transport-mode
212            initiator_ts_narrow:
213                description:
214                    - Enable/disable traffic selector narrowing for IKEv2 initiator.
215                type: str
216                choices:
217                    - enable
218                    - disable
219            ipv4_df:
220                description:
221                    - Enable/disable setting and resetting of IPv4 "Don"t Fragment" bit.
222                type: str
223                choices:
224                    - enable
225                    - disable
226            keepalive:
227                description:
228                    - Enable/disable keep alive.
229                type: str
230                choices:
231                    - enable
232                    - disable
233            keylife_type:
234                description:
235                    - Keylife type.
236                type: str
237                choices:
238                    - seconds
239                    - kbs
240                    - both
241            keylifekbs:
242                description:
243                    - Phase2 key life in number of bytes of traffic (5120 - 4294967295).
244                type: int
245            keylifeseconds:
246                description:
247                    - Phase2 key life in time in seconds (120 - 172800).
248                type: int
249            l2tp:
250                description:
251                    - Enable/disable L2TP over IPsec.
252                type: str
253                choices:
254                    - enable
255                    - disable
256            name:
257                description:
258                    - IPsec tunnel name.
259                required: true
260                type: str
261            pfs:
262                description:
263                    - Enable/disable PFS feature.
264                type: str
265                choices:
266                    - enable
267                    - disable
268            phase1name:
269                description:
270                    - Phase 1 determines the options required for phase 2. Source vpn.ipsec.phase1-interface.name.
271                type: str
272            proposal:
273                description:
274                    - Phase2 proposal.
275                type: list
276                choices:
277                    - null-md5
278                    - null-sha1
279                    - null-sha256
280                    - null-sha384
281                    - null-sha512
282                    - des-null
283                    - des-md5
284                    - des-sha1
285                    - des-sha256
286                    - des-sha384
287                    - des-sha512
288                    - 3des-null
289                    - 3des-md5
290                    - 3des-sha1
291                    - 3des-sha256
292                    - 3des-sha384
293                    - 3des-sha512
294                    - aes128-null
295                    - aes128-md5
296                    - aes128-sha1
297                    - aes128-sha256
298                    - aes128-sha384
299                    - aes128-sha512
300                    - aes128gcm
301                    - aes192-null
302                    - aes192-md5
303                    - aes192-sha1
304                    - aes192-sha256
305                    - aes192-sha384
306                    - aes192-sha512
307                    - aes256-null
308                    - aes256-md5
309                    - aes256-sha1
310                    - aes256-sha256
311                    - aes256-sha384
312                    - aes256-sha512
313                    - aes256gcm
314                    - chacha20poly1305
315                    - aria128-null
316                    - aria128-md5
317                    - aria128-sha1
318                    - aria128-sha256
319                    - aria128-sha384
320                    - aria128-sha512
321                    - aria192-null
322                    - aria192-md5
323                    - aria192-sha1
324                    - aria192-sha256
325                    - aria192-sha384
326                    - aria192-sha512
327                    - aria256-null
328                    - aria256-md5
329                    - aria256-sha1
330                    - aria256-sha256
331                    - aria256-sha384
332                    - aria256-sha512
333                    - seed-null
334                    - seed-md5
335                    - seed-sha1
336                    - seed-sha256
337                    - seed-sha384
338                    - seed-sha512
339            protocol:
340                description:
341                    - Quick mode protocol selector (1 - 255 or 0 for all).
342                type: int
343            replay:
344                description:
345                    - Enable/disable replay detection.
346                type: str
347                choices:
348                    - enable
349                    - disable
350            route_overlap:
351                description:
352                    - Action for overlapping routes.
353                type: str
354                choices:
355                    - use-old
356                    - use-new
357                    - allow
358            single_source:
359                description:
360                    - Enable/disable single source IP restriction.
361                type: str
362                choices:
363                    - enable
364                    - disable
365            src_addr_type:
366                description:
367                    - Local proxy ID type.
368                type: str
369                choices:
370                    - subnet
371                    - range
372                    - ip
373                    - name
374                    - subnet6
375                    - range6
376                    - ip6
377                    - name6
378            src_end_ip:
379                description:
380                    - Local proxy ID end.
381                type: str
382            src_end_ip6:
383                description:
384                    - Local proxy ID IPv6 end.
385                type: str
386            src_name:
387                description:
388                    - Local proxy ID name. Source firewall.address.name firewall.addrgrp.name.
389                type: str
390            src_name6:
391                description:
392                    - Local proxy ID name. Source firewall.address6.name firewall.addrgrp6.name.
393                type: str
394            src_port:
395                description:
396                    - Quick mode source port (1 - 65535 or 0 for all).
397                type: int
398            src_start_ip:
399                description:
400                    - Local proxy ID start.
401                type: str
402            src_start_ip6:
403                description:
404                    - Local proxy ID IPv6 start.
405                type: str
406            src_subnet:
407                description:
408                    - Local proxy ID subnet.
409                type: str
410            src_subnet6:
411                description:
412                    - Local proxy ID IPv6 subnet.
413                type: str
414'''
415
416EXAMPLES = '''
417- hosts: fortigates
418  collections:
419    - fortinet.fortios
420  connection: httpapi
421  vars:
422   vdom: "root"
423   ansible_httpapi_use_ssl: yes
424   ansible_httpapi_validate_certs: no
425   ansible_httpapi_port: 443
426  tasks:
427  - name: Configure VPN autokey tunnel.
428    fortios_vpn_ipsec_phase2_interface:
429      vdom:  "{{ vdom }}"
430      state: "present"
431      access_token: "<your_own_value>"
432      vpn_ipsec_phase2_interface:
433        add_route: "phase1"
434        auto_discovery_forwarder: "phase1"
435        auto_discovery_sender: "phase1"
436        auto_negotiate: "enable"
437        comments: "<your_own_value>"
438        dhcp_ipsec: "enable"
439        dhgrp: "1"
440        diffserv: "enable"
441        diffservcode: "<your_own_value>"
442        dst_addr_type: "subnet"
443        dst_end_ip: "<your_own_value>"
444        dst_end_ip6: "<your_own_value>"
445        dst_name: "<your_own_value> (source firewall.address.name firewall.addrgrp.name)"
446        dst_name6: "<your_own_value> (source firewall.address6.name firewall.addrgrp6.name)"
447        dst_port: "17"
448        dst_start_ip: "<your_own_value>"
449        dst_start_ip6: "<your_own_value>"
450        dst_subnet: "<your_own_value>"
451        dst_subnet6: "<your_own_value>"
452        encapsulation: "tunnel-mode"
453        initiator_ts_narrow: "enable"
454        ipv4_df: "enable"
455        keepalive: "enable"
456        keylife_type: "seconds"
457        keylifekbs: "27"
458        keylifeseconds: "28"
459        l2tp: "enable"
460        name: "default_name_30"
461        pfs: "enable"
462        phase1name: "<your_own_value> (source vpn.ipsec.phase1-interface.name)"
463        proposal: "null-md5"
464        protocol: "34"
465        replay: "enable"
466        route_overlap: "use-old"
467        single_source: "enable"
468        src_addr_type: "subnet"
469        src_end_ip: "<your_own_value>"
470        src_end_ip6: "<your_own_value>"
471        src_name: "<your_own_value> (source firewall.address.name firewall.addrgrp.name)"
472        src_name6: "<your_own_value> (source firewall.address6.name firewall.addrgrp6.name)"
473        src_port: "43"
474        src_start_ip: "<your_own_value>"
475        src_start_ip6: "<your_own_value>"
476        src_subnet: "<your_own_value>"
477        src_subnet6: "<your_own_value>"
478
479'''
480
481RETURN = '''
482build:
483  description: Build number of the fortigate image
484  returned: always
485  type: str
486  sample: '1547'
487http_method:
488  description: Last method used to provision the content into FortiGate
489  returned: always
490  type: str
491  sample: 'PUT'
492http_status:
493  description: Last result given by FortiGate on last operation applied
494  returned: always
495  type: str
496  sample: "200"
497mkey:
498  description: Master key (id) used in the last call to FortiGate
499  returned: success
500  type: str
501  sample: "id"
502name:
503  description: Name of the table used to fulfill the request
504  returned: always
505  type: str
506  sample: "urlfilter"
507path:
508  description: Path of the table used to fulfill the request
509  returned: always
510  type: str
511  sample: "webfilter"
512revision:
513  description: Internal revision number
514  returned: always
515  type: str
516  sample: "17.0.2.10658"
517serial:
518  description: Serial number of the unit
519  returned: always
520  type: str
521  sample: "FGVMEVYYQT3AB5352"
522status:
523  description: Indication of the operation's result
524  returned: always
525  type: str
526  sample: "success"
527vdom:
528  description: Virtual domain used
529  returned: always
530  type: str
531  sample: "root"
532version:
533  description: Version of the FortiGate
534  returned: always
535  type: str
536  sample: "v5.6.3"
537
538'''
539from ansible.module_utils.basic import AnsibleModule
540from ansible.module_utils.connection import Connection
541from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import FortiOSHandler
542from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_legacy_fortiosapi
543from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import schema_to_module_spec
544from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.fortios import check_schema_versioning
545from ansible_collections.fortinet.fortios.plugins.module_utils.fortimanager.common import FAIL_SOCKET_MSG
546from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import is_same_comparison
547from ansible_collections.fortinet.fortios.plugins.module_utils.fortios.comparison import serialize
548
549
550def filter_vpn_ipsec_phase2_interface_data(json):
551    option_list = ['add_route', 'auto_discovery_forwarder', 'auto_discovery_sender',
552                   'auto_negotiate', 'comments', 'dhcp_ipsec',
553                   'dhgrp', 'diffserv', 'diffservcode',
554                   'dst_addr_type', 'dst_end_ip', 'dst_end_ip6',
555                   'dst_name', 'dst_name6', 'dst_port',
556                   'dst_start_ip', 'dst_start_ip6', 'dst_subnet',
557                   'dst_subnet6', 'encapsulation', 'initiator_ts_narrow',
558                   'ipv4_df', 'keepalive', 'keylife_type',
559                   'keylifekbs', 'keylifeseconds', 'l2tp',
560                   'name', 'pfs', 'phase1name',
561                   'proposal', 'protocol', 'replay',
562                   'route_overlap', 'single_source', 'src_addr_type',
563                   'src_end_ip', 'src_end_ip6', 'src_name',
564                   'src_name6', 'src_port', 'src_start_ip',
565                   'src_start_ip6', 'src_subnet', 'src_subnet6']
566    dictionary = {}
567
568    for attribute in option_list:
569        if attribute in json and json[attribute] is not None:
570            dictionary[attribute] = json[attribute]
571
572    return dictionary
573
574
575def flatten_single_path(data, path, index):
576    if not data or index == len(path) or path[index] not in data or not data[path[index]]:
577        return
578
579    if index == len(path) - 1:
580        data[path[index]] = ' '.join(str(elem) for elem in data[path[index]])
581    elif isinstance(data[path[index]], list):
582        for value in data[path[index]]:
583            flatten_single_path(value, path, index + 1)
584    else:
585        flatten_single_path(data[path[index]], path, index + 1)
586
587
588def flatten_multilists_attributes(data):
589    multilist_attrs = [[u'dhgrp'], [u'proposal']]
590
591    for attr in multilist_attrs:
592        flatten_single_path(data, attr, 0)
593
594    return data
595
596
597def underscore_to_hyphen(data):
598    if isinstance(data, list):
599        for i, elem in enumerate(data):
600            data[i] = underscore_to_hyphen(elem)
601    elif isinstance(data, dict):
602        new_data = {}
603        for k, v in data.items():
604            new_data[k.replace('_', '-')] = underscore_to_hyphen(v)
605        data = new_data
606
607    return data
608
609
610def vpn_ipsec_phase2_interface(data, fos, check_mode=False):
611
612    vdom = data['vdom']
613
614    state = data['state']
615
616    vpn_ipsec_phase2_interface_data = data['vpn_ipsec_phase2_interface']
617    vpn_ipsec_phase2_interface_data = flatten_multilists_attributes(vpn_ipsec_phase2_interface_data)
618    filtered_data = underscore_to_hyphen(filter_vpn_ipsec_phase2_interface_data(vpn_ipsec_phase2_interface_data))
619
620    # check_mode starts from here
621    if check_mode:
622        mkey = fos.get_mkey('system', 'interface', filtered_data, vdom=vdom)
623        current_data = fos.get('system', 'interface', vdom=vdom, mkey=mkey)
624        is_existed = current_data and current_data.get('http_status') == 200 \
625            and isinstance(current_data.get('results'), list) \
626            and len(current_data['results']) > 0
627
628        # 2. if it exists and the state is 'present' then compare current settings with desired
629        if state == 'present' or state is True:
630            if mkey is None:
631                return False, True, filtered_data
632
633            # if mkey exists then compare each other
634            # record exits and they're matched or not
635            if is_existed:
636                is_same = is_same_comparison(
637                    serialize(current_data['results'][0]), serialize(filtered_data))
638                return False, not is_same, filtered_data
639
640            # record does not exist
641            return False, True, filtered_data
642
643        if state == 'absent':
644            if mkey is None:
645                return False, False, filtered_data
646
647            if is_existed:
648                return False, True, filtered_data
649            return False, False, filtered_data
650
651        return True, False, {'reason: ': 'Must provide state parameter'}
652
653    if state == "present" or state is True:
654        return fos.set('vpn.ipsec',
655                       'phase2-interface',
656                       data=filtered_data,
657                       vdom=vdom)
658
659    elif state == "absent":
660        return fos.delete('vpn.ipsec',
661                          'phase2-interface',
662                          mkey=filtered_data['name'],
663                          vdom=vdom)
664    else:
665        fos._module.fail_json(msg='state must be present or absent!')
666
667
668def is_successful_status(status):
669    return status['status'] == "success" or \
670        status['http_method'] == "DELETE" and status['http_status'] == 404
671
672
673def fortios_vpn_ipsec(data, fos, check_mode):
674
675    if data['vpn_ipsec_phase2_interface']:
676        resp = vpn_ipsec_phase2_interface(data, fos, check_mode)
677    else:
678        fos._module.fail_json(msg='missing task body: %s' % ('vpn_ipsec_phase2_interface'))
679    if check_mode:
680        return resp
681    return not is_successful_status(resp), \
682        resp['status'] == "success" and \
683        (resp['revision_changed'] if 'revision_changed' in resp else True), \
684        resp
685
686
687versioned_schema = {
688    "type": "list",
689    "children": {
690        "protocol": {
691            "type": "integer",
692            "revisions": {
693                "v6.0.0": True,
694                "v7.0.0": True,
695                "v6.0.5": True,
696                "v6.4.4": True,
697                "v6.4.0": True,
698                "v6.4.1": True,
699                "v6.2.0": True,
700                "v6.2.3": True,
701                "v6.2.5": True,
702                "v6.2.7": True,
703                "v6.0.11": True
704            }
705        },
706        "diffserv": {
707            "type": "string",
708            "options": [
709                {
710                    "value": "enable",
711                    "revisions": {
712                        "v6.4.4": True,
713                        "v7.0.0": True
714                    }
715                },
716                {
717                    "value": "disable",
718                    "revisions": {
719                        "v6.4.4": True,
720                        "v7.0.0": True
721                    }
722                }
723            ],
724            "revisions": {
725                "v6.4.4": True,
726                "v7.0.0": True
727            }
728        },
729        "add_route": {
730            "type": "string",
731            "options": [
732                {
733                    "value": "phase1",
734                    "revisions": {
735                        "v6.0.0": True,
736                        "v7.0.0": True,
737                        "v6.0.5": True,
738                        "v6.4.4": True,
739                        "v6.4.0": True,
740                        "v6.4.1": True,
741                        "v6.2.0": True,
742                        "v6.2.3": True,
743                        "v6.2.5": True,
744                        "v6.2.7": True,
745                        "v6.0.11": True
746                    }
747                },
748                {
749                    "value": "enable",
750                    "revisions": {
751                        "v6.0.0": True,
752                        "v7.0.0": True,
753                        "v6.0.5": True,
754                        "v6.4.4": True,
755                        "v6.4.0": True,
756                        "v6.4.1": True,
757                        "v6.2.0": True,
758                        "v6.2.3": True,
759                        "v6.2.5": True,
760                        "v6.2.7": True,
761                        "v6.0.11": True
762                    }
763                },
764                {
765                    "value": "disable",
766                    "revisions": {
767                        "v6.0.0": True,
768                        "v7.0.0": True,
769                        "v6.0.5": True,
770                        "v6.4.4": True,
771                        "v6.4.0": True,
772                        "v6.4.1": True,
773                        "v6.2.0": True,
774                        "v6.2.3": True,
775                        "v6.2.5": True,
776                        "v6.2.7": True,
777                        "v6.0.11": True
778                    }
779                }
780            ],
781            "revisions": {
782                "v6.0.0": True,
783                "v7.0.0": True,
784                "v6.0.5": True,
785                "v6.4.4": True,
786                "v6.4.0": True,
787                "v6.4.1": True,
788                "v6.2.0": True,
789                "v6.2.3": True,
790                "v6.2.5": True,
791                "v6.2.7": True,
792                "v6.0.11": True
793            }
794        },
795        "diffservcode": {
796            "type": "string",
797            "revisions": {
798                "v6.4.4": True,
799                "v7.0.0": True
800            }
801        },
802        "dst_name": {
803            "type": "string",
804            "revisions": {
805                "v6.0.0": True,
806                "v7.0.0": True,
807                "v6.0.5": True,
808                "v6.4.4": True,
809                "v6.4.0": True,
810                "v6.4.1": True,
811                "v6.2.0": True,
812                "v6.2.3": True,
813                "v6.2.5": True,
814                "v6.2.7": True,
815                "v6.0.11": True
816            }
817        },
818        "keylifekbs": {
819            "type": "integer",
820            "revisions": {
821                "v6.0.0": True,
822                "v7.0.0": True,
823                "v6.0.5": True,
824                "v6.4.4": True,
825                "v6.4.0": True,
826                "v6.4.1": True,
827                "v6.2.0": True,
828                "v6.2.3": True,
829                "v6.2.5": True,
830                "v6.2.7": True,
831                "v6.0.11": True
832            }
833        },
834        "replay": {
835            "type": "string",
836            "options": [
837                {
838                    "value": "enable",
839                    "revisions": {
840                        "v6.0.0": True,
841                        "v7.0.0": True,
842                        "v6.0.5": True,
843                        "v6.4.4": True,
844                        "v6.4.0": True,
845                        "v6.4.1": True,
846                        "v6.2.0": True,
847                        "v6.2.3": True,
848                        "v6.2.5": True,
849                        "v6.2.7": True,
850                        "v6.0.11": True
851                    }
852                },
853                {
854                    "value": "disable",
855                    "revisions": {
856                        "v6.0.0": True,
857                        "v7.0.0": True,
858                        "v6.0.5": True,
859                        "v6.4.4": True,
860                        "v6.4.0": True,
861                        "v6.4.1": True,
862                        "v6.2.0": True,
863                        "v6.2.3": True,
864                        "v6.2.5": True,
865                        "v6.2.7": True,
866                        "v6.0.11": True
867                    }
868                }
869            ],
870            "revisions": {
871                "v6.0.0": True,
872                "v7.0.0": True,
873                "v6.0.5": True,
874                "v6.4.4": True,
875                "v6.4.0": True,
876                "v6.4.1": True,
877                "v6.2.0": True,
878                "v6.2.3": True,
879                "v6.2.5": True,
880                "v6.2.7": True,
881                "v6.0.11": True
882            }
883        },
884        "comments": {
885            "type": "string",
886            "revisions": {
887                "v6.0.0": True,
888                "v7.0.0": True,
889                "v6.0.5": True,
890                "v6.4.4": True,
891                "v6.4.0": True,
892                "v6.4.1": True,
893                "v6.2.0": True,
894                "v6.2.3": True,
895                "v6.2.5": True,
896                "v6.2.7": True,
897                "v6.0.11": True
898            }
899        },
900        "keepalive": {
901            "type": "string",
902            "options": [
903                {
904                    "value": "enable",
905                    "revisions": {
906                        "v6.0.0": True,
907                        "v7.0.0": True,
908                        "v6.0.5": True,
909                        "v6.4.4": True,
910                        "v6.4.0": True,
911                        "v6.4.1": True,
912                        "v6.2.0": True,
913                        "v6.2.3": True,
914                        "v6.2.5": True,
915                        "v6.2.7": True,
916                        "v6.0.11": True
917                    }
918                },
919                {
920                    "value": "disable",
921                    "revisions": {
922                        "v6.0.0": True,
923                        "v7.0.0": True,
924                        "v6.0.5": True,
925                        "v6.4.4": True,
926                        "v6.4.0": True,
927                        "v6.4.1": True,
928                        "v6.2.0": True,
929                        "v6.2.3": True,
930                        "v6.2.5": True,
931                        "v6.2.7": True,
932                        "v6.0.11": True
933                    }
934                }
935            ],
936            "revisions": {
937                "v6.0.0": True,
938                "v7.0.0": True,
939                "v6.0.5": True,
940                "v6.4.4": True,
941                "v6.4.0": True,
942                "v6.4.1": True,
943                "v6.2.0": True,
944                "v6.2.3": True,
945                "v6.2.5": True,
946                "v6.2.7": True,
947                "v6.0.11": True
948            }
949        },
950        "ipv4_df": {
951            "type": "string",
952            "options": [
953                {
954                    "value": "enable",
955                    "revisions": {
956                        "v7.0.0": True,
957                        "v6.4.4": True,
958                        "v6.4.0": True,
959                        "v6.4.1": True,
960                        "v6.2.0": True,
961                        "v6.2.3": True,
962                        "v6.2.5": True,
963                        "v6.2.7": True
964                    }
965                },
966                {
967                    "value": "disable",
968                    "revisions": {
969                        "v7.0.0": True,
970                        "v6.4.4": True,
971                        "v6.4.0": True,
972                        "v6.4.1": True,
973                        "v6.2.0": True,
974                        "v6.2.3": True,
975                        "v6.2.5": True,
976                        "v6.2.7": True
977                    }
978                }
979            ],
980            "revisions": {
981                "v7.0.0": True,
982                "v6.4.4": True,
983                "v6.4.0": True,
984                "v6.4.1": True,
985                "v6.2.0": True,
986                "v6.2.3": True,
987                "v6.2.5": True,
988                "v6.2.7": True
989            }
990        },
991        "auto_discovery_sender": {
992            "type": "string",
993            "options": [
994                {
995                    "value": "phase1",
996                    "revisions": {
997                        "v6.0.0": True,
998                        "v7.0.0": True,
999                        "v6.0.5": True,
1000                        "v6.4.4": True,
1001                        "v6.4.0": True,
1002                        "v6.4.1": True,
1003                        "v6.2.0": True,
1004                        "v6.2.3": True,
1005                        "v6.2.5": True,
1006                        "v6.2.7": True,
1007                        "v6.0.11": True
1008                    }
1009                },
1010                {
1011                    "value": "enable",
1012                    "revisions": {
1013                        "v6.0.0": True,
1014                        "v7.0.0": True,
1015                        "v6.0.5": True,
1016                        "v6.4.4": True,
1017                        "v6.4.0": True,
1018                        "v6.4.1": True,
1019                        "v6.2.0": True,
1020                        "v6.2.3": True,
1021                        "v6.2.5": True,
1022                        "v6.2.7": True,
1023                        "v6.0.11": True
1024                    }
1025                },
1026                {
1027                    "value": "disable",
1028                    "revisions": {
1029                        "v6.0.0": True,
1030                        "v7.0.0": True,
1031                        "v6.0.5": True,
1032                        "v6.4.4": True,
1033                        "v6.4.0": True,
1034                        "v6.4.1": True,
1035                        "v6.2.0": True,
1036                        "v6.2.3": True,
1037                        "v6.2.5": True,
1038                        "v6.2.7": True,
1039                        "v6.0.11": True
1040                    }
1041                }
1042            ],
1043            "revisions": {
1044                "v6.0.0": True,
1045                "v7.0.0": True,
1046                "v6.0.5": True,
1047                "v6.4.4": True,
1048                "v6.4.0": True,
1049                "v6.4.1": True,
1050                "v6.2.0": True,
1051                "v6.2.3": True,
1052                "v6.2.5": True,
1053                "v6.2.7": True,
1054                "v6.0.11": True
1055            }
1056        },
1057        "src_port": {
1058            "type": "integer",
1059            "revisions": {
1060                "v6.0.0": True,
1061                "v7.0.0": True,
1062                "v6.0.5": True,
1063                "v6.4.4": True,
1064                "v6.4.0": True,
1065                "v6.4.1": True,
1066                "v6.2.0": True,
1067                "v6.2.3": True,
1068                "v6.2.5": True,
1069                "v6.2.7": True,
1070                "v6.0.11": True
1071            }
1072        },
1073        "dst_subnet": {
1074            "type": "string",
1075            "revisions": {
1076                "v6.0.0": True,
1077                "v7.0.0": True,
1078                "v6.0.5": True,
1079                "v6.4.4": True,
1080                "v6.4.0": True,
1081                "v6.4.1": True,
1082                "v6.2.0": True,
1083                "v6.2.3": True,
1084                "v6.2.5": True,
1085                "v6.2.7": True,
1086                "v6.0.11": True
1087            }
1088        },
1089        "dhgrp": {
1090            "multiple_values": True,
1091            "type": "list",
1092            "options": [
1093                {
1094                    "value": "1",
1095                    "revisions": {
1096                        "v6.0.0": True,
1097                        "v7.0.0": True,
1098                        "v6.0.5": True,
1099                        "v6.4.4": True,
1100                        "v6.4.0": True,
1101                        "v6.4.1": True,
1102                        "v6.2.0": True,
1103                        "v6.2.3": True,
1104                        "v6.2.5": True,
1105                        "v6.2.7": True,
1106                        "v6.0.11": True
1107                    }
1108                },
1109                {
1110                    "value": "2",
1111                    "revisions": {
1112                        "v6.0.0": True,
1113                        "v7.0.0": True,
1114                        "v6.0.5": True,
1115                        "v6.4.4": True,
1116                        "v6.4.0": True,
1117                        "v6.4.1": True,
1118                        "v6.2.0": True,
1119                        "v6.2.3": True,
1120                        "v6.2.5": True,
1121                        "v6.2.7": True,
1122                        "v6.0.11": True
1123                    }
1124                },
1125                {
1126                    "value": "5",
1127                    "revisions": {
1128                        "v6.0.0": True,
1129                        "v7.0.0": True,
1130                        "v6.0.5": True,
1131                        "v6.4.4": True,
1132                        "v6.4.0": True,
1133                        "v6.4.1": True,
1134                        "v6.2.0": True,
1135                        "v6.2.3": True,
1136                        "v6.2.5": True,
1137                        "v6.2.7": True,
1138                        "v6.0.11": True
1139                    }
1140                },
1141                {
1142                    "value": "14",
1143                    "revisions": {
1144                        "v6.0.0": True,
1145                        "v7.0.0": True,
1146                        "v6.0.5": True,
1147                        "v6.4.4": True,
1148                        "v6.4.0": True,
1149                        "v6.4.1": True,
1150                        "v6.2.0": True,
1151                        "v6.2.3": True,
1152                        "v6.2.5": True,
1153                        "v6.2.7": True,
1154                        "v6.0.11": True
1155                    }
1156                },
1157                {
1158                    "value": "15",
1159                    "revisions": {
1160                        "v6.0.0": True,
1161                        "v7.0.0": True,
1162                        "v6.0.5": True,
1163                        "v6.4.4": True,
1164                        "v6.4.0": True,
1165                        "v6.4.1": True,
1166                        "v6.2.0": True,
1167                        "v6.2.3": True,
1168                        "v6.2.5": True,
1169                        "v6.2.7": True,
1170                        "v6.0.11": True
1171                    }
1172                },
1173                {
1174                    "value": "16",
1175                    "revisions": {
1176                        "v6.0.0": True,
1177                        "v7.0.0": True,
1178                        "v6.0.5": True,
1179                        "v6.4.4": True,
1180                        "v6.4.0": True,
1181                        "v6.4.1": True,
1182                        "v6.2.0": True,
1183                        "v6.2.3": True,
1184                        "v6.2.5": True,
1185                        "v6.2.7": True,
1186                        "v6.0.11": True
1187                    }
1188                },
1189                {
1190                    "value": "17",
1191                    "revisions": {
1192                        "v6.0.0": True,
1193                        "v7.0.0": True,
1194                        "v6.0.5": True,
1195                        "v6.4.4": True,
1196                        "v6.4.0": True,
1197                        "v6.4.1": True,
1198                        "v6.2.0": True,
1199                        "v6.2.3": True,
1200                        "v6.2.5": True,
1201                        "v6.2.7": True,
1202                        "v6.0.11": True
1203                    }
1204                },
1205                {
1206                    "value": "18",
1207                    "revisions": {
1208                        "v6.0.0": True,
1209                        "v7.0.0": True,
1210                        "v6.0.5": True,
1211                        "v6.4.4": True,
1212                        "v6.4.0": True,
1213                        "v6.4.1": True,
1214                        "v6.2.0": True,
1215                        "v6.2.3": True,
1216                        "v6.2.5": True,
1217                        "v6.2.7": True,
1218                        "v6.0.11": True
1219                    }
1220                },
1221                {
1222                    "value": "19",
1223                    "revisions": {
1224                        "v6.0.0": True,
1225                        "v7.0.0": True,
1226                        "v6.0.5": True,
1227                        "v6.4.4": True,
1228                        "v6.4.0": True,
1229                        "v6.4.1": True,
1230                        "v6.2.0": True,
1231                        "v6.2.3": True,
1232                        "v6.2.5": True,
1233                        "v6.2.7": True,
1234                        "v6.0.11": True
1235                    }
1236                },
1237                {
1238                    "value": "20",
1239                    "revisions": {
1240                        "v6.0.0": True,
1241                        "v7.0.0": True,
1242                        "v6.0.5": True,
1243                        "v6.4.4": True,
1244                        "v6.4.0": True,
1245                        "v6.4.1": True,
1246                        "v6.2.0": True,
1247                        "v6.2.3": True,
1248                        "v6.2.5": True,
1249                        "v6.2.7": True,
1250                        "v6.0.11": True
1251                    }
1252                },
1253                {
1254                    "value": "21",
1255                    "revisions": {
1256                        "v6.0.0": True,
1257                        "v7.0.0": True,
1258                        "v6.0.5": True,
1259                        "v6.4.4": True,
1260                        "v6.4.0": True,
1261                        "v6.4.1": True,
1262                        "v6.2.0": True,
1263                        "v6.2.3": True,
1264                        "v6.2.5": True,
1265                        "v6.2.7": True,
1266                        "v6.0.11": True
1267                    }
1268                },
1269                {
1270                    "value": "27",
1271                    "revisions": {
1272                        "v6.0.0": True,
1273                        "v7.0.0": True,
1274                        "v6.0.5": True,
1275                        "v6.4.4": True,
1276                        "v6.4.0": True,
1277                        "v6.4.1": True,
1278                        "v6.2.0": True,
1279                        "v6.2.3": True,
1280                        "v6.2.5": True,
1281                        "v6.2.7": True,
1282                        "v6.0.11": True
1283                    }
1284                },
1285                {
1286                    "value": "28",
1287                    "revisions": {
1288                        "v6.0.0": True,
1289                        "v7.0.0": True,
1290                        "v6.0.5": True,
1291                        "v6.4.4": True,
1292                        "v6.4.0": True,
1293                        "v6.4.1": True,
1294                        "v6.2.0": True,
1295                        "v6.2.3": True,
1296                        "v6.2.5": True,
1297                        "v6.2.7": True,
1298                        "v6.0.11": True
1299                    }
1300                },
1301                {
1302                    "value": "29",
1303                    "revisions": {
1304                        "v6.0.0": True,
1305                        "v7.0.0": True,
1306                        "v6.0.5": True,
1307                        "v6.4.4": True,
1308                        "v6.4.0": True,
1309                        "v6.4.1": True,
1310                        "v6.2.0": True,
1311                        "v6.2.3": True,
1312                        "v6.2.5": True,
1313                        "v6.2.7": True,
1314                        "v6.0.11": True
1315                    }
1316                },
1317                {
1318                    "value": "30",
1319                    "revisions": {
1320                        "v6.0.0": True,
1321                        "v7.0.0": True,
1322                        "v6.0.5": True,
1323                        "v6.4.4": True,
1324                        "v6.4.0": True,
1325                        "v6.4.1": True,
1326                        "v6.2.0": True,
1327                        "v6.2.3": True,
1328                        "v6.2.5": True,
1329                        "v6.2.7": True,
1330                        "v6.0.11": True
1331                    }
1332                },
1333                {
1334                    "value": "31",
1335                    "revisions": {
1336                        "v6.0.0": True,
1337                        "v7.0.0": True,
1338                        "v6.0.5": True,
1339                        "v6.4.4": True,
1340                        "v6.4.0": True,
1341                        "v6.4.1": True,
1342                        "v6.2.0": True,
1343                        "v6.2.3": True,
1344                        "v6.2.5": True,
1345                        "v6.2.7": True,
1346                        "v6.0.11": True
1347                    }
1348                },
1349                {
1350                    "value": "32",
1351                    "revisions": {
1352                        "v7.0.0": True,
1353                        "v6.4.4": True,
1354                        "v6.4.0": True,
1355                        "v6.4.1": True,
1356                        "v6.2.0": True,
1357                        "v6.2.3": True,
1358                        "v6.2.5": True,
1359                        "v6.2.7": True
1360                    }
1361                }
1362            ],
1363            "revisions": {
1364                "v6.0.0": True,
1365                "v7.0.0": True,
1366                "v6.0.5": True,
1367                "v6.4.4": True,
1368                "v6.4.0": True,
1369                "v6.4.1": True,
1370                "v6.2.0": True,
1371                "v6.2.3": True,
1372                "v6.2.5": True,
1373                "v6.2.7": True,
1374                "v6.0.11": True
1375            }
1376        },
1377        "src_end_ip": {
1378            "type": "string",
1379            "revisions": {
1380                "v6.0.0": True,
1381                "v7.0.0": True,
1382                "v6.0.5": True,
1383                "v6.4.4": True,
1384                "v6.4.0": True,
1385                "v6.4.1": True,
1386                "v6.2.0": True,
1387                "v6.2.3": True,
1388                "v6.2.5": True,
1389                "v6.2.7": True,
1390                "v6.0.11": True
1391            }
1392        },
1393        "keylifeseconds": {
1394            "type": "integer",
1395            "revisions": {
1396                "v6.0.0": True,
1397                "v7.0.0": True,
1398                "v6.0.5": True,
1399                "v6.4.4": True,
1400                "v6.4.0": True,
1401                "v6.4.1": True,
1402                "v6.2.0": True,
1403                "v6.2.3": True,
1404                "v6.2.5": True,
1405                "v6.2.7": True,
1406                "v6.0.11": True
1407            }
1408        },
1409        "single_source": {
1410            "type": "string",
1411            "options": [
1412                {
1413                    "value": "enable",
1414                    "revisions": {
1415                        "v6.0.0": True,
1416                        "v7.0.0": True,
1417                        "v6.0.5": True,
1418                        "v6.4.4": True,
1419                        "v6.4.0": True,
1420                        "v6.4.1": True,
1421                        "v6.2.0": True,
1422                        "v6.2.3": True,
1423                        "v6.2.5": True,
1424                        "v6.2.7": True,
1425                        "v6.0.11": True
1426                    }
1427                },
1428                {
1429                    "value": "disable",
1430                    "revisions": {
1431                        "v6.0.0": True,
1432                        "v7.0.0": True,
1433                        "v6.0.5": True,
1434                        "v6.4.4": True,
1435                        "v6.4.0": True,
1436                        "v6.4.1": True,
1437                        "v6.2.0": True,
1438                        "v6.2.3": True,
1439                        "v6.2.5": True,
1440                        "v6.2.7": True,
1441                        "v6.0.11": True
1442                    }
1443                }
1444            ],
1445            "revisions": {
1446                "v6.0.0": True,
1447                "v7.0.0": True,
1448                "v6.0.5": True,
1449                "v6.4.4": True,
1450                "v6.4.0": True,
1451                "v6.4.1": True,
1452                "v6.2.0": True,
1453                "v6.2.3": True,
1454                "v6.2.5": True,
1455                "v6.2.7": True,
1456                "v6.0.11": True
1457            }
1458        },
1459        "auto_negotiate": {
1460            "type": "string",
1461            "options": [
1462                {
1463                    "value": "enable",
1464                    "revisions": {
1465                        "v6.0.0": True,
1466                        "v7.0.0": True,
1467                        "v6.0.5": True,
1468                        "v6.4.4": True,
1469                        "v6.4.0": True,
1470                        "v6.4.1": True,
1471                        "v6.2.0": True,
1472                        "v6.2.3": True,
1473                        "v6.2.5": True,
1474                        "v6.2.7": True,
1475                        "v6.0.11": True
1476                    }
1477                },
1478                {
1479                    "value": "disable",
1480                    "revisions": {
1481                        "v6.0.0": True,
1482                        "v7.0.0": True,
1483                        "v6.0.5": True,
1484                        "v6.4.4": True,
1485                        "v6.4.0": True,
1486                        "v6.4.1": True,
1487                        "v6.2.0": True,
1488                        "v6.2.3": True,
1489                        "v6.2.5": True,
1490                        "v6.2.7": True,
1491                        "v6.0.11": True
1492                    }
1493                }
1494            ],
1495            "revisions": {
1496                "v6.0.0": True,
1497                "v7.0.0": True,
1498                "v6.0.5": True,
1499                "v6.4.4": True,
1500                "v6.4.0": True,
1501                "v6.4.1": True,
1502                "v6.2.0": True,
1503                "v6.2.3": True,
1504                "v6.2.5": True,
1505                "v6.2.7": True,
1506                "v6.0.11": True
1507            }
1508        },
1509        "l2tp": {
1510            "type": "string",
1511            "options": [
1512                {
1513                    "value": "enable",
1514                    "revisions": {
1515                        "v6.0.0": True,
1516                        "v7.0.0": True,
1517                        "v6.0.5": True,
1518                        "v6.4.4": True,
1519                        "v6.4.0": True,
1520                        "v6.4.1": True,
1521                        "v6.2.0": True,
1522                        "v6.2.3": True,
1523                        "v6.2.5": True,
1524                        "v6.2.7": True,
1525                        "v6.0.11": True
1526                    }
1527                },
1528                {
1529                    "value": "disable",
1530                    "revisions": {
1531                        "v6.0.0": True,
1532                        "v7.0.0": True,
1533                        "v6.0.5": True,
1534                        "v6.4.4": True,
1535                        "v6.4.0": True,
1536                        "v6.4.1": True,
1537                        "v6.2.0": True,
1538                        "v6.2.3": True,
1539                        "v6.2.5": True,
1540                        "v6.2.7": True,
1541                        "v6.0.11": True
1542                    }
1543                }
1544            ],
1545            "revisions": {
1546                "v6.0.0": True,
1547                "v7.0.0": True,
1548                "v6.0.5": True,
1549                "v6.4.4": True,
1550                "v6.4.0": True,
1551                "v6.4.1": True,
1552                "v6.2.0": True,
1553                "v6.2.3": True,
1554                "v6.2.5": True,
1555                "v6.2.7": True,
1556                "v6.0.11": True
1557            }
1558        },
1559        "dst_name6": {
1560            "type": "string",
1561            "revisions": {
1562                "v6.0.0": True,
1563                "v7.0.0": True,
1564                "v6.0.5": True,
1565                "v6.4.4": True,
1566                "v6.4.0": True,
1567                "v6.4.1": True,
1568                "v6.2.0": True,
1569                "v6.2.3": True,
1570                "v6.2.5": True,
1571                "v6.2.7": True,
1572                "v6.0.11": True
1573            }
1574        },
1575        "phase1name": {
1576            "type": "string",
1577            "revisions": {
1578                "v6.0.0": True,
1579                "v7.0.0": True,
1580                "v6.0.5": True,
1581                "v6.4.4": True,
1582                "v6.4.0": True,
1583                "v6.4.1": True,
1584                "v6.2.0": True,
1585                "v6.2.3": True,
1586                "v6.2.5": True,
1587                "v6.2.7": True,
1588                "v6.0.11": True
1589            }
1590        },
1591        "proposal": {
1592            "multiple_values": True,
1593            "type": "list",
1594            "options": [
1595                {
1596                    "value": "null-md5",
1597                    "revisions": {
1598                        "v6.0.0": True,
1599                        "v7.0.0": True,
1600                        "v6.0.5": True,
1601                        "v6.4.4": True,
1602                        "v6.4.0": True,
1603                        "v6.4.1": True,
1604                        "v6.2.0": True,
1605                        "v6.2.3": True,
1606                        "v6.2.5": True,
1607                        "v6.2.7": True,
1608                        "v6.0.11": True
1609                    }
1610                },
1611                {
1612                    "value": "null-sha1",
1613                    "revisions": {
1614                        "v6.0.0": True,
1615                        "v7.0.0": True,
1616                        "v6.0.5": True,
1617                        "v6.4.4": True,
1618                        "v6.4.0": True,
1619                        "v6.4.1": True,
1620                        "v6.2.0": True,
1621                        "v6.2.3": True,
1622                        "v6.2.5": True,
1623                        "v6.2.7": True,
1624                        "v6.0.11": True
1625                    }
1626                },
1627                {
1628                    "value": "null-sha256",
1629                    "revisions": {
1630                        "v6.0.0": True,
1631                        "v7.0.0": True,
1632                        "v6.0.5": True,
1633                        "v6.4.4": True,
1634                        "v6.4.0": True,
1635                        "v6.4.1": True,
1636                        "v6.2.0": True,
1637                        "v6.2.3": True,
1638                        "v6.2.5": True,
1639                        "v6.2.7": True,
1640                        "v6.0.11": True
1641                    }
1642                },
1643                {
1644                    "value": "null-sha384",
1645                    "revisions": {
1646                        "v6.0.0": True,
1647                        "v7.0.0": True,
1648                        "v6.0.5": True,
1649                        "v6.4.4": True,
1650                        "v6.4.0": True,
1651                        "v6.4.1": True,
1652                        "v6.2.0": True,
1653                        "v6.2.3": True,
1654                        "v6.2.5": True,
1655                        "v6.2.7": True,
1656                        "v6.0.11": True
1657                    }
1658                },
1659                {
1660                    "value": "null-sha512",
1661                    "revisions": {
1662                        "v6.0.0": True,
1663                        "v7.0.0": True,
1664                        "v6.0.5": True,
1665                        "v6.4.4": True,
1666                        "v6.4.0": True,
1667                        "v6.4.1": True,
1668                        "v6.2.0": True,
1669                        "v6.2.3": True,
1670                        "v6.2.5": True,
1671                        "v6.2.7": True,
1672                        "v6.0.11": True
1673                    }
1674                },
1675                {
1676                    "value": "des-null",
1677                    "revisions": {
1678                        "v6.0.0": True,
1679                        "v7.0.0": True,
1680                        "v6.0.5": True,
1681                        "v6.4.4": True,
1682                        "v6.4.0": True,
1683                        "v6.4.1": True,
1684                        "v6.2.0": True,
1685                        "v6.2.3": True,
1686                        "v6.2.5": True,
1687                        "v6.2.7": True,
1688                        "v6.0.11": True
1689                    }
1690                },
1691                {
1692                    "value": "des-md5",
1693                    "revisions": {
1694                        "v6.0.0": True,
1695                        "v7.0.0": True,
1696                        "v6.0.5": True,
1697                        "v6.4.4": True,
1698                        "v6.4.0": True,
1699                        "v6.4.1": True,
1700                        "v6.2.0": True,
1701                        "v6.2.3": True,
1702                        "v6.2.5": True,
1703                        "v6.2.7": True,
1704                        "v6.0.11": True
1705                    }
1706                },
1707                {
1708                    "value": "des-sha1",
1709                    "revisions": {
1710                        "v6.0.0": True,
1711                        "v7.0.0": True,
1712                        "v6.0.5": True,
1713                        "v6.4.4": True,
1714                        "v6.4.0": True,
1715                        "v6.4.1": True,
1716                        "v6.2.0": True,
1717                        "v6.2.3": True,
1718                        "v6.2.5": True,
1719                        "v6.2.7": True,
1720                        "v6.0.11": True
1721                    }
1722                },
1723                {
1724                    "value": "des-sha256",
1725                    "revisions": {
1726                        "v6.0.0": True,
1727                        "v7.0.0": True,
1728                        "v6.0.5": True,
1729                        "v6.4.4": True,
1730                        "v6.4.0": True,
1731                        "v6.4.1": True,
1732                        "v6.2.0": True,
1733                        "v6.2.3": True,
1734                        "v6.2.5": True,
1735                        "v6.2.7": True,
1736                        "v6.0.11": True
1737                    }
1738                },
1739                {
1740                    "value": "des-sha384",
1741                    "revisions": {
1742                        "v6.0.0": True,
1743                        "v7.0.0": True,
1744                        "v6.0.5": True,
1745                        "v6.4.4": True,
1746                        "v6.4.0": True,
1747                        "v6.4.1": True,
1748                        "v6.2.0": True,
1749                        "v6.2.3": True,
1750                        "v6.2.5": True,
1751                        "v6.2.7": True,
1752                        "v6.0.11": True
1753                    }
1754                },
1755                {
1756                    "value": "des-sha512",
1757                    "revisions": {
1758                        "v6.0.0": True,
1759                        "v7.0.0": True,
1760                        "v6.0.5": True,
1761                        "v6.4.4": True,
1762                        "v6.4.0": True,
1763                        "v6.4.1": True,
1764                        "v6.2.0": True,
1765                        "v6.2.3": True,
1766                        "v6.2.5": True,
1767                        "v6.2.7": True,
1768                        "v6.0.11": True
1769                    }
1770                },
1771                {
1772                    "value": "3des-null",
1773                    "revisions": {
1774                        "v6.0.0": True,
1775                        "v7.0.0": True,
1776                        "v6.0.5": True,
1777                        "v6.4.4": True,
1778                        "v6.4.0": True,
1779                        "v6.4.1": True,
1780                        "v6.2.0": True,
1781                        "v6.2.3": True,
1782                        "v6.2.5": True,
1783                        "v6.2.7": True,
1784                        "v6.0.11": True
1785                    }
1786                },
1787                {
1788                    "value": "3des-md5",
1789                    "revisions": {
1790                        "v6.0.0": True,
1791                        "v7.0.0": True,
1792                        "v6.0.5": True,
1793                        "v6.4.4": True,
1794                        "v6.4.0": True,
1795                        "v6.4.1": True,
1796                        "v6.2.0": True,
1797                        "v6.2.3": True,
1798                        "v6.2.5": True,
1799                        "v6.2.7": True,
1800                        "v6.0.11": True
1801                    }
1802                },
1803                {
1804                    "value": "3des-sha1",
1805                    "revisions": {
1806                        "v6.0.0": True,
1807                        "v7.0.0": True,
1808                        "v6.0.5": True,
1809                        "v6.4.4": True,
1810                        "v6.4.0": True,
1811                        "v6.4.1": True,
1812                        "v6.2.0": True,
1813                        "v6.2.3": True,
1814                        "v6.2.5": True,
1815                        "v6.2.7": True,
1816                        "v6.0.11": True
1817                    }
1818                },
1819                {
1820                    "value": "3des-sha256",
1821                    "revisions": {
1822                        "v6.0.0": True,
1823                        "v7.0.0": True,
1824                        "v6.0.5": True,
1825                        "v6.4.4": True,
1826                        "v6.4.0": True,
1827                        "v6.4.1": True,
1828                        "v6.2.0": True,
1829                        "v6.2.3": True,
1830                        "v6.2.5": True,
1831                        "v6.2.7": True,
1832                        "v6.0.11": True
1833                    }
1834                },
1835                {
1836                    "value": "3des-sha384",
1837                    "revisions": {
1838                        "v6.0.0": True,
1839                        "v7.0.0": True,
1840                        "v6.0.5": True,
1841                        "v6.4.4": True,
1842                        "v6.4.0": True,
1843                        "v6.4.1": True,
1844                        "v6.2.0": True,
1845                        "v6.2.3": True,
1846                        "v6.2.5": True,
1847                        "v6.2.7": True,
1848                        "v6.0.11": True
1849                    }
1850                },
1851                {
1852                    "value": "3des-sha512",
1853                    "revisions": {
1854                        "v6.0.0": True,
1855                        "v7.0.0": True,
1856                        "v6.0.5": True,
1857                        "v6.4.4": True,
1858                        "v6.4.0": True,
1859                        "v6.4.1": True,
1860                        "v6.2.0": True,
1861                        "v6.2.3": True,
1862                        "v6.2.5": True,
1863                        "v6.2.7": True,
1864                        "v6.0.11": True
1865                    }
1866                },
1867                {
1868                    "value": "aes128-null",
1869                    "revisions": {
1870                        "v6.0.0": True,
1871                        "v7.0.0": True,
1872                        "v6.0.5": True,
1873                        "v6.4.4": True,
1874                        "v6.4.0": True,
1875                        "v6.4.1": True,
1876                        "v6.2.0": True,
1877                        "v6.2.3": True,
1878                        "v6.2.5": True,
1879                        "v6.2.7": True,
1880                        "v6.0.11": True
1881                    }
1882                },
1883                {
1884                    "value": "aes128-md5",
1885                    "revisions": {
1886                        "v6.0.0": True,
1887                        "v7.0.0": True,
1888                        "v6.0.5": True,
1889                        "v6.4.4": True,
1890                        "v6.4.0": True,
1891                        "v6.4.1": True,
1892                        "v6.2.0": True,
1893                        "v6.2.3": True,
1894                        "v6.2.5": True,
1895                        "v6.2.7": True,
1896                        "v6.0.11": True
1897                    }
1898                },
1899                {
1900                    "value": "aes128-sha1",
1901                    "revisions": {
1902                        "v6.0.0": True,
1903                        "v7.0.0": True,
1904                        "v6.0.5": True,
1905                        "v6.4.4": True,
1906                        "v6.4.0": True,
1907                        "v6.4.1": True,
1908                        "v6.2.0": True,
1909                        "v6.2.3": True,
1910                        "v6.2.5": True,
1911                        "v6.2.7": True,
1912                        "v6.0.11": True
1913                    }
1914                },
1915                {
1916                    "value": "aes128-sha256",
1917                    "revisions": {
1918                        "v6.0.0": True,
1919                        "v7.0.0": True,
1920                        "v6.0.5": True,
1921                        "v6.4.4": True,
1922                        "v6.4.0": True,
1923                        "v6.4.1": True,
1924                        "v6.2.0": True,
1925                        "v6.2.3": True,
1926                        "v6.2.5": True,
1927                        "v6.2.7": True,
1928                        "v6.0.11": True
1929                    }
1930                },
1931                {
1932                    "value": "aes128-sha384",
1933                    "revisions": {
1934                        "v6.0.0": True,
1935                        "v7.0.0": True,
1936                        "v6.0.5": True,
1937                        "v6.4.4": True,
1938                        "v6.4.0": True,
1939                        "v6.4.1": True,
1940                        "v6.2.0": True,
1941                        "v6.2.3": True,
1942                        "v6.2.5": True,
1943                        "v6.2.7": True,
1944                        "v6.0.11": True
1945                    }
1946                },
1947                {
1948                    "value": "aes128-sha512",
1949                    "revisions": {
1950                        "v6.0.0": True,
1951                        "v7.0.0": True,
1952                        "v6.0.5": True,
1953                        "v6.4.4": True,
1954                        "v6.4.0": True,
1955                        "v6.4.1": True,
1956                        "v6.2.0": True,
1957                        "v6.2.3": True,
1958                        "v6.2.5": True,
1959                        "v6.2.7": True,
1960                        "v6.0.11": True
1961                    }
1962                },
1963                {
1964                    "value": "aes128gcm",
1965                    "revisions": {
1966                        "v6.0.0": True,
1967                        "v7.0.0": True,
1968                        "v6.0.5": True,
1969                        "v6.4.4": True,
1970                        "v6.4.0": True,
1971                        "v6.4.1": True,
1972                        "v6.2.0": True,
1973                        "v6.2.3": True,
1974                        "v6.2.5": True,
1975                        "v6.2.7": True,
1976                        "v6.0.11": True
1977                    }
1978                },
1979                {
1980                    "value": "aes192-null",
1981                    "revisions": {
1982                        "v6.0.0": True,
1983                        "v7.0.0": True,
1984                        "v6.0.5": True,
1985                        "v6.4.4": True,
1986                        "v6.4.0": True,
1987                        "v6.4.1": True,
1988                        "v6.2.0": True,
1989                        "v6.2.3": True,
1990                        "v6.2.5": True,
1991                        "v6.2.7": True,
1992                        "v6.0.11": True
1993                    }
1994                },
1995                {
1996                    "value": "aes192-md5",
1997                    "revisions": {
1998                        "v6.0.0": True,
1999                        "v7.0.0": True,
2000                        "v6.0.5": True,
2001                        "v6.4.4": True,
2002                        "v6.4.0": True,
2003                        "v6.4.1": True,
2004                        "v6.2.0": True,
2005                        "v6.2.3": True,
2006                        "v6.2.5": True,
2007                        "v6.2.7": True,
2008                        "v6.0.11": True
2009                    }
2010                },
2011                {
2012                    "value": "aes192-sha1",
2013                    "revisions": {
2014                        "v6.0.0": True,
2015                        "v7.0.0": True,
2016                        "v6.0.5": True,
2017                        "v6.4.4": True,
2018                        "v6.4.0": True,
2019                        "v6.4.1": True,
2020                        "v6.2.0": True,
2021                        "v6.2.3": True,
2022                        "v6.2.5": True,
2023                        "v6.2.7": True,
2024                        "v6.0.11": True
2025                    }
2026                },
2027                {
2028                    "value": "aes192-sha256",
2029                    "revisions": {
2030                        "v6.0.0": True,
2031                        "v7.0.0": True,
2032                        "v6.0.5": True,
2033                        "v6.4.4": True,
2034                        "v6.4.0": True,
2035                        "v6.4.1": True,
2036                        "v6.2.0": True,
2037                        "v6.2.3": True,
2038                        "v6.2.5": True,
2039                        "v6.2.7": True,
2040                        "v6.0.11": True
2041                    }
2042                },
2043                {
2044                    "value": "aes192-sha384",
2045                    "revisions": {
2046                        "v6.0.0": True,
2047                        "v7.0.0": True,
2048                        "v6.0.5": True,
2049                        "v6.4.4": True,
2050                        "v6.4.0": True,
2051                        "v6.4.1": True,
2052                        "v6.2.0": True,
2053                        "v6.2.3": True,
2054                        "v6.2.5": True,
2055                        "v6.2.7": True,
2056                        "v6.0.11": True
2057                    }
2058                },
2059                {
2060                    "value": "aes192-sha512",
2061                    "revisions": {
2062                        "v6.0.0": True,
2063                        "v7.0.0": True,
2064                        "v6.0.5": True,
2065                        "v6.4.4": True,
2066                        "v6.4.0": True,
2067                        "v6.4.1": True,
2068                        "v6.2.0": True,
2069                        "v6.2.3": True,
2070                        "v6.2.5": True,
2071                        "v6.2.7": True,
2072                        "v6.0.11": True
2073                    }
2074                },
2075                {
2076                    "value": "aes256-null",
2077                    "revisions": {
2078                        "v6.0.0": True,
2079                        "v7.0.0": True,
2080                        "v6.0.5": True,
2081                        "v6.4.4": True,
2082                        "v6.4.0": True,
2083                        "v6.4.1": True,
2084                        "v6.2.0": True,
2085                        "v6.2.3": True,
2086                        "v6.2.5": True,
2087                        "v6.2.7": True,
2088                        "v6.0.11": True
2089                    }
2090                },
2091                {
2092                    "value": "aes256-md5",
2093                    "revisions": {
2094                        "v6.0.0": True,
2095                        "v7.0.0": True,
2096                        "v6.0.5": True,
2097                        "v6.4.4": True,
2098                        "v6.4.0": True,
2099                        "v6.4.1": True,
2100                        "v6.2.0": True,
2101                        "v6.2.3": True,
2102                        "v6.2.5": True,
2103                        "v6.2.7": True,
2104                        "v6.0.11": True
2105                    }
2106                },
2107                {
2108                    "value": "aes256-sha1",
2109                    "revisions": {
2110                        "v6.0.0": True,
2111                        "v7.0.0": True,
2112                        "v6.0.5": True,
2113                        "v6.4.4": True,
2114                        "v6.4.0": True,
2115                        "v6.4.1": True,
2116                        "v6.2.0": True,
2117                        "v6.2.3": True,
2118                        "v6.2.5": True,
2119                        "v6.2.7": True,
2120                        "v6.0.11": True
2121                    }
2122                },
2123                {
2124                    "value": "aes256-sha256",
2125                    "revisions": {
2126                        "v6.0.0": True,
2127                        "v7.0.0": True,
2128                        "v6.0.5": True,
2129                        "v6.4.4": True,
2130                        "v6.4.0": True,
2131                        "v6.4.1": True,
2132                        "v6.2.0": True,
2133                        "v6.2.3": True,
2134                        "v6.2.5": True,
2135                        "v6.2.7": True,
2136                        "v6.0.11": True
2137                    }
2138                },
2139                {
2140                    "value": "aes256-sha384",
2141                    "revisions": {
2142                        "v6.0.0": True,
2143                        "v7.0.0": True,
2144                        "v6.0.5": True,
2145                        "v6.4.4": True,
2146                        "v6.4.0": True,
2147                        "v6.4.1": True,
2148                        "v6.2.0": True,
2149                        "v6.2.3": True,
2150                        "v6.2.5": True,
2151                        "v6.2.7": True,
2152                        "v6.0.11": True
2153                    }
2154                },
2155                {
2156                    "value": "aes256-sha512",
2157                    "revisions": {
2158                        "v6.0.0": True,
2159                        "v7.0.0": True,
2160                        "v6.0.5": True,
2161                        "v6.4.4": True,
2162                        "v6.4.0": True,
2163                        "v6.4.1": True,
2164                        "v6.2.0": True,
2165                        "v6.2.3": True,
2166                        "v6.2.5": True,
2167                        "v6.2.7": True,
2168                        "v6.0.11": True
2169                    }
2170                },
2171                {
2172                    "value": "aes256gcm",
2173                    "revisions": {
2174                        "v6.0.0": True,
2175                        "v7.0.0": True,
2176                        "v6.0.5": True,
2177                        "v6.4.4": True,
2178                        "v6.4.0": True,
2179                        "v6.4.1": True,
2180                        "v6.2.0": True,
2181                        "v6.2.3": True,
2182                        "v6.2.5": True,
2183                        "v6.2.7": True,
2184                        "v6.0.11": True
2185                    }
2186                },
2187                {
2188                    "value": "chacha20poly1305",
2189                    "revisions": {
2190                        "v6.0.0": True,
2191                        "v7.0.0": True,
2192                        "v6.0.5": True,
2193                        "v6.4.4": True,
2194                        "v6.4.0": True,
2195                        "v6.4.1": True,
2196                        "v6.2.0": True,
2197                        "v6.2.3": True,
2198                        "v6.2.5": True,
2199                        "v6.2.7": True,
2200                        "v6.0.11": True
2201                    }
2202                },
2203                {
2204                    "value": "aria128-null",
2205                    "revisions": {
2206                        "v6.0.0": True,
2207                        "v7.0.0": True,
2208                        "v6.0.5": True,
2209                        "v6.4.4": True,
2210                        "v6.4.0": True,
2211                        "v6.4.1": True,
2212                        "v6.2.0": True,
2213                        "v6.2.3": True,
2214                        "v6.2.5": True,
2215                        "v6.2.7": True,
2216                        "v6.0.11": True
2217                    }
2218                },
2219                {
2220                    "value": "aria128-md5",
2221                    "revisions": {
2222                        "v6.0.0": True,
2223                        "v7.0.0": True,
2224                        "v6.0.5": True,
2225                        "v6.4.4": True,
2226                        "v6.4.0": True,
2227                        "v6.4.1": True,
2228                        "v6.2.0": True,
2229                        "v6.2.3": True,
2230                        "v6.2.5": True,
2231                        "v6.2.7": True,
2232                        "v6.0.11": True
2233                    }
2234                },
2235                {
2236                    "value": "aria128-sha1",
2237                    "revisions": {
2238                        "v6.0.0": True,
2239                        "v7.0.0": True,
2240                        "v6.0.5": True,
2241                        "v6.4.4": True,
2242                        "v6.4.0": True,
2243                        "v6.4.1": True,
2244                        "v6.2.0": True,
2245                        "v6.2.3": True,
2246                        "v6.2.5": True,
2247                        "v6.2.7": True,
2248                        "v6.0.11": True
2249                    }
2250                },
2251                {
2252                    "value": "aria128-sha256",
2253                    "revisions": {
2254                        "v6.0.0": True,
2255                        "v7.0.0": True,
2256                        "v6.0.5": True,
2257                        "v6.4.4": True,
2258                        "v6.4.0": True,
2259                        "v6.4.1": True,
2260                        "v6.2.0": True,
2261                        "v6.2.3": True,
2262                        "v6.2.5": True,
2263                        "v6.2.7": True,
2264                        "v6.0.11": True
2265                    }
2266                },
2267                {
2268                    "value": "aria128-sha384",
2269                    "revisions": {
2270                        "v6.0.0": True,
2271                        "v7.0.0": True,
2272                        "v6.0.5": True,
2273                        "v6.4.4": True,
2274                        "v6.4.0": True,
2275                        "v6.4.1": True,
2276                        "v6.2.0": True,
2277                        "v6.2.3": True,
2278                        "v6.2.5": True,
2279                        "v6.2.7": True,
2280                        "v6.0.11": True
2281                    }
2282                },
2283                {
2284                    "value": "aria128-sha512",
2285                    "revisions": {
2286                        "v6.0.0": True,
2287                        "v7.0.0": True,
2288                        "v6.0.5": True,
2289                        "v6.4.4": True,
2290                        "v6.4.0": True,
2291                        "v6.4.1": True,
2292                        "v6.2.0": True,
2293                        "v6.2.3": True,
2294                        "v6.2.5": True,
2295                        "v6.2.7": True,
2296                        "v6.0.11": True
2297                    }
2298                },
2299                {
2300                    "value": "aria192-null",
2301                    "revisions": {
2302                        "v6.0.0": True,
2303                        "v7.0.0": True,
2304                        "v6.0.5": True,
2305                        "v6.4.4": True,
2306                        "v6.4.0": True,
2307                        "v6.4.1": True,
2308                        "v6.2.0": True,
2309                        "v6.2.3": True,
2310                        "v6.2.5": True,
2311                        "v6.2.7": True,
2312                        "v6.0.11": True
2313                    }
2314                },
2315                {
2316                    "value": "aria192-md5",
2317                    "revisions": {
2318                        "v6.0.0": True,
2319                        "v7.0.0": True,
2320                        "v6.0.5": True,
2321                        "v6.4.4": True,
2322                        "v6.4.0": True,
2323                        "v6.4.1": True,
2324                        "v6.2.0": True,
2325                        "v6.2.3": True,
2326                        "v6.2.5": True,
2327                        "v6.2.7": True,
2328                        "v6.0.11": True
2329                    }
2330                },
2331                {
2332                    "value": "aria192-sha1",
2333                    "revisions": {
2334                        "v6.0.0": True,
2335                        "v7.0.0": True,
2336                        "v6.0.5": True,
2337                        "v6.4.4": True,
2338                        "v6.4.0": True,
2339                        "v6.4.1": True,
2340                        "v6.2.0": True,
2341                        "v6.2.3": True,
2342                        "v6.2.5": True,
2343                        "v6.2.7": True,
2344                        "v6.0.11": True
2345                    }
2346                },
2347                {
2348                    "value": "aria192-sha256",
2349                    "revisions": {
2350                        "v6.0.0": True,
2351                        "v7.0.0": True,
2352                        "v6.0.5": True,
2353                        "v6.4.4": True,
2354                        "v6.4.0": True,
2355                        "v6.4.1": True,
2356                        "v6.2.0": True,
2357                        "v6.2.3": True,
2358                        "v6.2.5": True,
2359                        "v6.2.7": True,
2360                        "v6.0.11": True
2361                    }
2362                },
2363                {
2364                    "value": "aria192-sha384",
2365                    "revisions": {
2366                        "v6.0.0": True,
2367                        "v7.0.0": True,
2368                        "v6.0.5": True,
2369                        "v6.4.4": True,
2370                        "v6.4.0": True,
2371                        "v6.4.1": True,
2372                        "v6.2.0": True,
2373                        "v6.2.3": True,
2374                        "v6.2.5": True,
2375                        "v6.2.7": True,
2376                        "v6.0.11": True
2377                    }
2378                },
2379                {
2380                    "value": "aria192-sha512",
2381                    "revisions": {
2382                        "v6.0.0": True,
2383                        "v7.0.0": True,
2384                        "v6.0.5": True,
2385                        "v6.4.4": True,
2386                        "v6.4.0": True,
2387                        "v6.4.1": True,
2388                        "v6.2.0": True,
2389                        "v6.2.3": True,
2390                        "v6.2.5": True,
2391                        "v6.2.7": True,
2392                        "v6.0.11": True
2393                    }
2394                },
2395                {
2396                    "value": "aria256-null",
2397                    "revisions": {
2398                        "v6.0.0": True,
2399                        "v7.0.0": True,
2400                        "v6.0.5": True,
2401                        "v6.4.4": True,
2402                        "v6.4.0": True,
2403                        "v6.4.1": True,
2404                        "v6.2.0": True,
2405                        "v6.2.3": True,
2406                        "v6.2.5": True,
2407                        "v6.2.7": True,
2408                        "v6.0.11": True
2409                    }
2410                },
2411                {
2412                    "value": "aria256-md5",
2413                    "revisions": {
2414                        "v6.0.0": True,
2415                        "v7.0.0": True,
2416                        "v6.0.5": True,
2417                        "v6.4.4": True,
2418                        "v6.4.0": True,
2419                        "v6.4.1": True,
2420                        "v6.2.0": True,
2421                        "v6.2.3": True,
2422                        "v6.2.5": True,
2423                        "v6.2.7": True,
2424                        "v6.0.11": True
2425                    }
2426                },
2427                {
2428                    "value": "aria256-sha1",
2429                    "revisions": {
2430                        "v6.0.0": True,
2431                        "v7.0.0": True,
2432                        "v6.0.5": True,
2433                        "v6.4.4": True,
2434                        "v6.4.0": True,
2435                        "v6.4.1": True,
2436                        "v6.2.0": True,
2437                        "v6.2.3": True,
2438                        "v6.2.5": True,
2439                        "v6.2.7": True,
2440                        "v6.0.11": True
2441                    }
2442                },
2443                {
2444                    "value": "aria256-sha256",
2445                    "revisions": {
2446                        "v6.0.0": True,
2447                        "v7.0.0": True,
2448                        "v6.0.5": True,
2449                        "v6.4.4": True,
2450                        "v6.4.0": True,
2451                        "v6.4.1": True,
2452                        "v6.2.0": True,
2453                        "v6.2.3": True,
2454                        "v6.2.5": True,
2455                        "v6.2.7": True,
2456                        "v6.0.11": True
2457                    }
2458                },
2459                {
2460                    "value": "aria256-sha384",
2461                    "revisions": {
2462                        "v6.0.0": True,
2463                        "v7.0.0": True,
2464                        "v6.0.5": True,
2465                        "v6.4.4": True,
2466                        "v6.4.0": True,
2467                        "v6.4.1": True,
2468                        "v6.2.0": True,
2469                        "v6.2.3": True,
2470                        "v6.2.5": True,
2471                        "v6.2.7": True,
2472                        "v6.0.11": True
2473                    }
2474                },
2475                {
2476                    "value": "aria256-sha512",
2477                    "revisions": {
2478                        "v6.0.0": True,
2479                        "v7.0.0": True,
2480                        "v6.0.5": True,
2481                        "v6.4.4": True,
2482                        "v6.4.0": True,
2483                        "v6.4.1": True,
2484                        "v6.2.0": True,
2485                        "v6.2.3": True,
2486                        "v6.2.5": True,
2487                        "v6.2.7": True,
2488                        "v6.0.11": True
2489                    }
2490                },
2491                {
2492                    "value": "seed-null",
2493                    "revisions": {
2494                        "v6.0.0": True,
2495                        "v7.0.0": True,
2496                        "v6.0.5": True,
2497                        "v6.4.4": True,
2498                        "v6.4.0": True,
2499                        "v6.4.1": True,
2500                        "v6.2.0": True,
2501                        "v6.2.3": True,
2502                        "v6.2.5": True,
2503                        "v6.2.7": True,
2504                        "v6.0.11": True
2505                    }
2506                },
2507                {
2508                    "value": "seed-md5",
2509                    "revisions": {
2510                        "v6.0.0": True,
2511                        "v7.0.0": True,
2512                        "v6.0.5": True,
2513                        "v6.4.4": True,
2514                        "v6.4.0": True,
2515                        "v6.4.1": True,
2516                        "v6.2.0": True,
2517                        "v6.2.3": True,
2518                        "v6.2.5": True,
2519                        "v6.2.7": True,
2520                        "v6.0.11": True
2521                    }
2522                },
2523                {
2524                    "value": "seed-sha1",
2525                    "revisions": {
2526                        "v6.0.0": True,
2527                        "v7.0.0": True,
2528                        "v6.0.5": True,
2529                        "v6.4.4": True,
2530                        "v6.4.0": True,
2531                        "v6.4.1": True,
2532                        "v6.2.0": True,
2533                        "v6.2.3": True,
2534                        "v6.2.5": True,
2535                        "v6.2.7": True,
2536                        "v6.0.11": True
2537                    }
2538                },
2539                {
2540                    "value": "seed-sha256",
2541                    "revisions": {
2542                        "v6.0.0": True,
2543                        "v7.0.0": True,
2544                        "v6.0.5": True,
2545                        "v6.4.4": True,
2546                        "v6.4.0": True,
2547                        "v6.4.1": True,
2548                        "v6.2.0": True,
2549                        "v6.2.3": True,
2550                        "v6.2.5": True,
2551                        "v6.2.7": True,
2552                        "v6.0.11": True
2553                    }
2554                },
2555                {
2556                    "value": "seed-sha384",
2557                    "revisions": {
2558                        "v6.0.0": True,
2559                        "v7.0.0": True,
2560                        "v6.0.5": True,
2561                        "v6.4.4": True,
2562                        "v6.4.0": True,
2563                        "v6.4.1": True,
2564                        "v6.2.0": True,
2565                        "v6.2.3": True,
2566                        "v6.2.5": True,
2567                        "v6.2.7": True,
2568                        "v6.0.11": True
2569                    }
2570                },
2571                {
2572                    "value": "seed-sha512",
2573                    "revisions": {
2574                        "v6.0.0": True,
2575                        "v7.0.0": True,
2576                        "v6.0.5": True,
2577                        "v6.4.4": True,
2578                        "v6.4.0": True,
2579                        "v6.4.1": True,
2580                        "v6.2.0": True,
2581                        "v6.2.3": True,
2582                        "v6.2.5": True,
2583                        "v6.2.7": True,
2584                        "v6.0.11": True
2585                    }
2586                }
2587            ],
2588            "revisions": {
2589                "v6.0.0": True,
2590                "v7.0.0": True,
2591                "v6.0.5": True,
2592                "v6.4.4": True,
2593                "v6.4.0": True,
2594                "v6.4.1": True,
2595                "v6.2.0": True,
2596                "v6.2.3": True,
2597                "v6.2.5": True,
2598                "v6.2.7": True,
2599                "v6.0.11": True
2600            }
2601        },
2602        "src_addr_type": {
2603            "type": "string",
2604            "options": [
2605                {
2606                    "value": "subnet",
2607                    "revisions": {
2608                        "v6.0.0": True,
2609                        "v7.0.0": True,
2610                        "v6.0.5": True,
2611                        "v6.4.4": True,
2612                        "v6.4.0": True,
2613                        "v6.4.1": True,
2614                        "v6.2.0": True,
2615                        "v6.2.3": True,
2616                        "v6.2.5": True,
2617                        "v6.2.7": True,
2618                        "v6.0.11": True
2619                    }
2620                },
2621                {
2622                    "value": "range",
2623                    "revisions": {
2624                        "v6.0.0": True,
2625                        "v7.0.0": True,
2626                        "v6.0.5": True,
2627                        "v6.4.4": True,
2628                        "v6.4.0": True,
2629                        "v6.4.1": True,
2630                        "v6.2.0": True,
2631                        "v6.2.3": True,
2632                        "v6.2.5": True,
2633                        "v6.2.7": True,
2634                        "v6.0.11": True
2635                    }
2636                },
2637                {
2638                    "value": "ip",
2639                    "revisions": {
2640                        "v6.0.0": True,
2641                        "v7.0.0": True,
2642                        "v6.0.5": True,
2643                        "v6.4.4": True,
2644                        "v6.4.0": True,
2645                        "v6.4.1": True,
2646                        "v6.2.0": True,
2647                        "v6.2.3": True,
2648                        "v6.2.5": True,
2649                        "v6.2.7": True,
2650                        "v6.0.11": True
2651                    }
2652                },
2653                {
2654                    "value": "name",
2655                    "revisions": {
2656                        "v6.0.0": True,
2657                        "v7.0.0": True,
2658                        "v6.0.5": True,
2659                        "v6.4.4": True,
2660                        "v6.4.0": True,
2661                        "v6.4.1": True,
2662                        "v6.2.0": True,
2663                        "v6.2.3": True,
2664                        "v6.2.5": True,
2665                        "v6.2.7": True,
2666                        "v6.0.11": True
2667                    }
2668                },
2669                {
2670                    "value": "subnet6",
2671                    "revisions": {
2672                        "v6.0.0": True,
2673                        "v7.0.0": True,
2674                        "v6.0.5": True,
2675                        "v6.4.4": True,
2676                        "v6.4.0": True,
2677                        "v6.4.1": True,
2678                        "v6.2.0": True,
2679                        "v6.2.3": True,
2680                        "v6.2.5": True,
2681                        "v6.2.7": True,
2682                        "v6.0.11": True
2683                    }
2684                },
2685                {
2686                    "value": "range6",
2687                    "revisions": {
2688                        "v6.0.0": True,
2689                        "v7.0.0": True,
2690                        "v6.0.5": True,
2691                        "v6.4.4": True,
2692                        "v6.4.0": True,
2693                        "v6.4.1": True,
2694                        "v6.2.0": True,
2695                        "v6.2.3": True,
2696                        "v6.2.5": True,
2697                        "v6.2.7": True,
2698                        "v6.0.11": True
2699                    }
2700                },
2701                {
2702                    "value": "ip6",
2703                    "revisions": {
2704                        "v6.0.0": True,
2705                        "v7.0.0": True,
2706                        "v6.0.5": True,
2707                        "v6.4.4": True,
2708                        "v6.4.0": True,
2709                        "v6.4.1": True,
2710                        "v6.2.0": True,
2711                        "v6.2.3": True,
2712                        "v6.2.5": True,
2713                        "v6.2.7": True,
2714                        "v6.0.11": True
2715                    }
2716                },
2717                {
2718                    "value": "name6",
2719                    "revisions": {
2720                        "v6.0.0": True,
2721                        "v7.0.0": True,
2722                        "v6.0.5": True,
2723                        "v6.4.4": True,
2724                        "v6.4.0": True,
2725                        "v6.4.1": True,
2726                        "v6.2.0": True,
2727                        "v6.2.3": True,
2728                        "v6.2.5": True,
2729                        "v6.2.7": True,
2730                        "v6.0.11": True
2731                    }
2732                }
2733            ],
2734            "revisions": {
2735                "v6.0.0": True,
2736                "v7.0.0": True,
2737                "v6.0.5": True,
2738                "v6.4.4": True,
2739                "v6.4.0": True,
2740                "v6.4.1": True,
2741                "v6.2.0": True,
2742                "v6.2.3": True,
2743                "v6.2.5": True,
2744                "v6.2.7": True,
2745                "v6.0.11": True
2746            }
2747        },
2748        "dst_port": {
2749            "type": "integer",
2750            "revisions": {
2751                "v6.0.0": True,
2752                "v7.0.0": True,
2753                "v6.0.5": True,
2754                "v6.4.4": True,
2755                "v6.4.0": True,
2756                "v6.4.1": True,
2757                "v6.2.0": True,
2758                "v6.2.3": True,
2759                "v6.2.5": True,
2760                "v6.2.7": True,
2761                "v6.0.11": True
2762            }
2763        },
2764        "dhcp_ipsec": {
2765            "type": "string",
2766            "options": [
2767                {
2768                    "value": "enable",
2769                    "revisions": {
2770                        "v6.0.0": True,
2771                        "v7.0.0": True,
2772                        "v6.0.5": True,
2773                        "v6.4.4": True,
2774                        "v6.4.0": True,
2775                        "v6.4.1": True,
2776                        "v6.2.0": True,
2777                        "v6.2.3": True,
2778                        "v6.2.5": True,
2779                        "v6.2.7": True,
2780                        "v6.0.11": True
2781                    }
2782                },
2783                {
2784                    "value": "disable",
2785                    "revisions": {
2786                        "v6.0.0": True,
2787                        "v7.0.0": True,
2788                        "v6.0.5": True,
2789                        "v6.4.4": True,
2790                        "v6.4.0": True,
2791                        "v6.4.1": True,
2792                        "v6.2.0": True,
2793                        "v6.2.3": True,
2794                        "v6.2.5": True,
2795                        "v6.2.7": True,
2796                        "v6.0.11": True
2797                    }
2798                }
2799            ],
2800            "revisions": {
2801                "v6.0.0": True,
2802                "v7.0.0": True,
2803                "v6.0.5": True,
2804                "v6.4.4": True,
2805                "v6.4.0": True,
2806                "v6.4.1": True,
2807                "v6.2.0": True,
2808                "v6.2.3": True,
2809                "v6.2.5": True,
2810                "v6.2.7": True,
2811                "v6.0.11": True
2812            }
2813        },
2814        "dst_subnet6": {
2815            "type": "string",
2816            "revisions": {
2817                "v6.0.0": True,
2818                "v7.0.0": True,
2819                "v6.0.5": True,
2820                "v6.4.4": True,
2821                "v6.4.0": True,
2822                "v6.4.1": True,
2823                "v6.2.0": True,
2824                "v6.2.3": True,
2825                "v6.2.5": True,
2826                "v6.2.7": True,
2827                "v6.0.11": True
2828            }
2829        },
2830        "src_name6": {
2831            "type": "string",
2832            "revisions": {
2833                "v6.0.0": True,
2834                "v7.0.0": True,
2835                "v6.0.5": True,
2836                "v6.4.4": True,
2837                "v6.4.0": True,
2838                "v6.4.1": True,
2839                "v6.2.0": True,
2840                "v6.2.3": True,
2841                "v6.2.5": True,
2842                "v6.2.7": True,
2843                "v6.0.11": True
2844            }
2845        },
2846        "src_name": {
2847            "type": "string",
2848            "revisions": {
2849                "v6.0.0": True,
2850                "v7.0.0": True,
2851                "v6.0.5": True,
2852                "v6.4.4": True,
2853                "v6.4.0": True,
2854                "v6.4.1": True,
2855                "v6.2.0": True,
2856                "v6.2.3": True,
2857                "v6.2.5": True,
2858                "v6.2.7": True,
2859                "v6.0.11": True
2860            }
2861        },
2862        "src_end_ip6": {
2863            "type": "string",
2864            "revisions": {
2865                "v6.0.0": True,
2866                "v7.0.0": True,
2867                "v6.0.5": True,
2868                "v6.4.4": True,
2869                "v6.4.0": True,
2870                "v6.4.1": True,
2871                "v6.2.0": True,
2872                "v6.2.3": True,
2873                "v6.2.5": True,
2874                "v6.2.7": True,
2875                "v6.0.11": True
2876            }
2877        },
2878        "pfs": {
2879            "type": "string",
2880            "options": [
2881                {
2882                    "value": "enable",
2883                    "revisions": {
2884                        "v6.0.0": True,
2885                        "v7.0.0": True,
2886                        "v6.0.5": True,
2887                        "v6.4.4": True,
2888                        "v6.4.0": True,
2889                        "v6.4.1": True,
2890                        "v6.2.0": True,
2891                        "v6.2.3": True,
2892                        "v6.2.5": True,
2893                        "v6.2.7": True,
2894                        "v6.0.11": True
2895                    }
2896                },
2897                {
2898                    "value": "disable",
2899                    "revisions": {
2900                        "v6.0.0": True,
2901                        "v7.0.0": True,
2902                        "v6.0.5": True,
2903                        "v6.4.4": True,
2904                        "v6.4.0": True,
2905                        "v6.4.1": True,
2906                        "v6.2.0": True,
2907                        "v6.2.3": True,
2908                        "v6.2.5": True,
2909                        "v6.2.7": True,
2910                        "v6.0.11": True
2911                    }
2912                }
2913            ],
2914            "revisions": {
2915                "v6.0.0": True,
2916                "v7.0.0": True,
2917                "v6.0.5": True,
2918                "v6.4.4": True,
2919                "v6.4.0": True,
2920                "v6.4.1": True,
2921                "v6.2.0": True,
2922                "v6.2.3": True,
2923                "v6.2.5": True,
2924                "v6.2.7": True,
2925                "v6.0.11": True
2926            }
2927        },
2928        "dst_end_ip": {
2929            "type": "string",
2930            "revisions": {
2931                "v6.0.0": True,
2932                "v7.0.0": True,
2933                "v6.0.5": True,
2934                "v6.4.4": True,
2935                "v6.4.0": True,
2936                "v6.4.1": True,
2937                "v6.2.0": True,
2938                "v6.2.3": True,
2939                "v6.2.5": True,
2940                "v6.2.7": True,
2941                "v6.0.11": True
2942            }
2943        },
2944        "src_start_ip6": {
2945            "type": "string",
2946            "revisions": {
2947                "v6.0.0": True,
2948                "v7.0.0": True,
2949                "v6.0.5": True,
2950                "v6.4.4": True,
2951                "v6.4.0": True,
2952                "v6.4.1": True,
2953                "v6.2.0": True,
2954                "v6.2.3": True,
2955                "v6.2.5": True,
2956                "v6.2.7": True,
2957                "v6.0.11": True
2958            }
2959        },
2960        "encapsulation": {
2961            "type": "string",
2962            "options": [
2963                {
2964                    "value": "tunnel-mode",
2965                    "revisions": {
2966                        "v6.0.0": True,
2967                        "v7.0.0": True,
2968                        "v6.0.5": True,
2969                        "v6.4.4": True,
2970                        "v6.4.0": True,
2971                        "v6.4.1": True,
2972                        "v6.2.0": True,
2973                        "v6.2.3": True,
2974                        "v6.2.5": True,
2975                        "v6.2.7": True,
2976                        "v6.0.11": True
2977                    }
2978                },
2979                {
2980                    "value": "transport-mode",
2981                    "revisions": {
2982                        "v6.0.0": True,
2983                        "v7.0.0": True,
2984                        "v6.0.5": True,
2985                        "v6.4.4": True,
2986                        "v6.4.0": True,
2987                        "v6.4.1": True,
2988                        "v6.2.0": True,
2989                        "v6.2.3": True,
2990                        "v6.2.5": True,
2991                        "v6.2.7": True,
2992                        "v6.0.11": True
2993                    }
2994                }
2995            ],
2996            "revisions": {
2997                "v6.0.0": True,
2998                "v7.0.0": True,
2999                "v6.0.5": True,
3000                "v6.4.4": True,
3001                "v6.4.0": True,
3002                "v6.4.1": True,
3003                "v6.2.0": True,
3004                "v6.2.3": True,
3005                "v6.2.5": True,
3006                "v6.2.7": True,
3007                "v6.0.11": True
3008            }
3009        },
3010        "initiator_ts_narrow": {
3011            "type": "string",
3012            "options": [
3013                {
3014                    "value": "enable",
3015                    "revisions": {
3016                        "v6.4.4": True,
3017                        "v7.0.0": True
3018                    }
3019                },
3020                {
3021                    "value": "disable",
3022                    "revisions": {
3023                        "v6.4.4": True,
3024                        "v7.0.0": True
3025                    }
3026                }
3027            ],
3028            "revisions": {
3029                "v6.4.4": True,
3030                "v7.0.0": True
3031            }
3032        },
3033        "src_subnet6": {
3034            "type": "string",
3035            "revisions": {
3036                "v6.0.0": True,
3037                "v7.0.0": True,
3038                "v6.0.5": True,
3039                "v6.4.4": True,
3040                "v6.4.0": True,
3041                "v6.4.1": True,
3042                "v6.2.0": True,
3043                "v6.2.3": True,
3044                "v6.2.5": True,
3045                "v6.2.7": True,
3046                "v6.0.11": True
3047            }
3048        },
3049        "dst_start_ip": {
3050            "type": "string",
3051            "revisions": {
3052                "v6.0.0": True,
3053                "v7.0.0": True,
3054                "v6.0.5": True,
3055                "v6.4.4": True,
3056                "v6.4.0": True,
3057                "v6.4.1": True,
3058                "v6.2.0": True,
3059                "v6.2.3": True,
3060                "v6.2.5": True,
3061                "v6.2.7": True,
3062                "v6.0.11": True
3063            }
3064        },
3065        "name": {
3066            "type": "string",
3067            "revisions": {
3068                "v6.0.0": True,
3069                "v7.0.0": True,
3070                "v6.0.5": True,
3071                "v6.4.4": True,
3072                "v6.4.0": True,
3073                "v6.4.1": True,
3074                "v6.2.0": True,
3075                "v6.2.3": True,
3076                "v6.2.5": True,
3077                "v6.2.7": True,
3078                "v6.0.11": True
3079            }
3080        },
3081        "keylife_type": {
3082            "type": "string",
3083            "options": [
3084                {
3085                    "value": "seconds",
3086                    "revisions": {
3087                        "v6.0.0": True,
3088                        "v7.0.0": True,
3089                        "v6.0.5": True,
3090                        "v6.4.4": True,
3091                        "v6.4.0": True,
3092                        "v6.4.1": True,
3093                        "v6.2.0": True,
3094                        "v6.2.3": True,
3095                        "v6.2.5": True,
3096                        "v6.2.7": True,
3097                        "v6.0.11": True
3098                    }
3099                },
3100                {
3101                    "value": "kbs",
3102                    "revisions": {
3103                        "v6.0.0": True,
3104                        "v7.0.0": True,
3105                        "v6.0.5": True,
3106                        "v6.4.4": True,
3107                        "v6.4.0": True,
3108                        "v6.4.1": True,
3109                        "v6.2.0": True,
3110                        "v6.2.3": True,
3111                        "v6.2.5": True,
3112                        "v6.2.7": True,
3113                        "v6.0.11": True
3114                    }
3115                },
3116                {
3117                    "value": "both",
3118                    "revisions": {
3119                        "v6.0.0": True,
3120                        "v7.0.0": True,
3121                        "v6.0.5": True,
3122                        "v6.4.4": True,
3123                        "v6.4.0": True,
3124                        "v6.4.1": True,
3125                        "v6.2.0": True,
3126                        "v6.2.3": True,
3127                        "v6.2.5": True,
3128                        "v6.2.7": True,
3129                        "v6.0.11": True
3130                    }
3131                }
3132            ],
3133            "revisions": {
3134                "v6.0.0": True,
3135                "v7.0.0": True,
3136                "v6.0.5": True,
3137                "v6.4.4": True,
3138                "v6.4.0": True,
3139                "v6.4.1": True,
3140                "v6.2.0": True,
3141                "v6.2.3": True,
3142                "v6.2.5": True,
3143                "v6.2.7": True,
3144                "v6.0.11": True
3145            }
3146        },
3147        "auto_discovery_forwarder": {
3148            "type": "string",
3149            "options": [
3150                {
3151                    "value": "phase1",
3152                    "revisions": {
3153                        "v6.0.0": True,
3154                        "v7.0.0": True,
3155                        "v6.0.5": True,
3156                        "v6.4.4": True,
3157                        "v6.4.0": True,
3158                        "v6.4.1": True,
3159                        "v6.2.0": True,
3160                        "v6.2.3": True,
3161                        "v6.2.5": True,
3162                        "v6.2.7": True,
3163                        "v6.0.11": True
3164                    }
3165                },
3166                {
3167                    "value": "enable",
3168                    "revisions": {
3169                        "v6.0.0": True,
3170                        "v7.0.0": True,
3171                        "v6.0.5": True,
3172                        "v6.4.4": True,
3173                        "v6.4.0": True,
3174                        "v6.4.1": True,
3175                        "v6.2.0": True,
3176                        "v6.2.3": True,
3177                        "v6.2.5": True,
3178                        "v6.2.7": True,
3179                        "v6.0.11": True
3180                    }
3181                },
3182                {
3183                    "value": "disable",
3184                    "revisions": {
3185                        "v6.0.0": True,
3186                        "v7.0.0": True,
3187                        "v6.0.5": True,
3188                        "v6.4.4": True,
3189                        "v6.4.0": True,
3190                        "v6.4.1": True,
3191                        "v6.2.0": True,
3192                        "v6.2.3": True,
3193                        "v6.2.5": True,
3194                        "v6.2.7": True,
3195                        "v6.0.11": True
3196                    }
3197                }
3198            ],
3199            "revisions": {
3200                "v6.0.0": True,
3201                "v7.0.0": True,
3202                "v6.0.5": True,
3203                "v6.4.4": True,
3204                "v6.4.0": True,
3205                "v6.4.1": True,
3206                "v6.2.0": True,
3207                "v6.2.3": True,
3208                "v6.2.5": True,
3209                "v6.2.7": True,
3210                "v6.0.11": True
3211            }
3212        },
3213        "src_start_ip": {
3214            "type": "string",
3215            "revisions": {
3216                "v6.0.0": True,
3217                "v7.0.0": True,
3218                "v6.0.5": True,
3219                "v6.4.4": True,
3220                "v6.4.0": True,
3221                "v6.4.1": True,
3222                "v6.2.0": True,
3223                "v6.2.3": True,
3224                "v6.2.5": True,
3225                "v6.2.7": True,
3226                "v6.0.11": True
3227            }
3228        },
3229        "dst_addr_type": {
3230            "type": "string",
3231            "options": [
3232                {
3233                    "value": "subnet",
3234                    "revisions": {
3235                        "v6.0.0": True,
3236                        "v7.0.0": True,
3237                        "v6.0.5": True,
3238                        "v6.4.4": True,
3239                        "v6.4.0": True,
3240                        "v6.4.1": True,
3241                        "v6.2.0": True,
3242                        "v6.2.3": True,
3243                        "v6.2.5": True,
3244                        "v6.2.7": True,
3245                        "v6.0.11": True
3246                    }
3247                },
3248                {
3249                    "value": "range",
3250                    "revisions": {
3251                        "v6.0.0": True,
3252                        "v7.0.0": True,
3253                        "v6.0.5": True,
3254                        "v6.4.4": True,
3255                        "v6.4.0": True,
3256                        "v6.4.1": True,
3257                        "v6.2.0": True,
3258                        "v6.2.3": True,
3259                        "v6.2.5": True,
3260                        "v6.2.7": True,
3261                        "v6.0.11": True
3262                    }
3263                },
3264                {
3265                    "value": "ip",
3266                    "revisions": {
3267                        "v6.0.0": True,
3268                        "v7.0.0": True,
3269                        "v6.0.5": True,
3270                        "v6.4.4": True,
3271                        "v6.4.0": True,
3272                        "v6.4.1": True,
3273                        "v6.2.0": True,
3274                        "v6.2.3": True,
3275                        "v6.2.5": True,
3276                        "v6.2.7": True,
3277                        "v6.0.11": True
3278                    }
3279                },
3280                {
3281                    "value": "name",
3282                    "revisions": {
3283                        "v6.0.0": True,
3284                        "v7.0.0": True,
3285                        "v6.0.5": True,
3286                        "v6.4.4": True,
3287                        "v6.4.0": True,
3288                        "v6.4.1": True,
3289                        "v6.2.0": True,
3290                        "v6.2.3": True,
3291                        "v6.2.5": True,
3292                        "v6.2.7": True,
3293                        "v6.0.11": True
3294                    }
3295                },
3296                {
3297                    "value": "subnet6",
3298                    "revisions": {
3299                        "v6.0.0": True,
3300                        "v7.0.0": True,
3301                        "v6.0.5": True,
3302                        "v6.4.4": True,
3303                        "v6.4.0": True,
3304                        "v6.4.1": True,
3305                        "v6.2.0": True,
3306                        "v6.2.3": True,
3307                        "v6.2.5": True,
3308                        "v6.2.7": True,
3309                        "v6.0.11": True
3310                    }
3311                },
3312                {
3313                    "value": "range6",
3314                    "revisions": {
3315                        "v6.0.0": True,
3316                        "v7.0.0": True,
3317                        "v6.0.5": True,
3318                        "v6.4.4": True,
3319                        "v6.4.0": True,
3320                        "v6.4.1": True,
3321                        "v6.2.0": True,
3322                        "v6.2.3": True,
3323                        "v6.2.5": True,
3324                        "v6.2.7": True,
3325                        "v6.0.11": True
3326                    }
3327                },
3328                {
3329                    "value": "ip6",
3330                    "revisions": {
3331                        "v6.0.0": True,
3332                        "v7.0.0": True,
3333                        "v6.0.5": True,
3334                        "v6.4.4": True,
3335                        "v6.4.0": True,
3336                        "v6.4.1": True,
3337                        "v6.2.0": True,
3338                        "v6.2.3": True,
3339                        "v6.2.5": True,
3340                        "v6.2.7": True,
3341                        "v6.0.11": True
3342                    }
3343                },
3344                {
3345                    "value": "name6",
3346                    "revisions": {
3347                        "v6.0.0": True,
3348                        "v7.0.0": True,
3349                        "v6.0.5": True,
3350                        "v6.4.4": True,
3351                        "v6.4.0": True,
3352                        "v6.4.1": True,
3353                        "v6.2.0": True,
3354                        "v6.2.3": True,
3355                        "v6.2.5": True,
3356                        "v6.2.7": True,
3357                        "v6.0.11": True
3358                    }
3359                }
3360            ],
3361            "revisions": {
3362                "v6.0.0": True,
3363                "v7.0.0": True,
3364                "v6.0.5": True,
3365                "v6.4.4": True,
3366                "v6.4.0": True,
3367                "v6.4.1": True,
3368                "v6.2.0": True,
3369                "v6.2.3": True,
3370                "v6.2.5": True,
3371                "v6.2.7": True,
3372                "v6.0.11": True
3373            }
3374        },
3375        "dst_end_ip6": {
3376            "type": "string",
3377            "revisions": {
3378                "v6.0.0": True,
3379                "v7.0.0": True,
3380                "v6.0.5": True,
3381                "v6.4.4": True,
3382                "v6.4.0": True,
3383                "v6.4.1": True,
3384                "v6.2.0": True,
3385                "v6.2.3": True,
3386                "v6.2.5": True,
3387                "v6.2.7": True,
3388                "v6.0.11": True
3389            }
3390        },
3391        "src_subnet": {
3392            "type": "string",
3393            "revisions": {
3394                "v6.0.0": True,
3395                "v7.0.0": True,
3396                "v6.0.5": True,
3397                "v6.4.4": True,
3398                "v6.4.0": True,
3399                "v6.4.1": True,
3400                "v6.2.0": True,
3401                "v6.2.3": True,
3402                "v6.2.5": True,
3403                "v6.2.7": True,
3404                "v6.0.11": True
3405            }
3406        },
3407        "route_overlap": {
3408            "type": "string",
3409            "options": [
3410                {
3411                    "value": "use-old",
3412                    "revisions": {
3413                        "v6.0.0": True,
3414                        "v7.0.0": True,
3415                        "v6.0.5": True,
3416                        "v6.4.4": True,
3417                        "v6.4.0": True,
3418                        "v6.4.1": True,
3419                        "v6.2.0": True,
3420                        "v6.2.3": True,
3421                        "v6.2.5": True,
3422                        "v6.2.7": True,
3423                        "v6.0.11": True
3424                    }
3425                },
3426                {
3427                    "value": "use-new",
3428                    "revisions": {
3429                        "v6.0.0": True,
3430                        "v7.0.0": True,
3431                        "v6.0.5": True,
3432                        "v6.4.4": True,
3433                        "v6.4.0": True,
3434                        "v6.4.1": True,
3435                        "v6.2.0": True,
3436                        "v6.2.3": True,
3437                        "v6.2.5": True,
3438                        "v6.2.7": True,
3439                        "v6.0.11": True
3440                    }
3441                },
3442                {
3443                    "value": "allow",
3444                    "revisions": {
3445                        "v6.0.0": True,
3446                        "v7.0.0": True,
3447                        "v6.0.5": True,
3448                        "v6.4.4": True,
3449                        "v6.4.0": True,
3450                        "v6.4.1": True,
3451                        "v6.2.0": True,
3452                        "v6.2.3": True,
3453                        "v6.2.5": True,
3454                        "v6.2.7": True,
3455                        "v6.0.11": True
3456                    }
3457                }
3458            ],
3459            "revisions": {
3460                "v6.0.0": True,
3461                "v7.0.0": True,
3462                "v6.0.5": True,
3463                "v6.4.4": True,
3464                "v6.4.0": True,
3465                "v6.4.1": True,
3466                "v6.2.0": True,
3467                "v6.2.3": True,
3468                "v6.2.5": True,
3469                "v6.2.7": True,
3470                "v6.0.11": True
3471            }
3472        },
3473        "dst_start_ip6": {
3474            "type": "string",
3475            "revisions": {
3476                "v6.0.0": True,
3477                "v7.0.0": True,
3478                "v6.0.5": True,
3479                "v6.4.4": True,
3480                "v6.4.0": True,
3481                "v6.4.1": True,
3482                "v6.2.0": True,
3483                "v6.2.3": True,
3484                "v6.2.5": True,
3485                "v6.2.7": True,
3486                "v6.0.11": True
3487            }
3488        }
3489    },
3490    "revisions": {
3491        "v6.0.0": True,
3492        "v7.0.0": True,
3493        "v6.0.5": True,
3494        "v6.4.4": True,
3495        "v6.4.0": True,
3496        "v6.4.1": True,
3497        "v6.2.0": True,
3498        "v6.2.3": True,
3499        "v6.2.5": True,
3500        "v6.2.7": True,
3501        "v6.0.11": True
3502    }
3503}
3504
3505
3506def main():
3507    module_spec = schema_to_module_spec(versioned_schema)
3508    mkeyname = 'name'
3509    fields = {
3510        "access_token": {"required": False, "type": "str", "no_log": True},
3511        "enable_log": {"required": False, "type": bool},
3512        "vdom": {"required": False, "type": "str", "default": "root"},
3513        "state": {"required": True, "type": "str",
3514                  "choices": ["present", "absent"]},
3515        "vpn_ipsec_phase2_interface": {
3516            "required": False, "type": "dict", "default": None,
3517            "options": {
3518            }
3519        }
3520    }
3521    for attribute_name in module_spec['options']:
3522        fields["vpn_ipsec_phase2_interface"]['options'][attribute_name] = module_spec['options'][attribute_name]
3523        if mkeyname and mkeyname == attribute_name:
3524            fields["vpn_ipsec_phase2_interface"]['options'][attribute_name]['required'] = True
3525
3526    check_legacy_fortiosapi()
3527    module = AnsibleModule(argument_spec=fields,
3528                           supports_check_mode=True)
3529
3530    versions_check_result = None
3531    if module._socket_path:
3532        connection = Connection(module._socket_path)
3533        if 'access_token' in module.params:
3534            connection.set_option('access_token', module.params['access_token'])
3535
3536        if 'enable_log' in module.params:
3537            connection.set_option('enable_log', module.params['enable_log'])
3538        else:
3539            connection.set_option('enable_log', False)
3540        fos = FortiOSHandler(connection, module, mkeyname)
3541        versions_check_result = check_schema_versioning(fos, versioned_schema, "vpn_ipsec_phase2_interface")
3542
3543        is_error, has_changed, result = fortios_vpn_ipsec(module.params, fos, module.check_mode)
3544
3545    else:
3546        module.fail_json(**FAIL_SOCKET_MSG)
3547
3548    if versions_check_result and versions_check_result['matched'] is False:
3549        module.warn("Ansible has detected version mismatch between FortOS system and your playbook, see more details by specifying option -vvv")
3550
3551    if not is_error:
3552        if versions_check_result and versions_check_result['matched'] is False:
3553            module.exit_json(changed=has_changed, version_check_warning=versions_check_result, meta=result)
3554        else:
3555            module.exit_json(changed=has_changed, meta=result)
3556    else:
3557        if versions_check_result and versions_check_result['matched'] is False:
3558            module.fail_json(msg="Error in repo", version_check_warning=versions_check_result, meta=result)
3559        else:
3560            module.fail_json(msg="Error in repo", meta=result)
3561
3562
3563if __name__ == '__main__':
3564    main()
3565